有关SWT变量声明顺序的问题

时间:2014-02-15 13:02:22

标签: java eclipse swt

我正在为用户界面开发一个带SWT的简单Java应用程序。 一切正常,但我对变量声明顺序有一些问题(这是我的第一个SWT应用程序)。

我有两个按钮,名为btnStop和btnStart,附带一个SelectionAdapter事件。

这是他们应该拥有的行为:

  • 当我点击按钮btnStart时,其事件必须设置禁用btnStard并启用btnStop;
  • 按钮btnStop也是如此:另一个事件必须禁用btnStop本身并启用btnStart。

事实是:如果我在btnStart之前声明btnStop,那么前者的事件不能设置后者禁用,反之亦然,因为Eclipse说两个变量中的一个(取决于声明顺序)尚未初始化。

以下是代码的一部分:

 final Button btnStop = new Button(shlFinalFantasyXiv, SWT.NONE);

    btnStop.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            Check.keepPinging = false;          
            comboServer.setEnabled(true);
            btnStart.setEnabled(true); // <- ERROR HERE
            btnStop.setEnabled(false);

        }
    });
    btnStop.setBounds(357, 106, 75, 25);
    btnStop.setText("Stop");

final Button btnStart = new Button(shlFinalFantasyXiv, SWT.NONE);

    btnStart.addSelectionListener(new SelectionAdapter() {

        // some stuff
        }

如果您有任何建议,我们将非常感激。在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

在声明两个按钮之前,不要设置选择侦听器:

final Button btnStop = new Button(shlFinalFantasyXiv, SWT.NONE);
// set text, layout

final Button btnStart = new Button(shlFinalFantasyXiv, SWT.NONE);
// set text, layout

btnStop.addSelectionListener(new SelectionAdapter() {
    // code
}

btnStart.addSelectionListener(new SelectionAdapter() {
    // some stuff
}

顺便说一下,了解如何使用Layouts来布置控件。使用setBounds表示如果使用的字体发生变化,事情就会搞砸。

答案 1 :(得分:0)

您的两个按钮都需要一个全局ActionListener。它按下了按钮被按下的IF,它将激活一个并禁用另一个。

请看一下这个概念在“多个来源”一章中说明的内容:http://zetcode.com/tutorials/javaswingtutorial/swingevents/

你使用SWT,但是在swing中概念是相同的。