关闭 jdialog 后 jtextfield 在 jdialog 中保留值

jtextfield retains value in jdialog after closing jdialog

我是 Java 和 Swing 的新手。我创建了一个 jframe 并在其中添加了一个菜单栏和 MenuItem。

单击菜单项时,应该会打开一个 jdialog。现在 jdialog 中有一个 jtextfield 和一个 jlabel。现在对我来说问题是 'when dialog is opened for first time, the textfield is empty and thats correct. Now i close the jdialog and i open it again but now instead of getting an empty textfield in jdialog, i get the data entered previously' 这不是应该发生的事情,因为 jdialogs 'default close operation' 属性 设置为 'dispose'。但这对我来说并没有发生......

我不知道我做错了什么。我以前从未尝试过 applet/swing 任何其他方式(将此视为我的第一个演示学习计划)

第二张图在这里

JTextField 保留其值,因为它不受 JDialog 关闭的影响,而是被隐藏,因为它的父项(JDialog)是不可见的

将对话框设置为处置不会重新初始化子组件,因此它们会保留其值。此处提供了有关此行为的一些其他信息:

  • JDialog setVisible(false) vs dispose()
  • JDialog

您可以防止/控制这种情况的一种方法是 "informing" 通过添加 WindowEvent 并在 windowClosing() 中提供必要的功能来擦除正在关闭的文本字段的对话框方法

Netbeans gui-builder 将为您生成以下内容:

  • 右击对话框
    • 活动
      • Window
        • Window关闭

提供:

private void jDialog1WindowClosing(java.awt.event.WindowEvent evt) {                                       
    // TODO add your handling code here:
} 

您可以在其中添加:textfield.setText(""); 以清除文本字段


另一种方法是创建您自己的对话框并在构造函数中设置组件。因为创建一个新实例将包含具有默认值的组件,有效地重置它