JTextField setText()方法不更新Field

时间:2018-12-03 21:18:33

标签: java swing

我正在尝试通过JTextField方法更新setText()文本。但是,当我尝试执行此操作时,似乎没有任何反应。我遍历了调试器,并确定确实如此。 payField是我正在使用的JTextField实例。

代码如下:

public void payBill(double payment) {

    if((this.bill - payment) > 0)
        payField.setText("Bill not completely paid! You still owe " + "$" + (this.bill - payment));
    else {
        payField.setText("Thank you for choosing Team Turbo!");//Not updating!
        try {
            Thread.sleep(1500);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        payFrame.setVisible(false);
        System.exit(0);
    }


}

从视觉上看,调用此方法后什么也没发生:

enter image description here

有什么想法吗?整个GUI都在SwingUtilities.invokeLater线程中运行,仅供说明。

1 个答案:

答案 0 :(得分:2)

这个...

try {
    Thread.sleep(1500);
} catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
payFrame.setVisible(false);
System.exit(0);

高度怀疑。

Swing是单线程API。也就是说,任何长时间运行或阻止的操作都将阻止UI的更新。

在您的情况下,我可能会建议使用Swing Timer,它会在指定的延迟后触发回调,而不会阻塞UI。

首先查看Concurrency in SwingHow to Use Swing Timers以获得更多详细信息