我想制作2D游戏。我开始制作绘图课程,但我遇到了一个问题:ActionListener
不起作用。它不会绘制或输出我的消息说它正在工作。这是代码:
public class Drawing extends JPanel implements ActionListener {
private int count = 0;
public void actionPerformed(ActionEvent e) {
count++;
repaint();
}
@Override
protected void paintComponent(Graphics g) {
System.out.println("Hi");
g.setColor(Color.black);
g.clearRect(0, 0, Boot.WIDTH, Boot.HEIGHT);
g.fillRect(0, 0, Boot.WIDTH, Boot.HEIGHT);
g.setColor(Color.white);
g.drawString("Path count: " + count, 50, 50);
}
}
我认为这会起作用,因为我在其他项目中使用这种绘图方式。会导致这种情况的原因是什么?
答案 0 :(得分:4)
您不应该保留对Graphics对象的引用并直接调用paint()
。您应该调用repaint()
,并等待Swing调用paintComponent()
方法,您应该覆盖该方法以在Swing作为方法的参数传递的Graphics对象上执行自定义绘画。
有关详细信息,请参阅http://java.sun.com/products/jfc/tsc/articles/painting/index.html。
public class Drawing extends JPanel implements ActionListener {
private int count = 0;
public void actionPerformed(ActionEvent e) {
count++;
repaint();
}
@Override
protected void paintComponent(Graphics g) {
System.out.println("Hi");
g.setColor(Color.black);
g.clearRect(0, 0, Boot.WIDTH, Boot.HEIGHT);
g.fillRect(0, 0, Boot.WIDTH, Boot.HEIGHT);
g.setColor(Color.white);
g.drawString("Path count: " + count, 50, 50);
}
}