2015-10-20 66 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."); 

} 
} 
相关问题