无法更新keyPressed()

时间:2015-08-17 11:43:44

标签: java user-interface swt

我刚开始学习Java。我已经看过Swing了,此刻我正试图用SWT做点什么。

但我有下一个问题。我为Text字段添加的Key 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();
    }

}

1 个答案:

答案 0 :(得分:2)

layout()

的父级添加Label来电
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