“GUI while循环”

时间:2013-08-04 20:32:45

标签: java swing user-interface while-loop secondaryloop

好的,我的代码看起来像这样:

public class Test
{   

private JPanel dummy;

public checker()
{
    dummy = new JPanel();
    dummy.setVisible(false);

    dummy.addComponentListener(new ComponentAdapter()
    {
        @Override
        public void componentShown(ComponentEvent arg0)
        {
            dummy.setVisible(false);
            runCheck();
        }           
    });

    runCheck();
}


private void runCheck()
{
    if (a)
    {
        //do something
        dummy.setVisible(true);
    }
}

}

这将创建一个虚拟JPanel并添加一个组件适配器,每次将dummy设置为可见时都会触发该组件适配器。它的工作方式类似于while循环,只是确保GUI在进入另一个循环之前进行更新。

但是我需要方法checker()在循环中断后返回一个值。

注意: 这是代码的简化版本,我无法检查条件a,这不是解决方案。

2 个答案:

答案 0 :(得分:3)

使用SwingWorker在后台执行runCheck()循环。调用

dummy.setVisible(false);
worker.execute();

您可以在setVisible(true)中致电done(),如setEnabled()所示{{1}}。

答案 1 :(得分:1)

我明白了。我可以使用secondaryLoop。我无法解释它是如何工作的,但是它使我能够冻结程序(但是EDT),并且在代码被冻结时,将事件添加到EDT队列中,这些事件是immediatley完成的(如果EDT没有忙于做任何事情)否则,在我的情况下,不是)。

有关主题的更多信息:link