java - Swing:JDialogs 如何与 JFrame 对话

标签 java swing user-interface

我正在构建我的第一个 Swing 应用程序,并试图弄清楚我的 JDialogs(当用户选择 JMenuItem 时专门调用)如何更新 JFrame 的主客户区中的组件,该主客户区是整个应用程序。

这是我想出的设计,但不知道它是否:(1) 很糟糕,(2) 不是标准(因此最好)的方式,或者 (3) 如果我完全在这里偏离基地。非常感谢任何建议。

基本上,用户选择一个 JMenuItem,它启动一个 JDialog。用户与对话框上的组件交互,然后单击“完成”。如果一切都通过验证,JDialog 将关闭,我希望父窗口(一个 JFrame)更新其状态(并最终波及到其组件)。

我的设计:

有一个作为 JFrame 子类(我的应用程序)成员的 AppStateController。然后,我将创建一个 AppStateChangeListenerAppStateChange EventObject 子类,以便每当对话框验证并关闭时,它都会触发一个 AppStateChange 事件。由于父 JFrame 是该事件的唯一注册监听器,因此我可以定义一个处理程序来获取传递给它的事件。我会确保 AppStateChangeEvent 有足够的元数据来描述所有可能的更改。

从理论上讲,我喜欢这种方法:它应该是干净的,并且不会在每次触发不同的事件时对多个控件进行“意大利面条”式调用。但是,我担心这可能有点矫枉过正。

这里的最佳实践有哪些规定?我不是真正的 GUI 人!

最佳答案

Java 有几种实现 observer pattern 的方法;讨论了几个here .

EventListenerList规定的机制可能是最通用的,因为它允许您定义自己的事件和监听器类型,并且 Swing 程序员很熟悉。不是让 JFrame 成为监听器,而是让最高级别 JComponent这样做。 JComponent 的每个实例有一个合适的 protected 成员,listenerList

Bound Properties也是一个很好的选择,如图所示here .

如果你选择 Observable ,您需要使用委托(delegate)。

附录:作为具体示例,使用 EventListenerList 方案来管理图表、数据集和系列事件。相比之下,使用 bean properties通知听众小部件选择。

关于java - Swing:JDialogs 如何与 JFrame 对话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7083137/

相关文章:

java - 标签未在同一 GUI 实例中更新

python - 是否需要removeWidget()

c# - 以编程方式重命名计算机

java - hashCode 和 Equals 在 Map 键中无法正常工作

java - 为什么我的泛型不采用子类?

java - 在另一个聚合根的上下文中创建聚合根

java - 为什么 getcontentpane() 未定义?

java - Swing:如何创建不使用布局的可滚动 JPanel 列表

python - PyQt4 和 Scapy 中的 Ping 工具

JavaFX MouseDragReleased 事件未发送到 fullDrag 中的目标节点