Swing:JDialogs如何与JFrame对话

IAm*_*aja 6 java user-interface swing

我正在构建我的第一个Swing应用程序,并试图找出我的JDialogs - 当用户选择JMenuItem时专门调用 - 可以更新JFrame的主客户区域中的组件,这是整个应用程序的父"窗口" .

这是我提出的设计,但不知道它是否:(1)只是简单的坏,(2)不是标准(因此最好)的方式,或(3)如果我完全偏离基础这里.任何建议都非常感谢.

基本上,用户选择JMenuItem,它启动JDialog.用户与对话框中的组件交互,然后单击"完成".如果一切都有效,那么JDialog会关闭,我希望父窗口(一个JFrame)更新其状态(并最终波及其组件).

我的设计:

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

从理论上讲,我喜欢这种方法:每次不同的事件发生时,它应该是干净的,并且没有"spaghetti"类型的多个控件调用.但是,我担心它可能有点矫枉过正.

最佳实践在这里有什么要求?我不是一个真正的GUI人!

tra*_*god 5

Java有几种实现观察者模式的方法 ; 这里讨论了几个.

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

绑定属性也是一个很好的选择,如图所示这里.

如果你去Observable,你需要使用代表.

附录:作为具体示例,使用该EventListenerList方案来管理图表,数据集和系列事件.相反,使用bean属性来通知侦听器窗口小部件选择.