我有两个不同且独立的JFrame
窗口:
DataFrame
GraphFrame
第一个是供用户操作,输入不同的值和模式以显示在2)中显示的图形上。 1)将特定值发送到2)(带有双精度的数组),以便" GraphFrame"可以创建图表。
我调用" main"来自" main"中GraphFrame的方法DataFrame的方法,以便它们同时运行并在整个过程中都可见。
我希望这些帧完全独立,这意味着1)的任务是发送值,2)的任务是检查何时收到值,然后创建图形。
我还希望将大多数方法保密,以便无法从外部来源访问它们。
我的问题是,我不知道哪种方法可以实现这种数据交换。第2帧的最佳方式是什么?保持"倾听"它需要接受的价值?
我应该在观察者https://sourcemaking.com/design_patterns/observer的帮助下在2)创建getter / setter吗?
或者我应该使用线程吗?
甚至创建一个等待值的传统循环,例如:
while(array.isEmpty()) {
//stuck here
}
//create the graph from the values in array
目前我从setter方法接收2)中的值,但到目前为止,我无法在获取值之后执行我想要的代码。
您认为实施此方法的最佳方式是什么?
P.S。:我应该考虑不从GraphFrame
调用DataFrame
main并分别运行这两个吗?
答案 0 :(得分:1)
根据我的理解,您尝试在同一个应用程序中运行两个JFrame。从概念上讲,这是一个一个 UI分为两个窗口而不是运行两个框架。
Swing要求所有UI元素都由一个线程 - AWT-Thread更新。此外,与UI的交互将在AWT-Thread中运行。你需要考虑到这一点。
最佳做法是将数据模型和视图分开。要解决您的问题,您可以为GraphFrame创建一个模型,该模型由DataFrame上的更改操纵。这些变化可能是由使用SwingUtils.invokeLater()更新GraphFrame的模型上的侦听器拾取。
当然,您可能需要另外注意一些问题,根据您的要求,您可能需要进一步解耦这两个部分。
答案 1 :(得分:0)
您可以尝试让GraphFrame初始化然后停止,但在GraphFrame中有一个(静态/非静态)方法,DataFrame可以调用该方法来更新图形。然后,重新绘制GraphFrame。
这是你要找的吗?