2014-02-15 29 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

您可以隨時添加(並刪除)偵聽器。 –