在JFrame上单击关闭按钮时执行某些操作(需要澄清)

时间:2016-12-24 17:33:49

标签: java swing netbeans jframe

我正在寻找有关旧问题答案的澄清: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对象不同。

2 个答案:

答案 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将关闭。