对不起,标题很模糊,但我真的没想出合适的标题。
我正在使用Swing开发我的第一个应用程序,并且我很难弄清楚如何跟踪应用程序的当前视图。我的意思是当前视图是例如是否已按下按钮。例如,您甚至无法在加载文件之前按“执行”。我已经提出了一个架构解决方案,这真的很糟糕,我想知道如何改进它。
我有一个名为infoText的标签,每次按下按钮时它都会更新。通过这个,我将以这种愚蠢的方式跟踪应用程序状态:
if (infoText == LOADING_NARROW){
printSelected(narrow_list);
}else{
printSelected(list);
}
答案 0 :(得分:4)
使用普通的Java对象和变量,而不是使用GUI组件跟踪您的状态。
在这种情况下,只需保留boolean loadingNarrow
即可在需要时引用和更新。
此外,如果由于按下按钮而导致运行大负载并且不希望用户再次按下它,则可以在加载启动后禁用该按钮并稍后重新启用它。 (注意我假设您在单独的线程上运行负载,因此GUI不会冻结)。
答案 1 :(得分:2)
Swing Components跟踪他们自己的状态。
我的建议:
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已经检查了组件的状态。你似乎部分地重复了这项工作。