所以我知道在这个网站和整个互联网上提出了很多类似的问题,但是我找不到确切的答案或者能够满足我想要完成的事情。
我的程序中有多个JOptionPane
个。所有这些JOptionsPane
都有一个" X"在顶角。目前,它们的功能与任何其他JOptionPane
的默认按钮功能相同。
如果用户点击" X",我希望程序退出。与其他任何按钮一起,屏幕将关闭,但是" X"我想引发System.exit(0)
类型的事件。
我尝试使用if
语句来实现这一点:
int result = JOptionPane.showOptionDialog(null, getPanel(),"Return Builder", JOptionPane.OK_CANCEL_OPTION,
JOptionPane.PLAIN_MESSAGE, null, options, "default");
if(result==JOptionPane.CLOSED_OPTION){
System.exit(0);
}
但我发现无论用户点击哪个按钮,整个程序都会退出。即使他们点击了其他一个有动作监听器的JButton
,程序仍会退出。我将发布这个特定GUI的更完整图片:
public static void displayGUI(){//Method to display the GUI.
final JButton buttonCreate = new JButton("Create Return");
final JButton buttonConfirm = new JButton("Confirm");
buttonConfirm.addActionListener(new ActionListener(){
public void actionPerformed(final ActionEvent ae){
if(output.getSize()>0){
JOptionPane.getRootFrame().dispose();
}else if(verifyBatch==true){
JOptionPane.getRootFrame().dispose();
}else if(verifyBatch==false && output.getSize()==0){
JOptionPane.showMessageDialog(null, "You haven't added any transactions to confirm" +
" and you have no previously completed batches!");
}
}
});
buttonCreate.addActionListener(new ActionListener(){
public void actionPerformed(final ActionEvent ae){
if(verifyBatch==true){
initialScreenDecisions="NONE";//The user did not choose to add any entry details to the output list.
MainWriter.finishedCounter=true;//The boolean counter to trigger that the return is finished goes to true.
while(MainWriter.entryDetails.size()>0){//Removes all entry details from the input list.
MainWriter.entryDetails.remove(0);
}
while(output.size()>0){//Removes all entry details from the output list..
output.remove(0);
}
JOptionPane.getRootFrame().dispose();
}else{
JOptionPane.showMessageDialog(null, "There are no completed batches!");
}
}
});
//Creates a JOptionPane for the first GUI featuring 7 buttons and 2 lists..
final Object[] options = new Object[] {buttonConfirm,buttonCreate};
int result = JOptionPane.showOptionDialog(null, getPanel(),"Return Builder", JOptionPane.OK_CANCEL_OPTION,
JOptionPane.PLAIN_MESSAGE, null, options, "default");
if(result==JOptionPane.CLOSED_OPTION){
System.exit(0);
}
}
所以从这个例子中,我怎样才能制作" X"而且只有" X"退出整个程序?我有许多其他JOptionsPane
我需要实施类似的措施。
答案 0 :(得分:2)
使用“X”我想引发
System.exit(0)
类型的事件。
首先,JVM将在您的最后一个窗口(JOptionPane
)关闭后自动退出。这可能是
即使他们点击了其他一个有动作监听器的
JButton
,程序仍会退出。
其次,用户通常不希望关闭对话框存在程序,从GUI设计的角度考虑它。您通常有一个父JFrame
,对话框补充它,它们不是GUI的“驱动力”。
如果我创建一个框架只是为了停止自动关闭JVM,你会发现JOptionPane
确实给出了不同的返回值来按下“X”和其他选项:
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setVisible(true);
int result = JOptionPane.showConfirmDialog(null, "AA");
System.out.println(result);
if (result == JOptionPane.CLOSED_OPTION)
System.exit(0);
}