在java中调用repaint后,将重复ActionPeformed
我在面板中有一个名为“撤消”的按钮,下面是代码。我的问题是,单击“撤消”后,需要执行的操作会重复。 在我将撤销初始化代码放入Jpanel的构造函数后,我解决了这个问题。我知道这与重绘有关,也可能与线程有关,但如果可能的话,我希望有一个更清晰的爆炸,以便更好地理解在java中调用repaint后,将重复ActionPeformed,java,swing,repaint,Java,Swing,Repaint,我在面板中有一个名为“撤消”的按钮,下面是代码。我的问题是,单击“撤消”后,需要执行的操作会重复。 在我将撤销初始化代码放入Jpanel的构造函数后,我解决了这个问题。我知道这与重绘有关,也可能与线程有关,但如果可能的话,我希望有一个更清晰的爆炸,以便更好地理解 public void paintComponent(Graphics g) { /* * Some other actions. */ undo.setLocation(535 , 680);
public void paintComponent(Graphics g)
{
/*
* Some other actions.
*/
undo.setLocation(535 , 680);
undo.setSize(100 , 40);
undo.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e)
{
System.out.println("Inside Action Performed");
gameBoard.undoMove();
repaint();
}
});
add(undo);
}
切勿在paint方法内注册侦听器。每次重新绘制组件时,都会注册一个额外的侦听器!在设置组件时,应该只在程序中添加一次动作侦听器。在本例中,每次绘制组件时都要添加一个动作侦听器。因此,在数百个按钮上会有数百个动作侦听器。在
paintComponent
@Berger之外执行此操作对我来说似乎是一个答案,我认为您可以添加它@Joan还paintComponent
设置undo
的位置和大小???哎哟paintComponent
应该只执行它所说的操作:绘制组件。