我想知道如何使用子窗口更改父窗口中的内容。所以,假设我有一个窗口,按下按钮会打开一个弹出窗口。该新窗口包含一个 JTextArea 和另一个名为 Ok 的按钮。当按下“确定”按钮时,如何根据 JTextArea 中的内容更改父窗口的标题?
最佳答案
在我看来,有两种常见的方法可以做到这一点:
- 当按下 OK 时,子窗口可以推送信息到父窗口。为此,子窗口需要引用父窗口,然后调用父窗口的公共(public)方法。
- 父窗口可以拉子窗口的信息。这可以通过以下两种方式之一发生。
- 如果子窗口是一个模态对话框,那么一旦处理完对话框并且程序流返回到父代码,父窗口就可以简单地查询子窗口。
- 如果对话框是一个非模态对话框,那么父窗口需要给子窗口添加一个监听器,例如
PropertyChangeListener
,并且当适当的事件发生时由这个监听器触发,父窗口将查询对话窗口的信息。这将是使用Observer 设计模式的示例。
我更喜欢拉技术,因为它是父对象,它是具有显示子窗口的代码并且需要来自子窗口的信息的对象,它应该具有提取所需信息的代码,并且子窗口不需要知道或引用父窗口对象。这对我来说似乎更干净。
有关此示例,请查看我的代码 here , here和 here .
编辑:请注意,对于您描述的示例,您可以使用 JOptionPane 轻松解决此问题。许多人不知道 JOptionPanes 可以显示非常复杂的 GUI;基本上任何可以放在 JPanel 上的东西都可以显示在 JOptionPane 中(然后是一些)。您只需显示显示 JTextField 的 JOptionPane,当程序流返回到调用程序时,只需获取显示在 JOptionPane 中的 JTextField 保存的文本。没有比这更简单的了。
关于java - 在 Java 中从子窗口更改父窗口中的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14129612/