1

我想知道如何使用子窗口更改父窗口中的某些内容。所以,假设我有一个窗口,按下按钮会打开一个弹出窗口。该新窗口包含一个 JTextArea 和另一个名为 Ok 的按钮。当按下 Ok 按钮时,如何根据 JTextArea 内的内容更改父窗口的标题?

4

1 回答 1

6

在我看来,有两种常见的方法可以做到这一点:

  • 当按下 OK 时,子窗口可以将信息送到父窗口。为此,子窗口需要对父窗口的引用,然后调用父窗口的公共方法。
  • 父窗口可以从子窗口中提取信息。这可以以两种方式之一发生。
    • 如果子窗口是模态对话框,那么一旦对话框被处理并且程序流程返回到父代码,父窗口就可以简单地查询子窗口。
    • 如果对话框是非模态对话框,则父窗口需要为子窗口添加一个侦听器,例如 a PropertyChangeListener,并且当此侦听器触发适当的事件时,父窗口将查询对话框窗口以获取信息。这将是使用观察者设计模式的一个例子。

我更喜欢 pull 技术,因为它是具有代码来显示子窗口并且需要来自子窗口的信息的对象的父对象,它应该具有提取所需信息的代码,并且子窗口会不需要知道或引用父窗口对象。这对我来说似乎更干净。

例如,请在此处此处此处查看我的代码。

编辑: 请注意,对于您描述的示例,您可以使用 JOptionPane 轻松解决此问题。许多人不知道 JOptionPanes 可以显示非常复杂的 GUI。基本上任何可以放在 JPanel 上的东西都可以显示在 JOptionPane 中(然后是一些)。您只需显示显示您的 JTextField 的 JOptionPane,当程序流返回到调用程序时,只需获取 JTextField 保存的显示在 JOptionPane 中的文本。没有什么比这更简单了。

于 2013-01-02T21:43:14.417 回答