我有两个不同且独立的JFrame窗口:


DataFrame
GraphFrame


第一个是供用户操纵的,输入不同的值和模式以显示在2)中显示的图形上。 1)将特定的值发送到2)(带有双精度的数组),以便“ GraphFrame”可以创建图形。

我在DataFrame的“ main”方法中从GraphFrame调用“ main”方法,以便它们都同时运行,并且在整个过程中都可见。

我希望这些框架完全独立,这意味着1)的任务是发送值,而2)的任务是检查何时接收到值,然后创建图形。

我还更喜欢将大多数方法设为私有,这样就不能从外部资源访问它们。

我的问题是,我不知道哪种方法是实现此数据交换的最佳方法。第2帧)保持“收听”其需要接收的值的最佳方法是什么?

我应该在2)上并在Observer https://sourcemaking.com/design_patterns/observer的帮助下创建getter / setter吗?

还是应该使用线程?

甚至创建一个传统的循环来等待值,例如:

while(array.isEmpty()) {
     //stuck here
}
//create the graph from the values in array


目前,我正在从setter方法中接收2)中的值,但是到目前为止,我只有在获得值之后才能执行我想要的代码。

您认为实现此目标的最佳方法是什么?

附注:我是否应该考虑不从GraphFrame调用DataFrame main并分别运行这2个?

最佳答案

据我了解,您正在尝试在同一应用程序中运行两个JFrame。从概念上讲,这是将一个UI分为两个窗口,而不是像您所说的那样运行两个Frame。

Swing要求所有UI元素都由一个线程-AWT-Thread更新。与UI的交互也将在AWT-Thread中运行。您需要考虑到这一点。

另外,最好的做法是分离数据模型和视图。为了解决您的问题,您可以为GraphFrame创建一个模型,该模型由DataFrame上的更改操作。这些变化可以例如由使用SwingUtils.invokeLater()更新GraphFrame的模型上的侦听器拾取。

当然,您可能还需要解决许多问题,根据您的要求,您可能需要进一步分离这两个部分。

09-28 00:14