单击按钮更新 jLabel

Update jLabel on button click

 private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {  
    jLabel6.setText("Please wait");
    Cursor hourglassCursor = new Cursor(Cursor.WAIT_CURSOR);
    setCursor(hourglassCursor);
    //Program code
    Cursor normalCursor = new Cursor(Cursor.DEFAULT_CURSOR);
    setCursor(normalCursor);
    jLabel6.setText("");
 }

我在 actionPerformed 方法下有这个。我对 jLabel 进行了一些更新。单击按钮时,第一个 jLabel 文本更新 ("Please wait") 未显示在屏幕上。所有过程完成后 jLabel 设置为空字符串。

Thread updateThread = new Thread() {
public void run() {
    Cursor hourglassCursor = new Cursor(Cursor.WAIT_CURSOR);
    setCursor(hourglassCursor);
    //Program code
    Cursor normalCursor = new Cursor(Cursor.DEFAULT_CURSOR);
    setCursor(normalCursor);
    }
};
updateThread.start();

我已将其包含在单独的线程下,然后是使用 SwingUtilities 的 invokeLater() 的以下代码

public void updateProgress(String updateString) {
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            jLabel6.setText(updateString);
        }
    });
}

我根据我的要求调用了 updateProgress() 方法。

希望这对遇到同样问题的人有所帮助。

我应该提一下,使用单独的线程可能会更容易,但如果您对使用异步调用感兴趣,则以下内容应该有效

private void jButton4ActionPerformed(ActionEvent event) {
    jLabel6.setText("Please wait");
    setCursor(new Cursor(Cursor.WAIT_CURSOR));
    doStuff();
}

其中doStuff()使用jcabi-aspects异步注解定义如下

@Async
private void doStuff() {
    //do whatever logic you need to here
    jLabel6.setText("");
    setCursor(new Cursor(Cursor.DEFAULT_CURSOR);
}

这样做是使 doStuff() 方法异步,我们将更改标签和光标的逻辑放回方法本身的原因是该方法将 运行 在新线程中独立于主线程。

希望对您有所帮助!