ob1是一个JButton,当点击一个对话框时会弹出。一旦弹出,弹出窗口会显示" Hello There"和#34;嗨"下面的按钮。当"嗨"单击,我希望它一起退出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);
}
});
}
});
答案 0 :(得分:3)
因为对话框是模态的......
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
是一种阻止方法,在它显示的对话框关闭之前,该方法不会返回。
这意味着您可以假设该方法返回一个,对话框已关闭,用户按下&#34; OK&#34; ...
JOptionPane.showMessageDialog(jf, "Hello there", "Window", JOptionPane.INFORMATION_MESSAGE);
System.exit(0);
答案 1 :(得分:0)
这是解决方案......
Exit() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(500,500);
ob1 = new JButton("Hi");
ob1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
final 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");
jb3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
System.out.println("Hello...");
System.exit(0);
}
});
jp.add(jl);
jp.add(jb3);
jd.add(jp);
jd.setVisible(true); //It should be after the action listener....
}
});
JPanel pane = new JPanel();
pane.add(ob1);
add(pane);
setVisible(true);
}
public static void main(String args[]) {
System.out.println("Hi...");
new Exit();
}
您必须在调用setVisible()之前添加actionListener ....