java Swing 点击对话框选择是或者否后又再次弹出刚才关闭的对话框
我写了个程序,在JTable中的数据上单击右键弹出一个菜单如下图单击删除时弹出一个对话框,可以选择是或者否在多次操作时发现不管我选择是或者否,理论上选择之后就关闭该该警告...
我写了个程序,在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()); 展开
单击删除时弹出一个对话框,可以选择是或者否
在多次操作时发现不管我选择是或者否,理论上选择之后就关闭该该警告对话框,不过实际情况是我在选择后对话框关闭了,但是又会自动的再弹出来,要关闭好几次才能关闭。 求各位高手看看,悬赏不是问题。 以下是侦听事件的代码/** * 内部类,实现对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()); 展开
3个回答
展开全部
建议你把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都执行一遍,对话框对应弹出多次。
之所以出现多次,就是因为
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都执行一遍,对话框对应弹出多次。
展开全部
你的问题在于不该在
if(event.getButton()==3)
这个时候添加弹出菜单,的侦听事件。
你的现象就会该是第二次删除时出现吧。
现在是相当于你点一次右键,
就添加一次删除的侦听事件,
第一次出现一个提示框
第二次出现二个提示框
第三次出现三个提示框
。。。。。。。。。。。。。。
这些初始化的工具应该在其它的方法中进行。比如构造方法。这样才会只响应一次。
if(event.getButton()==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 ++;
}
});
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 ++;
}
});
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询