java Swing 点击对话框选择是或者否后又再次弹出刚才关闭的对话框

2024-12-27 05:42:58
推荐回答(3个)
回答1:

建议你把jpopupMenu包括delete、save的构造以及对应的事件都放到鼠标事件mousePressed之外,mousePressed事件里面只放jPopupMenu.show(event.getComponent(), event.getX(), event.getY());
之所以出现多次,就是因为
delete.addActionListener(new ActionListener() {
int b=0;
public void actionPerformed(ActionEvent arg0) {
int a = JOptionPane.showConfirmDialog(null, "是否删除", "警告", JOptionPane.YES_NO_OPTION);
// JOptionPane.showMessageDialog(null, a);
System.out.println(b);
this.b ++;
}
});
你每弹出菜单一次,就在delete上多注册了一次ActionListener,这个listener在源码中是用List存放的,不会覆盖,只会重复增加。你每弹出一次菜单,就会把List里面的所有ActionListener都执行一遍,对话框对应弹出多次。

回答2:

你的问题在于不该在
if(event.getButton()==3)

这个时候添加弹出菜单,的侦听事件。
你的现象就会该是第二次删除时出现吧。

现在是相当于你点一次右键,
就添加一次删除的侦听事件,
第一次出现一个提示框
第二次出现二个提示框

第三次出现三个提示框

。。。。。。。。。。。。。。

这些初始化的工具应该在其它的方法中进行。比如构造方法。这样才会只响应一次。

回答3:

看看这段代码吧,你关闭一次又一次这个b有没有变化
delete.addActionListener(new ActionListener() {
int b=0;
public void actionPerformed(ActionEvent arg0) {
int a = JOptionPane.showConfirmDialog(null, "是否删除", "警告", JOptionPane.YES_NO_OPTION);
// JOptionPane.showMessageDialog(null, a);
System.out.println(b);
this.b ++;
}
});