Java ActionListener没有';你好像不工作?
我想做一个2D游戏。我开始制作绘图类,但我遇到了一个问题: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()
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。