关闭 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("");
以清除文本字段
另一种方法是创建您自己的对话框并在构造函数中设置组件。因为创建一个新实例将包含具有默认值的组件,有效地重置它
我是 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关闭
- Window
- 活动
提供:
private void jDialog1WindowClosing(java.awt.event.WindowEvent evt) {
// TODO add your handling code here:
}
您可以在其中添加:textfield.setText("");
以清除文本字段
另一种方法是创建您自己的对话框并在构造函数中设置组件。因为创建一个新实例将包含具有默认值的组件,有效地重置它