如何在SWT Java中的标签中创建动态文本?

问题描述 投票:1回答:1

我正在尝试编写包含按钮和标签的代码。

我想,当用户单击按钮时,标签显示TEXTA,然后三秒钟后显示TEXTB。我看到的是单击按钮时,标签等待3秒钟并显示TEXTB。这是我的代码:

        Label lblFindModem = new Label(shell, SWT.NONE);
        lblFindModem.setFont(SWTResourceManager.getFont("Ubuntu", 13, SWT.NORMAL));
        lblFindModem.setBounds(329, 164, 256, 28);
        lblFindModem.setText("Modem is not Initialized");

        Button btnFindModem = new Button(shell, SWT.NONE);      
        btnFindModem.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent arg0) {
                System.out.println("Someone Clicked the button");
                lblFindModem.setText("Unplug the modem for 3 seconds...");
                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                lblFindModem.setText("Plug the modem again.");
            }
        });
java swt delay windowbuilder
1个回答
3
投票

您必须never通过调用Thread.sleep之类来阻止SWT UI主线程。这将使应用程序完全无响应,并且直到睡眠结束都不会发生任何事情。 UI代码快速返回到主Display.readAndDispatch循环至关重要。

相反,您可以在延迟后使用Display.timerExec执行一些代码:

因此替换您的代码

try {
   Thread.sleep(3000);
} catch (InterruptedException e) {
   // TODO Auto-generated catch block
  e.printStackTrace();
}
lblFindModem.setText("Plug the modem again.");

with:

Display.getCurrent().timerExec(3000, () -> lblFindModem.setText("Plug the modem again."));

((代码假定您使用的是Java 8或更高版本)

© www.soinside.com 2019 - 2024. All rights reserved.