【发布时间】:2014-01-15 23:47:12
【问题描述】:
我设计了一个面板,其中包含一些按钮。按钮附有一个 ActionListener。当我点击那个按钮时,这个 ActionListener 会检测到这个单击的 4 个事件。而它应该只检测到一个。有人知道具体是什么原因吗?
public class Buttons extends JPanel
{
private JButton undo=new JButton("Undo");
private JButton replay=new JButton("Replay");
public void paint(Graphics g)
{
super.paint(g);
super.setSize(new Dimension(560,30));
super.add(replay);
super.add(undo);
undo.setBorder(new LineBorder(Color.WHITE,3));
replay.setBorder(new LineBorder(Color.WHITE,3));
undo.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
Controler.pieces.undo();
Controler.reDraw();
}
});
replay.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
System.out.println("Dastiii");
}
});
}
}
这些事件在这里被使用
public void undo()
{
System.out.print(Controler.allMoves.size());
if(Controler.allMoves.size()<=1)
{
init_board();
return;
}
Piece temp[][]=Controler.allMoves.get(Controler.allMoves.size()-2);
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
{
board[i][j].set_name(temp[i][j].get_name());
board[i][j].set_oneWay(temp[i][j].get_oneWay());
}
}
Controler.allMoves.remove(Controler.allMoves.size()-2);
}
【问题讨论】:
-
将您的代码添加到问题中。
-
也许它在完整的点击过程中检测到类似
buttonDownbuttonPressedbuttonUp和其他一些东西。 -
@csmckelvey 我添加了带有按钮的动作监听器,buttonDown 或其他一些链接到我认为的鼠标监听器。我说的对吗?
-
您确实控制了
paint方法的执行,但您决定在此处添加ActionListener。所以每次调用paint时,你添加另一个ActionListener到你的按钮.. -
一定要查看 MadProgrammer 的答案。
标签: java eclipse swing actionlistener