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

我写了个程序,在JTable中的数据上单击右键弹出一个菜单如下图
单击删除时弹出一个对话框,可以选择是或者否
在多次操作时发现不管我选择是或者否,理论上选择之后就关闭该该警告对话框,不过实际情况是我在选择后对话框关闭了,但是又会自动的再弹出来,要关闭好几次才能关闭。 求各位高手看看,悬赏不是问题。 以下是侦听事件的代码/** * 内部类,实现对JTable的右键侦听
* @author Administrator
*
*/
class myListenerJTable extends MouseAdapter{
private JPopupMenu jPopupMenu = new JPopupMenu();
private JMenuItem delete = new JMenuItem("删除");
private JMenuItem save = new JMenuItem("保存");
public void mousePressed(MouseEvent event) {
detail_TableMouseMousePressed(event);
}

private void detail_TableMouseMousePressed(MouseEvent event) {
if(event.getButton()==3){
jPopupMenu.add(delete);
jPopupMenu.add(save);

delete.setIcon(new ImageIcon("image\\delete.png"));
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 ++;
}
});
save.setIcon(new ImageIcon("image\\save.png"));
save.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {

}
});
jPopupMenu.show(event.getComponent(), event.getX(), event.getY());
}
}
}

下面这一行是JTable 对象添加的侦听事件
detail_Table.addMouseListener(new myListenerJTable());

建议你把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都执行一遍,对话框对应弹出多次。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-04-11
你的问题在于不该在
if(event.getButton()==3)

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

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

第三次出现三个提示框

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

这些初始化的工具应该在其它的方法中进行。比如构造方法。这样才会只响应一次。本回答被提问者采纳
第2个回答  2013-04-11
看看这段代码吧,你关闭一次又一次这个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 ++;
}
});

如何在java程序中,当点击一个按钮后,关闭当前窗口,开启一个新的窗口...
程序的入口public static void main(String[] args) {new LoginFrame().setVisible(true);\/\/创建登录窗口,并可见}}MainFrame类import java.awt.*;import java.awt.event.*;import javax.swing.*;public

怎么用Java swing设置一个有是否按钮的弹框
", "提示", JOptionPane.YES_NO_OPTION); \/\/ 返回值为0或1\/\/由于该对话框可以获取返回值, 所以根据返回值的不同,进行不同的处理if (choose == JOptionPane.YES_OPTION) {System.out.println("你选择了Yes");} else if (choose == JOptionPane.NO_OPTION) {System.out.println("你选择了NO...

Java在Swing中如何实现弹出一个对话框的效果?
有几种提示框:第一种:JOptionPane.showMessageDialog(jPanel, "提示消息", "标题",JOptionPane.WARNING_MESSAGE);第二种:int n = JOptionPane.showConfirmDialog(null, "你高兴吗?", "标题",JOptionPane.YES_NO_OPTION);\/\/返回的是按钮的index i=0或者1 第三种:Object[] obj2 ={ "足球"...

java 关闭的时候如何写 提示用户是否保存 选择是就保存。选择否就关闭...
int i = javax.swing.JOptionPane.showConfirmDialog(null, "choose one", "choose one",javax.swing.JOptionPane.YES_NO_OPTION);i=0:选择是 i=1:选择否

Java swing中,按左上角图标弹出来的菜单(如图)叫什么?怎么屏蔽?_百度知...
ERROR_DIALOG 错误对话框风格 COLOR_CHOOSER_DIALOG 拾色器对话框风格 FILE_CHOOSER_DIALOG 文件选择对话框风格 QUESTION_DIALOG 问题对话框风格 WARNING_DIALOG 警告对话框风格 在使用Jframe的时候,普遍都会有标题栏,还有最小化,最大化,关闭按纽的,还要实现拖动窗体的功能。这样的话,对我...

如何用java弹出自己编辑的对话框
再一次回答你的这个问题。修改完成的代码如下 String choiceAnswer = (String) JOptionPane.showInputDialog(null, "请选择关机选项", "关机选项",JOptionPane.PLAIN_MESSAGE, null, choices, choices[1]);原因解析:第一问题:JOptionPane.PLAIN_MESSAGE这个常量表示弹出的窗口的类型。中间使用点而不是逗号...

swing的对话框有哪些
```java Object[] options = {"确定", "取消", "帮助"};int response = JOptionPane.showOptionDialog(null, "请选择一个选项", "选择", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[0]);```这些对话框的使用使得在Swing应用程序中进行用户交互变得...

求助,在JAVA中使用SWING如何实现弹出对话框效果?
方法1.假设,主程序窗体为B,login窗体为A,运行程序后先启动A窗体。待用户信息等输入效验正确后在吧A窗体隐藏掉把B窗体显示出来。方法2. extends JDialog implements WindowListener 也同样可以实现。在做构造函数的时候setContentPane。把你的jpanl 放进去就OK了。

JAVA 中有“确定”,“取消”的判断对话框??
if(e.getSource==btn1)或者if (e.getCommand=="确定")

java 如何实现点击关闭后 关闭窗口 求详细代码
\/\/监听关闭按钮的点击操作 this.addWindowListener(new WindowAdapter(){ \/\/new 一个WindowAdapter 类 重写windowClosing方法 \/\/WindowAdapter是个适配器类 具体看jdk的帮助文档 public void windowClosing(WindowEvent e) { \/\/这里写对话框 if(JOptionPane.showConfirmDialog(null,"退出","提 示",...

相似回答