我的第一个问题是:“当相同的动作与不同的 UI 组件结合使用时,我如何限制 Swing 的数量Actions
(使用 ,这些 UI 组件被不同的 Swing对象(似乎)没有直接引用彼此”?AbstractAction
JPanel
我的第二个问题是:“当操作的 actionPerformerd() 方法使用两个或更多不同的 UI 组件引用时,如何在操作和 UI 组件之间保持引用”?我需要在没有直接关系的不同地方的 actionPerformed() 方法中的 ui 上下文(嗯,至少我是这么认为的)。
让我解释一下我正在处理的设计问题......
我有一个包含所有 UI 逻辑的 JFrame。此 JFrame 包含对 JPanel 逻辑的三个不同引用: a ControlPanel
、 aMainPanel
和 a StatusPanel
(均扩展 JPanel)。
ControlPanel
设置 JMenu 和项目、JToolBar 项目和这个 JPanel 被添加到内容窗格中,并安装了所有适当的操作。
这MainPanel
是与用户进行实际通信的地方。这个 JPanel 拥有一个 CardLayout,里面有一堆 JPanel。
这StatusPanel
实际上是一个状态栏,处理来自不同 JPanel 的各种文本消息,但由 StatusBarManager 对象处理。这里没有花哨的东西,只是无聊的 gui 东西。
现在是问题部分:我首先为我能想到的每个动作编写了一堆扩展程序AbstractActions
(不是那么好)。接下来,我编写ActionFactory
了一个Action
为特定任务分发 obj 的程序,例如: ActionFactory.getAction("file.new");
这似乎是一种更好的方法,因为我现在可以FileAction
为所有“文件”操作实例化一个对象,但有一个区别:actionPerformed()
方法的实现。这“似乎”是个好主意,因为当我调用不同JPanel
的ActionFactory.getAction("file.new");
相同对象时,我会Action
返回之前已经实例化的相同对象(保存了很多重复的对象)。好吧,这似乎是个好主意,我仍然在JPanels
. 当我选择一个“卡片”显示在MainPanel
使用JMenu
和JMenuItems
,我ControlPanel
仅在 ui 上下文中,并且在actionPerformed()
方法中我没有使用该JPanelMainPanel
设置“卡”的上下文。CardLayout
当我在 MainPanel 中(按下按钮)并且没有 StatusPanel 的上下文时也是如此。
我已经查看了这些关于 stackoveflow 的先前建议,但不知何故我无法建立联系。我错过了线索...
在 SO: 这里,这里,这里,这里,这里,这里,这里,这里,这里,这里,这里,这里,这里,这里,这里,这里,这里和这里。
一些人建议为此使用框架,如 appframework 或 eclipse rcp 或 spring rcp 或其他。但我更喜欢根本不使用任何框架,除了默认 JVM 6 中可用的其他原因。
我希望有人能在这件事上大放异彩,帮助我找到解决问题的好方法。提前感谢您的帮助!