2014-02-15 28 views
0

我正在开发一个简单的Java应用程序,其中包含用于用户界面的SWT。 一切工作正常,但我有变量声明顺序(这是我的第一个SWT应用程序)的一些问题。关于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 
     } 

如果您有任何意见,这将会非常赞赏。在此先感谢您的帮助。

回答

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意味着如果使用的字体发生了变化,事情会变得混乱。

+0

太棒了!现在它工作了!我认为我必须在按钮声明后立即定义方法,但我错了。我也会看看教程,谢谢你的帮助。 – Nick0602

+0

您可以随时添加(并删除)侦听器。 –