JFrame等待数据接收执行其任务

时间:2016-05-22 13:01:55

标签: java swing jframe observer-pattern

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

  1. DataFrame
  2. GraphFrame
  3. 第一个是供用户操作,输入不同的值和模式以显示在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并分别运行这两个吗?

2 个答案:

答案 0 :(得分:1)

根据我的理解,您尝试在同一个应用程序中运行两个JFrame。从概念上讲,这是一个一个 UI分为两个窗口而不是运行两个框架。

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

最佳做法是将数据模型和视图分开。要解决您的问题,您可以为GraphFrame创建一个模型,该模型由DataFrame上的更改操纵。这些变化可能是由使用SwingUtils.invokeLater()更新GraphFrame的模型上的侦听器拾取。

当然,您可能需要另外注意一些问题,根据您的要求,您可能需要进一步解耦这两个部分。

答案 1 :(得分:0)

您可以尝试让GraphFrame初始化然后停止,但在GraphFrame中有一个(静态/非静态)方法,DataFrame可以调用该方法来更新图形。然后,重新绘制GraphFrame。

这是你要找的吗?