gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:54:06 25 4
gpt4 key购买 nike

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

  1. 数据帧
  2. GraphFrame

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

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

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

我还喜欢将大多数方法保留为私有(private),以便无法从外部源访问它们。

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

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

或者我应该使用线程吗?

或者甚至创建一个持续等待值的传统循环,例如:

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

目前,我正在从 setter 方法接收 2) 中的值,但到目前为止,我无法仅在获得值后执行我想要的代码。

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

P.S.:我是否应该考虑不从 DataFrame 调用 GraphFrame main 并单独运行这两个?

最佳答案

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

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

此外,最好的做法是将数据模型和 View 分开。为了解决您的问题,您可以为 GraphFrame 创建一个模型,该模型通过 DataFrame 上的更改进行操作。这些变化可能例如由使用 SwingUtils.invokeLater() 更新 GraphFrame 的模型上的监听器拾取。

当然,您可能还需要额外注意许多问题,并且根据您的要求,您可能需要进一步解耦这两个部分。

关于java - JFrame 等待数据接收以执行其任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37374704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com