2015-10-20 92 views
1

我想用一個使用Java SWT的UI設計小型Java應用程序:在Eclipse中,我創建了一個新的應用程序窗口,並添加了一個按鈕和一個標籤。我想要的是當我點擊按鈕時,標籤的文本從「未點擊」變爲「點擊」。爲此,我爲該按鈕的SelectionEvent添加了一個事件處理程序。從Java中的事件處理程序訪問小部件SWT

但是,我發現我無法從事件處理程序中訪問標籤,因此我可以更改它的文本。

protected void createContents() { 
    shell = new Shell(); 
    shell.setSize(450, 300); 
    shell.setText("SWT Application"); 

    Button btnClickMe = new Button(shell, SWT.NONE); 
    btnClickMe.addSelectionListener(new SelectionAdapter() { 
     @Override 
     public void widgetSelected(SelectionEvent arg0) { 
      lblStatus.setText("Clicked"); // the compiler can't find lblStatus 
     } 
    }); 
    btnClickMe.setBounds(10, 10, 75, 25); 
    btnClickMe.setText("Click Me"); 

    Label lblStatus = new Label(shell, SWT.NONE); 
    lblStatus.setBounds(10, 47, 75, 15); 
    lblStatus.setText("Not clicked."); 

} 

我意識到這可能是一個愚蠢的問題,但我一直在尋找修復無濟於事。我對使用Java小部件很陌生(直到現在纔在VS中使用C#)。

回答

1

您必須在引用前聲明lblStatus。 JavaScript中不存在提升。現在,你正在事件處理程序之後聲明標籤。

1

要訪問lblStatus,應將其聲明爲類實例變量。

public class MyClass { 
    Label lblStatus; 

protected void createContents() { 
    shell = new Shell(); 
    shell.setSize(450, 300); 
    shell.setText("SWT Application"); 

    Button btnClickMe = new Button(shell, SWT.NONE); 
    btnClickMe.addSelectionListener(new SelectionAdapter() { 
     @Override 
     public void widgetSelected(SelectionEvent arg0) { 
      lblStatus.setText("Clicked"); // the compiler is aware of lblStatus 
     } 
    }); 
    btnClickMe.setBounds(10, 10, 75, 25); 
    btnClickMe.setText("Click Me"); 

    lblStatus = new Label(shell, SWT.NONE); 
    lblStatus.setBounds(10, 47, 75, 15); 
    lblStatus.setText("Not clicked."); 

} 
} 
相關問題