gpt4 book ai didi

java - 为什么我的匿名类操作监听器无法退出 Java GUI?

转载 作者:行者123 更新时间:2023-12-01 22:40:29 24 4
gpt4 key购买 nike

ob1是一个JButton,点击时会弹出一个对话框。一旦弹出,弹出窗口将显示“Hello There”,下方会显示“Hi”按钮。当单击“Hi”时,我希望它一起退出 GUI。但在这里,我似乎已经正确地完成了所有事情,但我不明白为什么它不起作用。请帮忙。

谢谢

ob1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
JDialog jd = new JDialog(); //Pop-Up window
jd.setLocationRelativeTo(null);
jd.setSize(350, 150);
jd.setModal(true);
JPanel jp = new JPanel();
jp.setLayout(new BoxLayout(jp, BoxLayout.Y_AXIS));
JLabel jl = new JLabel("Hello there");
JButton jb3 = new JButton("Hi");
jp.add(jl);
jp.add(jb3);
jd.add(jp);
jd.setVisible(true);

//acition listener for the Hi button and when clicked on supposed to exit the GUI
jb3.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
System.exit(0);
}
});
}
});

最佳答案

因为对话框是模态的...

jd.setModal(true);

代码将停止在...

jd.setVisible(true);

直到对话框关闭,这意味着...

//acition listener for the Hi button and when clicked on supposed to exit the GUI
jb3.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
System.exit(0);
}
});

直到对话框关闭后才调用,这意味着 ActionListener 直到对话框关闭后才注册到按钮,这是毫无意义的...

交换这两行...

jb3.addActionListener(...);
jd.setVisible(true);

看看How to Make Dialogs了解更多详情...

ps-您实际上并不需要 ActionListener,只需在 setVisible 调用后调用 System.exit(0) 即可,但您将使用 JButton 来处理该对话框。

pps- 您可以简单地使用 JOptionPane 以更少的代码行实现相同的结果;)

已更新...

本质上,JOptionPane.showXxx 是一个阻塞方法,在它显示的对话框关闭之前,该方法不会返回。

这意味着您可以假设该方法返回时,对话框已关闭并且用户按下“确定”...

JOptionPane.showMessageDialog(jf, "Hello there", "Window", JOptionPane.INFORMATION_MESSAGE); 
System.exit(0);

关于java - 为什么我的匿名类操作监听器无法退出 Java GUI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26228270/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com