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
,您可以在System.exit(0)
调用之后简单地调用setVisible
,但是您将使用JButton
处理该对话框。pps-您可以简单地使用
JOptionPane
在更少的代码行中获得相同的结果;)更新...
从本质上讲,
JOptionPane.showXxx
是一种阻止方法,直到关闭显示的对话框,该方法才会返回。这意味着您可以假定该方法返回了一个,对话框已关闭,并在用户按下“确定”时...
JOptionPane.showMessageDialog(jf, "Hello there", "Window", JOptionPane.INFORMATION_MESSAGE);
System.exit(0);