无法更新 keyPressed() 内的标签

Can't update label inside keyPressed()

刚开始学Java。我已经看过 Swing,目前我正在尝试使用 SWT 做一些事情。

但我有下一个问题。我为 Text 字段添加的 Key Listener 正在工作,但在这个 listener 中我无法更改例如我的标签。

我看过他们的一些演示,但我看不出有什么不同。

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyAdapter;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;

public class FirstClass {
    public static void main(String[] args) {
        Display display = new Display();

        Shell shell = new Shell(display);
        shell.setText("First Application");

        GridLayout layout = new GridLayout(2, false);
        shell.setLayout(layout);

        Text word = new Text(shell,SWT.SINGLE | SWT.BORDER | SWT.FILL);
        GridData wordGrDt = new GridData();
        wordGrDt.heightHint = 130;
        wordGrDt.minimumHeight = 130;
        wordGrDt.horizontalAlignment = SWT.FILL;
        wordGrDt.verticalAlignment = SWT.FILL;
        wordGrDt.horizontalSpan = 2;
        word.setLayoutData(wordGrDt);

        GridData statusGrDt = new GridData();
        statusGrDt.grabExcessHorizontalSpace = true;
        statusGrDt.horizontalSpan = 1;
        statusGrDt.horizontalAlignment = SWT.LEFT_TO_RIGHT;
        Label status = new Label(shell, SWT.PUSH);
        status.setEnabled(true);
        status.setText("");
        status.setLayoutData(statusGrDt);

        GridData checkGrDt = new GridData();
        checkGrDt.widthHint = 150;
        checkGrDt.horizontalSpan = 1;
        checkGrDt.horizontalAlignment = SWT.RIGHT_TO_LEFT;
        Button check = new Button(shell, SWT.PUSH);
        check.setText("Check");
        check.setLayoutData(checkGrDt);

        word.addKeyListener(new org.eclipse.swt.events.KeyAdapter() {
            public void keyPressed(org.eclipse.swt.events.KeyEvent e) {
                if (e.keyCode == SWT.CR) {
                    System.out.println("worked!!!");
                    status.setText("ababahalamaha");
                }
            }
        });

        shell.setMinimumSize(400, 300);
        shell.open();
        shell.pack();

        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }
        display.dispose();
    }

}

Label 的父级添加 layout() 调用:

word.addKeyListener(new org.eclipse.swt.events.KeyAdapter() {
    public void keyPressed(org.eclipse.swt.events.KeyEvent e) {
        if (e.keyCode == SWT.CR) {
            System.out.println("worked!!!");
            status.setText("ababahalamaha");
            status.getParent().layout();
        }
    }
});

标签最初的宽度为 0,因为它不包含任何文本。添加内容时,父级必须知道重新布局其子级。


注意事项:

请检查您对哪个小部件使用了哪种样式。例如,Label 不知道如何处理样式 SWT.PUSH