java - 无法更新 keyPressed() 内的标签

标签 java user-interface swt

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

但是我有下一个问题。我为文本字段添加的关键监听器正在工作,但在这个监听器中我无法更改例如我的标签。

我看过一些他们工作的演示,但我没有看到任何差异。

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 样式。

关于java - 无法更新 keyPressed() 内的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32049520/

相关文章:

JavaFX 导致致命的 SIGSEGV 错误

java - 将 GMT 时区转换为用户特定时区

java - 如何为 Filebeat 配置 JBoss JsonFormatter (WildFly 14)

user-interface - 帮助文件(或用户手册)是否已失效?

android - Android Studio 2.3不显示布局设计

Java SWT 日期时间 : Determine day of Week

java - 如何在 swt 工具提示上隐藏程序名称

user-interface - 实验协议(protocol)设计和开发的工具?

java - 绕过登录屏幕

java - 当我在swt中拖动对话框时如何防止检查按钮移动?