该 JMenuItems
的 JMenuBar
跌至 JPanel
添加到JFrame中,但JPanel会擦掉 JMenuItems
. 我应该暂停重新绘制JPanel吗?我正在使用 getGraphics()
在...上 JPanel
绘制图像时,本方法由一个延迟200毫秒的线程调用。
编辑: 这是一个(非常简单的)游戏,在里面。JPanel
. (我已经添加了一个字段 paused
到JPanel上,我已经编辑了绘画方法,所以它重新绘制了 JPanel
唯有 paused
是 false
,然而我不知道这个 "解决方案 "好不好。(它被设置为 true
当用户点击菜单并设置成 false
当选择或取消它时)。)
你应该总是重新绘制 JPanel
而不是一个任意的线程。 如果您想这样做是为了使面板产生动画(例如您提到的200ms延迟),那么可以考虑使用 javax.swing.Timer
它定期在事件派遣线程上启动一个ActionEvent。
例子
public class MyPanel extends JPanel {
public void paintComponent(Graphics g) {
super.paintComponent(g);
// Add additional graphics operations here.
}
}
final JPanel panel = new MyPanel();
int delay = 200; // Milliseconds
ActionListener taskPerformer = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
panel.repaint();
}
};
new Timer(delay, taskPerformer).start();
我在JPanel上使用getGraphics()来绘制图像。
千万不要这样使用getGraphics()方法。你无法控制何时应该重新绘制组件。自定义绘画应该通过重写面板的paintComponent()方法来完成。当你使用Timer时,你只需使用panel.repaint(),Swing重绘管理器应该会处理需要绘制的细节。
请看一下 javax.swing.Timer
文件
https:/docs.oracle.comjavase1.5.0docsapijavaxswingTimer.html。
它的顶部有代码,可以在固定的时间间隔内发射一个事件。