场合
我在多窗口环境中遇到以下情况:
Main application -> JFrame 1 -> Swing Components -> Pojo 1
-> JFrame 2 -> Swing Components -> Pojo 2
-> JFrame 3 -> Swing Components -> Pojo 3
-> ...
每个JFrame都有一些上下文信息,例如: G。帧ID。帧是在同一个应用程序中创建的。
问题
是否有某些方法(或模式)可以从Pojo类访问JFrame的上下文信息,而无需将其交给整个组件链?而且无需交出电子邮件。 G。挥杆组件并使用e。 G。 SwingUtilities.getRoot()?
我当然不能使用静态变量。 ThreadLocal可能有所帮助,但这很棘手,你无法从e中实例化Pojo。 G。一个ActionListener。也许有人有一个更好的主意(除了改变框架实例化的概念)?
答案 0 :(得分:0)
我认为最干净的设计是将所需的上下文信息封装到单个根类中(这可以是您想要的简单或复杂,例如Properties
对象,单个自定义bean,完整模型包)然后通过链传递该类。链中的每个swing组件都需要是javax.swing
类的子类,以便允许包含上下文信息参数的构造函数。链中每个类中额外字段和额外构造函数参数的开销很小。
另一种方法是扁平化链,使JFrame
类负责创建整个布局。它将创建Pojo对象本身(以及其间的所有组件),从而能够轻松传递所需的上下文信息。