【问题标题】:Access a widget from an event handler in Java SWT从 Java SWT 中的事件处理程序访问小部件
【发布时间】:2015-10-20 16:26:04
【问题描述】:

我正在尝试使用 Java SWT 设计一个带有 UI 的小型 Java 应用程序:在 Eclipse 中,我创建了一个新的应用程序窗口并添加了一个按钮和一个标签。我想要做到的是,当我单击按钮时,标签的文本从“未单击”变为“已单击”。为此,我为按钮的SelectionEvent 添加了一个事件处理程序。

但是,我发现我无法从事件处理程序内部访问标签,因此我可以更改它的文本。

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#)。

【问题讨论】:

    标签: java swt


    【解决方案1】:

    你必须在引用它之前声明lblStatus。没有像 JavaScript 那样的提升。现在,您正在事件处理程序之后声明标签。

    【讨论】:

      【解决方案2】:

      要访问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.");
      
      }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-06
        • 2013-05-30
        • 1970-01-01
        • 2010-09-13
        • 1970-01-01
        相关资源
        最近更新 更多