从Pojo

时间:2016-08-23 06:20:40

标签: java swing thread-safety

场合

我在多窗口环境中遇到以下情况:

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。也许有人有一个更好的主意(除了改变框架实例化的概念)

1 个答案:

答案 0 :(得分:0)

我认为最干净的设计是将所需的上下文信息封装到单个根类中(这可以是您想要的简单或复杂,例如Properties对象,单个自定义bean,完整模型包)然后通过链传递该类。链中的每个swing组件都需要是javax.swing类的子类,以便允许包含上下文信息参数的构造函数。链中每个类中额外字段和额外构造函数参数的开销很小。

另一种方法是扁平化链,使JFrame类负责创建整个布局。它将创建Pojo对象本身(以及其间的所有组件),从而能够轻松传递所需的上下文信息。