Java 关于SWT变量声明顺序的问题

Java 关于SWT变量声明顺序的问题,java,eclipse,swt,Java,Eclipse,Swt,我正在开发一个简单的Java应用程序,使用SWT作为用户界面。 一切正常,但变量声明顺序有一些问题(这是我的第一个SWT应用程序) 我有两个按钮,称为btnStop和btnStart,它们附带一个SelectionAdapter事件 这是他们应该具备的行为: 当我点击按钮btnStart时,其事件必须设置btnStard disabled和btnStop enabled 按钮btnStop也是如此:另一个事件必须禁用btnStop本身并启用btnStart 事实是:如果我在btnStart之

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

我有两个按钮,称为btnStop和btnStart,它们附带一个SelectionAdapter事件

这是他们应该具备的行为:

  • 当我点击按钮btnStart时,其事件必须设置btnStard disabled和btnStop enabled
  • 按钮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
        }
final Button btnStop=新按钮(SHLFINALYXIV,SWT.NONE);
btnStop.addSelectionListener(新的SelectionAdapter(){
@凌驾
公共无效WidgeSelected(SelectionEvent e){
Check.keepping=false;
comboServer.setEnabled(true);

btnStart.setEnabled(true);//两个按钮都需要一个全局ActionListener。它通过一个按钮确定是否按下了其中一个按钮,并将激活一个按钮,禁用另一个按钮

看一看这本图刊,在“多源”一章中阐述了这一概念:


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

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

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
}

顺便说一句,了解如何使用来布局控件。使用
setBounds
意味着如果所使用的字体发生更改,事情会变得一团糟。

太好了!现在它可以工作了!我原以为我必须在按钮声明后立即定义方法,但我错了。我还将查看教程,感谢您的帮助。您可以添加(并随时删除)侦听器。感谢您的回复:)