Java ActionListener没有';你好像不工作?

Java ActionListener没有';你好像不工作?,java,swing,graphics,actionlistener,paintcomponent,Java,Swing,Graphics,Actionlistener,Paintcomponent,我想做一个2D游戏。我开始制作绘图类,但我遇到了一个问题:ActionListener无法工作。它不会画出或输出我的信息,说它正在工作。代码如下: public class Drawing extends JPanel implements ActionListener { private int count = 0; public void actionPerformed(ActionEvent e) { count++; repaint()

我想做一个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);
    }
}

我假设这会起作用,因为我在其他项目中使用了这种绘图方式。什么会导致这种情况?

您不应该保留对图形对象的引用并直接调用
paint()
。您应该调用
repaint()
,并等待Swing调用
paintComponent()
方法,您应该重写该方法以在Swing作为参数传递给该方法的图形对象上执行自定义绘制

有关更多信息,请参阅

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);
    }
}

您不应该保留对图形对象的引用并直接调用
paint()
。您应该调用
repaint()
,并等待Swing调用
paintComponent()
方法,您应该重写该方法以在Swing作为参数传递给该方法的图形对象上执行自定义绘制

有关更多信息,请参阅

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);
    }
}

@Duncan Palmer和Boot.frame.getGraphics()将在第一次Swing事件中消失,为了重新绘制JComponent,在不保存到BuffereImage+1的情况下什么也不做如果我使用AWT框架或Swing JFrame有关系吗?@Duncan:是的,可能有关系。这是一个Swing应用程序,因此您不应该使用框架对象,而应该只使用JFrame。否则,您可能会失去Swing的许多优点。因此,您是说每次按下使用此ActionListener的JButton时都看不到hi消息?它不是用于JButton,而是用于绘制JFrames JPanel。@Duncan Palmer和Boot.frame.getGraphics(),不做任何操作,在第一次Swing事件中,如果要重新绘制JComponent,在不保存到BuffereImage+1的情况下什么都不做,那么使用AWT帧或Swing JFrame是否重要?@Duncan:是的,可能很重要。这是一个Swing应用程序,因此您不应该使用框架对象,而应该只使用JFrame。否则,您可能会失去Swing的许多优点。因此,您的意思是,每次按下使用此ActionListener的JButton时,您都看不到hi消息?它不是用于JButton,而是用于绘制JFrames JPanel。