gpt4 book ai didi

java - 添加标签后更新 swt 窗口

转载 作者:行者123 更新时间:2023-12-02 06:01:12 25 4
gpt4 key购买 nike

我正在尝试实现一个简单的 SWT 对话框,它有一个文本字段,如果文本字段中输入的文本有问题,我想在文本字段底部的标签中显示此错误。

因此,一开始您只能看到文本字段,它填充了整个窗口。如果我显示标签,我会创建它并希望将其显示在文本字段的底部。

我的问题是,您只能在调整窗口大小后才能看到此标签(无论我将其变小还是变大,都一样)。那么当我调整窗口大小时,shell 中会调用哪个方法?

我尝试过:

shell.layout();
shell.update();
shell.pack();
shell.redraw();
textField.update();
textField.redraw();

但是什么都没有改变。

所以唯一有效的可能性是采取:

Point oldSize = shell.getSize();
oldSize.x += 1;
shell.setSize(oldSize);
oldSize.x -= 1;
shell.setSize(oldSize);

但这不是一个可接受的解决方案,因为用户会注意到外壳尺寸的微小变化。我的问题与此类似:Java SWT added Label not visible (应用程序看起来也非常相似),但是在这个包含打包并设置旧大小的解决方案中,用户注意到大小的调整,这对我来说非常不满意。

那么您知道我可以调用哪种方法来更新窗口(例如调整大小时)吗?但这样窗口的大小保持不变?

谢谢!

编辑:如果我在开始时创建标签并将其设置为不可见,您会注意到有一些东西:示例:此图显示了窗口部分,没有创建标签并将其设置为不可见 Window part without creating label and setting it to invisible

此图显示了创建标签并将其设置为不可见的窗口部分: Window part with creating label and setting it to invisible

我更喜欢版本 1。

最佳答案

请尝试以下。我希望您正在寻找以下功能。您可以根据需要修改按键监听器。

public class demo {
static Label lbl;
static Shell shell;
public static void main(String[] chr){
Display display = new Display();


shell = new Shell(display, SWT.SHELL_TRIM);
final Text txt = new Text(shell,SWT.BORDER);


shell.setLayout(new FillLayout(SWT.VERTICAL));
shell.pack();
shell.layout(true);
shell.open();

txt.addKeyListener(new KeyListener() {

@Override
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void keyPressed(KeyEvent arg0) {
// TODO Auto-generated method stub


if (lbl!=null)lbl.dispose();
if(txt.getText().length()<5){
lbl= new Label(shell,SWT.NONE);
lbl.setText("text should be more than 5 character");

}
shell.redraw();
shell.pack();
shell.layout(true);

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

关于java - 添加标签后更新 swt 窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22666202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com