我想知道如何使用子窗口更改父窗口中的内容。假设我有一个窗口,它在按下按钮时打开一个弹出窗口。这个新窗口包含一个JTextArea和另一个名为Ok的按钮。我怎么能改变父窗口的标题基于什么是在JTextArea当Ok按钮被按下?
在我看来,有两种常见的方法:
- 当OK键被按下时,子窗口可以将信息推送到父窗口。为此,子窗口需要引用父窗口,然后调用父窗口的公共方法。
- 父窗口可以从子窗口获取信息。这可能以两种方式之一发生。
- 如果子窗口是模态对话框,那么一旦对话框被处理并且程序流返回到父窗口的代码,父窗口可以简单地查询子窗口。
- 如果对话框是非模态对话框,那么父窗口将需要向子窗口添加侦听器,例如
PropertyChangeListener
,并且当该侦听器触发适当的事件时,父窗口将查询对话框窗口以获取信息。这是一个使用Observer设计模式的例子。
我更喜欢拉技术,因为它是父对象,它是具有显示子窗口的代码并且需要从子窗口获取信息的对象,它应该具有提取所需信息的代码,并且子窗口将不需要了解或引用父窗口对象。我觉得这样干净多了。
例如,请查看我的代码在这里,这里和这里。
Edit:注意,对于您描述的示例,您可以通过使用JOptionPane轻松解决这个问题。许多人不知道JOptionPanes可以显示非常复杂的GUI;基本上,任何可以放在JPanel上的东西都可以显示在JOptionPane(以及其他一些)中。您只需显示显示JTextField的JOptionPane,当程序流返回到调用程序时,只需获取JOptionPane中显示的JTextField所保存的文本。再简单不过了