我正在尝试向JFrame添加退出确认检查,但我希望对话框不修饰。我想我需要使用自定义JDialog和自定义JOptionPane。
frame.addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(java.awt.event.WindowEvent windowEvent) {
JDialog dialog = new JDialog();
dialog.setUndecorated(true);
JOptionPane pane = new JOptionPane("Are you sure that you want to exit?",
JOptionPane.QUESTION_MESSAGE,JOptionPane.YES_NO_OPTION);
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); //I don't even know if this line does anything
dialog.setContentPane(pane);
dialog.pack();
dialog.setLocationRelativeTo(frame);
dialog.setVisible(true);
System.out.println("Next Line"); //this line does not work.
}
});
对话框完全按照我的要求显示,但点击是或否则无效。对话框不会消失,我无法找到检查单击按钮的方法。 "下一行"永远不会打印到控制台。
答案 0 :(得分:2)
阅读How to Make Dialogs上Swing教程中有关使用JOptionPane的工作示例的部分。
如果你真的想在你自己的JDialog中添加一个JOptionPane,那么请阅读JOptionPane
API,了解如何检查选择了哪个按钮的基本示例。
答案 1 :(得分:2)
单独嵌入JOptionPane是不够的。您需要注册“是”和“否”按钮的回调并正确处理它们。这可以通过覆盖setValue()方法
来完成JOptionPane pane = new JOptionPane(
"Are you sure that you want to exit?",
JOptionPane.QUESTION_MESSAGE, JOptionPane.YES_NO_OPTION) {
@Override
public void setValue(Object newValue) {
if (newValue == Integer.valueOf(JOptionPane.YES_OPTION)) {
System.out.println("yes");
} else if ( newValue == Integer.valueOf(JOptionPane.NO_OPTION)) {
System.out.println("no");
}
}
};