java - 在不引用 JPanel 本身的情况下处理多个 UI JPanel 中的 Swing 操作

标签 java swing action jpanel factory

我的第一个问题是:“当在与不同的 UI 组件结合使用,这些组件被不同的 Swing JPanel 对象引用,而这些对象(似乎)没有直接相互引用”?

我的第二个问题是:“当操作的actionPerformerd()方法使用两个或更多不同的UI组件引用时,如何在操作和UI组件之间保持引用”?我需要在不同地方的 actionPerformed() 方法中没有直接关系的 ui 上下文(好吧,至少我是这么认为的)。

让我解释一下我正在处理的设计问题......

我有一个 JFrame,它包含所有 UI 逻辑。此 JFrame 包含对 JPanel 逻辑的三个不同引用:ControlPanelMainPanelStatusPanel(全部扩展 JPanel)。

ControlPanel 设置 JMenu 和项目、JToolBar 项目,并且此 JPanel 将添加到安装了所有适当操作的内容 Pane 中。

MainPanel 是与用户进行实际通信的地方。这个 JPanel 包含一个 CardLayout,里面有一堆 JPanel。

StatusPanel 实际上是一个状态栏,处理来自不同 JPanel 的各种文本消息,但由 StatusBarManager 对象处理。这里没有花哨的东西,只有无聊的 GUI 东西。

现在是问题部分:我首先为我能想到的每个操作编写了一堆扩展的AbstractActions(不是一个好主意)。接下来,我编写了一个 ActionFactory 来为特定任务分发一个 Action 对象,例如: ActionFactory.getAction("file.new"); 这似乎是一种更好的方法,因为我现在可以为所有"file"操作实例化一个 FileAction 对象,但有一个区别:actionPerformed() 方法的实现。这“似乎”是个好主意,因为当我在不同的 JPanel 中调用相同的 ActionFactory.getAction("file.new"); 时,我得到相同的 Action 返回之前已实例化的对象(节省大量重复对象)。 嗯,这似乎是个好主意,但我仍然在 JPanel 的上下文中挣扎。当我使用 JMenuJMenuItems 选择要在 MainPanel 中显示的“卡片”时,我位于 ControlPanel 中> 仅限 ui 上下文,在 actionPerformed() 方法中,我没有 MainPanel 上下文来使用该 CardLayout 设置“卡片” J 面板。 当我在 MainPanel 中(按下按钮)并且没有 StatusPanel 上下文时,情况也是如此。

我已经在 stackoveflow 上查看了之前的这些建议,但不知何故我无法建立联系。我缺少线索...

关于 SO 行动的类似问答: here , here , here , here , here , here , here , here ,和here .

一些人建议为此使用一个框架,例如 appframework 或 eclipse rcp 或 spring rcp 或其他框架。但由于除了默认 JVM 6 中可用的框架之外的几个原因,我宁愿不使用任何框架。

我希望有人能够解决这个问题,帮助我找到解决问题的好方法。提前感谢您的帮助!

最佳答案

我认为您描述的设计中的主要缺陷是操作直接针对 UI,而不是针对模型/ Controller 。

如果您的操作只是更新模型,并且每个 View 部分与模型的相关部分保持同步,则可以避免一个操作与其他几个 View 组件之间的依赖关系。

这也允许共享通用逻辑。您将该逻辑从操作移动到模型/ Controller ,并且该操作基本上变成了一行(调用该逻辑)。

关于java - 在不引用 JPanel 本身的情况下处理多个 UI JPanel 中的 Swing 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11669438/

相关文章:

java - hibernate 更新不起作用

java - 打印哈希表内的多值数据

java - 为 JComboBox 提供水平滚动条的可移植方法

java - 如何更改 JTextArea 中某些单词的颜色?

Java 监听器 - 更简单的方法?

C# - 在参数中声明方法(委托(delegate))

java - ShareActivityProvider 不显示为按钮

php - Phalcon php 中不能调用除 indexAction 以外的 indexController 操作

java - java中一个线程占用多少内存

java - 从操作系统获取数字格式