Sol*_*ace 2 java random runtime awt graphics2d
编辑:使用awt ...
我试图在基于applet的数学游戏中显示随机数,并遇到了一个问题.根据我调用方法的位置,发生以下两种情况之一:
快速插图:
private int setNumberOne() {
return rand.nextInt(11) + 2;
}
private int setNumberTwo() {
return rand.nextInt(11) + 2;
}
private int setAnswer() {
return setNumberTwo() * setNumberOne();
}
private void displayOutput() {
Graphics2D g2d = graphics();
int one = setNumberOne();
int ans = setAnswer();
setNumberTwo();
g2d.setColor(Color.WHITE);
g2d.drawString(one + " x ? = " + ans, 480, 480);
}
Run Code Online (Sandbox Code Playgroud)
在初始化方法中调用此函数会显示一个静态问题,我可以在满足特定触发器时在其他位置更新,但是更新事件会在其上方绘制其他所有内容,使其不可见.我设法看到这个工作的唯一方法是从游戏中删除其他图像进行测试.
有没有办法在applet中设置GUI元素的"优先级"?
我目前正在尝试将该displayOutput()方法包含在它自己的线程中,但我对Java并不是那么有经验,并且证明它很难解决.
我也尝试不允许后台在运行时更新,但结果是移动的游戏对象在整个屏幕上留下了痕迹.
我错过了什么?如果有人对如何正确实施这些建议有任何建议,我会很高兴听到他们的意见.
更新:"...在AWT中使用Component的paint(...)方法绘制,并使用JVM传入的Graphics对象" -
解决了,谢谢!
不要getGraphics()用于您的Graphics组件,因为这将返回一个非持久化对象,该对象将在下一次重绘时被覆盖.相反,paintComponent(...)如果这是一个Swing应用程序(您没有说)或者paint(...)如果是AWT 的Component 方法,则使用JComponent的方法,并使用JVM传入的Graphics对象.主要阅读有关如何使用Java绘制的教程,因为这已经在那里得到了很好的解释.
| 归档时间: |
|
| 查看次数: |
241 次 |
| 最近记录: |