2

我正在制作一个从文件(Serialized objectInputStream)读取的小程序,这是一个注册表列表,其中每个条目都有一个设置为 true 或 false 的布尔变量。

在这个程序中,我有两个独立的 JPanel 类。一个是 A 类,可以改变这些变量的值,另一个是 B 类,检查这些变量是真还是假。这两个类是在带有 main-method 的 gui 类下创建的。

如果我更改了 A 类中的变量,我如何才能看到 B 类中的新更新值?我尝试在每个类中做一个 ObjectInput- 输出流。这意味着对于每个更改,该类将其写入文件并在更改/读取之前将其读回。这行得通,但它是最优的吗?有一个更好的方法吗?

程序模型

4

4 回答 4

2

您可以创建一个 C 类来保存您阅读的信息。所以 B 类读取数据并将信息放入 C 类。当 A 类更改值时,它会触发一个事件来通知 B 类。

您可以使用 aHashMap<String, Boolean>来存储数据。String 是值的名称,Boolean 是值。然后您可以像public void update(String name, boolean newValue)在 B 类中一样创建方法。此方法将更新值,然后在您需要通知新值的所有类中调用一个方法。

于 2013-05-12T19:52:29.463 回答
1

我认为这是观察者模型视图控制器模式的典型用例。

controller注册一个模型及其观察者。

它接收请求(事件)以进行更改并将它们委托给model. 当模型发生变化时,它会通知observers模型有一个新的状态,他们应该做一些事情来获得这些变化。

在您的情况下Main可以用作 aController和 theObservers将是您的Panel1andPanel2

剩下的就是Model你需要创建一个只处理读取和写入文件的新类。实际上,您似乎在 A-Class 中有此代码,即Panel1。这段代码需要从它移到新类。

注意 jdk 已经提供了一个Observer接口和一个Observable类。

编辑

java中的简单示例(链接

于 2013-05-12T20:01:06.297 回答
0

您可以针对这种情况或用例使用观察者设计模式。

观察者模式是一种软件设计模式,其中一个称为主体的对象维护其依赖项列表,称为观察者,并自动通知他们任何状态更改,通常通过调用他们的方法之一。它主要用于实现分布式事件处理系统。

于 2013-05-12T19:51:19.620 回答
0

您应该将数据与 gui 分开。尝试使用模型-视图-控制器设计。此外,您可以在 A/B 类中使用 ActionEvents/ActionListeners。请提供有关如何显示数据的更多信息。

于 2013-05-12T20:32:05.473 回答