【问题标题】:Issue regarding SWT variables declaration order关于 SWT 变量声明顺序的问题
【发布时间】:2014-02-15 13:02:21
【问题描述】:

我正在为用户界面开发一个带有 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
        }

如果您有任何建议,我们将不胜感激。提前感谢您的帮助。

【问题讨论】:

    标签: java eclipse swt


    【解决方案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 意味着如果更改使用的字体,事情就会变得一团糟。

    【讨论】:

    • 太棒了!现在它起作用了!我以为我必须在按钮声明后立即定义方法,但我错了。我也去看看教程,谢谢你的帮助。
    • 您可以随时添加(和删除)监听器。
    【解决方案2】:

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

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

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

    【讨论】:

    • 感谢您的回复:)
    猜你喜欢
    • 1970-01-01
    • 2011-05-26
    • 2012-02-21
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    • 2016-05-12
    • 2011-11-13
    • 1970-01-01
    相关资源
    最近更新 更多