Java 跟踪Swing GUI的“当前状态”

Java 跟踪Swing GUI的“当前状态”,java,swing,Java,Swing,对不起,标题不清楚,但我实在想不出一个合适的标题 我正在用Swing开发我的第一个应用程序,我很难弄清楚如何跟踪应用程序的当前视图。例如,我的意思是,如果按钮已经按下,那么当前视图就是一个例子。例如,在加载文件之前,您不应该按Execute。我提出了一个架构解决方案,这真的很糟糕,我想知道如何改进它 我有一个名为infoText的标签,它几乎每次按下按钮都会更新。通过这种方式,我以这种方式跟踪应用程序状态: if (infoText == LOADING_NARROW){

对不起,标题不清楚,但我实在想不出一个合适的标题

我正在用Swing开发我的第一个应用程序,我很难弄清楚如何跟踪应用程序的当前视图。例如,我的意思是,如果按钮已经按下,那么当前视图就是一个例子。例如,在加载文件之前,您不应该按Execute。我提出了一个架构解决方案,这真的很糟糕,我想知道如何改进它

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

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

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

在这种情况下,只需保持boolean LoadingShorrow,以便在需要时进行引用和更新


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

与其使用GUI组件跟踪您的状态,不如使用普通的Java对象和变量

在这种情况下,只需保持boolean LoadingShorrow,以便在需要时进行引用和更新


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

Swing组件会跟踪它们自己的状态

我的忠告是:

将应用程序启动到默认状态。 以事件驱动的方式调整设置。例如,单击jbuttona时,启用JButtons B和C并设置JTextField。 使用对象的内置方法检查对象的状态。实例 ifjButtonA.isEnabled&&jTextField.getText.equalsfoobar
您还可以使用对相关组件及其操作进行分组。

Swing组件跟踪其自身的状态

我的忠告是:

将应用程序启动到默认状态。 以事件驱动的方式调整设置。例如,单击jbuttona时,启用JButtons B和C并设置JTextField。 使用对象的内置方法检查对象的状态。实例 ifjButtonA.isEnabled&&jTextField.getText.equalsfoobar
您还可以使用来对相关组件及其操作进行分组。

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

      printSelecteds (narrow_list);
      printSelected (list);
第二:要禁用通常使用的按钮,请执行以下操作:

ok.setEnabled (false);
如果文件已加载,则调用

ok.setEnabled (true);
要启用JButton,请单击ok

我看不出这与您的信息文本和printSelecteds方法有什么关系。如果您通过GUI传递状态,您可能会由于竞争条件而失去其中一个。更改标签可能是状态更改的接收器

您可以使用互斥位模式来允许干扰:

FILE_OPEN = 1;
SEARCHED = 2;
FRIDAY = 4; 
要按位添加它们,请执行以下操作:

state |= FRIDAY
要以二进制模式询问他们,请执行以下操作:

if (state | FILE_OPEN) ....
我觉得它不太优雅。我想我不确定你的问题是什么
若要在按下某个按钮时触发操作,您必须实现actionListener,它也可以修改您的标签。但是swing eventloop已经检查了组件的状态。您似乎复制了部分工作。

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

      printSelecteds (narrow_list);
      printSelected (list);
第二:要禁用通常使用的按钮,请执行以下操作:

ok.setEnabled (false);
如果文件已加载,则调用

ok.setEnabled (true);
要启用JButton,请单击ok

我看不出这与您的信息文本和printSelecteds方法有什么关系。如果您通过GUI传递状态,您可能会由于竞争条件而失去其中一个。更改标签可能是状态更改的接收器

您可以使用互斥位模式来允许干扰:

FILE_OPEN = 1;
SEARCHED = 2;
FRIDAY = 4; 
要按位添加它们,请执行以下操作:

state |= FRIDAY
要以二进制模式询问他们,请执行以下操作:

if (state | FILE_OPEN) ....
我觉得它不太优雅。我想我不确定你的问题是什么
若要在按下某个按钮时触发操作,您必须实现actionListener,它也可以修改您的标签。但是swing eventloop已经检查了组件的状态。你似乎部分重复了这项工作。

谢谢你的回答。禁用按钮,是指setEnabled方法吗?是的,一周前我学会了分离线的东西-@Emil,是的,setEnabled,看看这里的例子:我使用了setEnabled方法,效果很好。特别好的是,按钮在未启用时会有阴影,因为这增加了相当多的用户友好性。谢谢您的回答。禁用按钮,是指setEnabled方法吗?是的,一周前我学会了分离线的东西-@埃米尔,是的,看看这里
r示例:我使用了setEnabled方法,效果很好。特别好的是,按钮在未启用时会有阴影,因为这增加了相当多的用户友好性。谢谢,听起来不错。将应用程序启动到默认状态是什么意思?其余的我都理解。@eml我的意思是在应用程序开始时启动任何有意义的组件设置-可见性、启用等。例如,您提到在加载文件之前,您不应该单击“执行”按钮。因此,启动要禁用的执行按钮。executeButton.setEnabledfalse;然后在加载文件时,启用按钮executeButton.setEnabledtrue;。希望能把事情弄清楚。谢谢,听起来不错。将应用程序启动到默认状态是什么意思?其余的我都理解。@eml我的意思是在应用程序开始时启动任何有意义的组件设置-可见性、启用等。例如,您提到在加载文件之前,您不应该单击“执行”按钮。因此,启动要禁用的执行按钮。executeButton.setEnabledfalse;然后在加载文件时,启用按钮executeButton.setEnabledtrue;。希望能把事情弄清楚。