我正在寻找有关旧问题答案的澄清:Do something when the close button is clicked on a JFrame
在答案中,Ravindra Gullapalli建议使用此代码:
import javax.swing.JOptionPane;
/*Some piece of code*/
frame.addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(java.awt.event.WindowEvent windowEvent) {
if (JOptionPane.showConfirmDialog(frame,
"Are you sure to close this window?", "Really Closing?",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION){
System.exit(0);
}
}
});
首先,这是在Netbeans中这样做的正确方法吗?
其次,什么是“框架”? (答案中第3行代码中的第一个单词以及showConfirmDialog的第一个参数)。根据swing API,它应该是Component类型。但是,当我用我的JFrame的Title属性替换它时,我仍然有“找不到符号”错误。组件名称是否与JFrame标题不同,如果是,我在哪里可以找到它?在NetBeans Navigator中,它只显示[JFrame]并且不显示组件名称,这与在类型旁边显示和编辑组件名称的所有其他Form对象不同。
答案 0 :(得分:2)
“frame”简单地假定为未显示的代码中JFrame的变量名。如果您的程序有一个名为“frame”的JFrame或其他顶级窗口,并且它位于该行代码的范围内,那么您就可以开展业务了。否则,您必须使用当前 使用的变量名称。这是避免“借用”代码的另一个原因。而是学习概念,借用想法,并使用它们来编写自己的代码。
关于:
组件名称是否与JFrame标题不同,如果是,我在哪里可以找到它?
不确定你的意思。同样在答案的代码中,frame是变量的名称,而不是“组件名称”或“标题”。这涉及Java 101概念 - 变量名和变量范围,与Swing或NetBeans无关。
关于:
这是NetBeans的正确方法“
如果这是你想要实现的行为。
答案 1 :(得分:2)
其次,什么是“框架”?
对包含您刚刚点击的关闭按钮的框架的引用。
然而,当我用我的JFrame的Title属性替换它时
不确定为什么要使用“标题”属性。那只是一个字符串。您无法打开/关闭字符串。
首先,这是在Netbeans中这样做的正确方法吗?
WindowListener中代码的更好结构可能是:
JFrame frame = (JFrame)windowEvent.getSource();
然后您不必担心在班级中定义变量。
您也可以使用:
frame.dispose();
而不是System.exit()。如果这是最后一个打开的窗口,JVM将关闭。