IAm*_*aja 6 java user-interface swing
我正在构建我的第一个Swing应用程序,并试图找出我的JDialogs - 当用户选择JMenuItem时专门调用 - 可以更新JFrame的主客户区域中的组件,这是整个应用程序的父"窗口" .
这是我提出的设计,但不知道它是否:(1)只是简单的坏,(2)不是标准(因此最好)的方式,或(3)如果我完全偏离基础这里.任何建议都非常感谢.
基本上,用户选择JMenuItem,它启动JDialog.用户与对话框中的组件交互,然后单击"完成".如果一切都有效,那么JDialog会关闭,我希望父窗口(一个JFrame)更新其状态(并最终波及其组件).
我的设计:
有一个AppStateController是JFrame子类(我的应用程序)的成员.然后我将创建一个AppStateChangeListener和AppStateChangeEventObject子类,以便每当对话框验证并关闭时,它都会触发一个AppStateChange事件.由于父JFrame是该事件的唯一注册侦听器,因此我可以定义一个处理程序来获取传递给它的事件.我会确保AppStateChangeEvent有足够的元数据来描述所有可能的更改.
从理论上讲,我喜欢这种方法:每次不同的事件发生时,它应该是干净的,并且没有"spaghetti"类型的多个控件调用.但是,我担心它可能有点矫枉过正.
最佳实践在这里有什么要求?我不是一个真正的GUI人!
规定的机制EventListenerList可能是最通用的,因为它允许您定义自己的事件和监听器类型,并且Swing程序员熟悉它.不要成为JFrame一个听众,让最高级别JComponent这样做.每个实例JComponent都有一个合适的protected成员,listenerList.
如果你去Observable,你需要使用代表.
附录:作为具体示例,jfreechart使用该EventListenerList方案来管理图表,数据集和系列事件.相反,jcalendar使用bean属性来通知侦听器窗口小部件选择.