【发布时间】:2014-09-08 08:14:11
【问题描述】:
我正在尝试学习如何在 Java 中为我正在处理的一个小组项目做自定义 GUI 的东西。我过去做过用户表单类型的 GUI,所以我知道我在这里做的事情的要点,但是自定义绘图的东西仍然让我感到困惑。
我从网上复制了这段代码,我一直在试图弄清楚它是如何工作的,但我不明白为什么我不能循环绘制方法。作为一个简单的测试,我试图让程序在我的光标上绘制一个椭圆。它在光标上绘制椭圆,但只在运行时绘制一次,然后什么也不做。
我怎样才能使这个循环,以便我可以继续画东西?或者我需要以其他方式调用/使用这些方法吗?
public class BombermanGUI extends JFrame {
public static final int CANVAS_WIDTH = 640;
public static final int CANVAS_HEIGHT = 480;
private DrawCanvas canvas;
public BombermanGUI() {
canvas = new DrawCanvas();
canvas.setPreferredSize(new Dimension(CANVAS_WIDTH, CANVAS_HEIGHT));
Container cp = getContentPane();
cp.add(canvas);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.pack();
this.setTitle("......");
this.setVisible(true);
}
private class DrawCanvas extends JPanel{
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
setBackground(Color.BLACK);
int x, y;
x = MouseInfo.getPointerInfo().getLocation().x - this.getLocationOnScreen().x;
y = MouseInfo.getPointerInfo().getLocation().y - this.getLocationOnScreen().y;
g.setColor(Color.YELLOW);
g.drawOval(x, y, 10, 10);
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new BombermanGUI();
}
});
}
}
【问题讨论】:
-
添加一个事件监听器并让它调用
repaint方法,例如用于跟踪鼠标光标的鼠标运动侦听器,或者让某个线程运行您的游戏并定期触发repaint。 -
哎呀,我在删除不必要的位时把代码搞砸了,现在就修复它
-
还可以查看TimerBasedAnimation 的想法。
-
啊,重绘是我一直在寻找的,应该可以解决我的问题。感谢您的建议 davidpostill。没有答案,所以我无法选择最佳答案...
标签: java swing loops graphics drawing