跟踪Swing GUI“当前状态”

时间:2011-03-01 16:00:20

标签: java swing

对不起,标题很模糊,但我真的没想出合适的标题。

我正在使用Swing开发我的第一个应用程序,并且我很难弄清楚如何跟踪应用程序的当前视图。我的意思是当前视图是例如是否已按下按钮。例如,您甚至无法在加载文件之前按“执行”。我已经提出了一个架构解决方案,这真的很糟糕,我想知道如何改进它。

我有一个名为infoText的标签,每次按下按钮时它都会更新。通过这个,我将以这种愚蠢的方式跟踪应用程序状态:

if (infoText == LOADING_NARROW){
                    printSelected(narrow_list);
                }else{
                    printSelected(list);
                }

3 个答案:

答案 0 :(得分:4)

使用普通的Java对象和变量,而不是使用GUI组件跟踪您的状态。

在这种情况下,只需保留boolean loadingNarrow即可在需要时引用和更新。

此外,如果由于按下按钮而导致运行大负载并且不希望用户再次按下它,则可以在加载启动后禁用该按钮并稍后重新启用它。 (注意我假设您在单独的线程上运行负载,因此GUI不会冻结)。

答案 1 :(得分:2)

Swing Components跟踪他们自己的状态。

我的建议:

  • 将应用程序启动为默认状态。
  • 以事件驱动的方式调整设置。例如,当单击JButton A时,启用JButtons B和C并设置JTextField。
  • 使用内置方法检查对象的状态。例 if((jButtonA.isEnabled() && jTextField.getText().equals("foobar"))

您还可以使用mediator pattern对相关组件及其操作进行分组。

答案 2 :(得分:0)

首先:它们是不同的方法,还是复制粘贴错误?

      printSelecteds (narrow_list);
      printSelected (list);

第二:要禁用通常使用的按钮:

ok.setEnabled (false);

如果文件已加载,请致电

ok.setEnabled (true);

启用JButton“ok”。

我不知道这与您的信息文本和printSelected(s)方法有何关联。如果您通过GUI传递状态,由于竞争条件,您可能会松开一个或另一个。更改标签可能是状态变化的下沉。

您可以使用互斥位模式来实现干扰:

FILE_OPEN = 1;
SEARCHED = 2;
FRIDAY = 4; 

按位添加它们:

state |= FRIDAY

以二进制模式询问他们:

if (state | FILE_OPEN) ....

对我来说看起来并不优雅。我想我不确定你的问题是什么。 :) 要在按下某个按钮时触发动作,您必须实现一个actionListener,它也可以修改您的标签。但是swing eventloop已经检查了组件的状态。你似乎部分地重复了这项工作。