Java JTextField setText()方法未更新字段
我正试图通过Java JTextField setText()方法未更新字段,java,swing,Java,Swing,我正试图通过setText()方法更新JTextField文本。然而,当我尝试这样做时,似乎什么也没有发生。我仔细检查了调试器,确定情况确实如此payField是我正在使用的JTextField实例 代码如下: public void payBill(double payment) { if((this.bill - payment) > 0) payField.setText("Bill not completely paid! You still owe "
setText()
方法更新JTextField
文本。然而,当我尝试这样做时,似乎什么也没有发生。我仔细检查了调试器,确定情况确实如此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);
}
}
从视觉上看,调用此方法后不会发生任何事情:
知道这是怎么回事吗?整个GUI在一个SwingUtilities.invokeLater
线程中运行,只是为了澄清一下。这个
try {
Thread.sleep(1500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
payFrame.setVisible(false);
System.exit(0);
他非常可疑
Swing是一个单线程API。也就是说,任何长时间运行或阻塞操作都会阻止UI被更新
在您的情况下,我可能会建议使用Swing计时器
,它将在指定的延迟后触发回调,而不会阻塞UI
首先,请查看并获取更多详细信息此
try {
Thread.sleep(1500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
payFrame.setVisible(false);
System.exit(0);
他非常可疑
Swing是一个单线程API。也就是说,任何长时间运行或阻塞操作都会阻止UI被更新
在您的情况下,我可能会建议使用Swing计时器
,它将在指定的延迟后触发回调,而不会阻塞UI
首先看一看,了解更多细节我刚刚删除了Thread.sleeps,但JTextField仍然没有更新。还有什么其他想法吗?这可能表明您正在交互的字段和屏幕上的字段不一样,但因为存在
系统。退出(0)代码>语句,我不知道是什么payFrame.setVisible(false)代码>正在运行,只是猜测工作正常,我刚刚删除了Thread.sleeps,但是JTextField仍然没有更新。还有什么其他想法吗?这可能表明您正在交互的字段和屏幕上的字段不一样,但因为存在系统。退出(0)代码>语句,我不知道是什么payFrame.setVisible(false)代码>正在执行,这只是猜测工作,也许在JTextField#setText()方法之后尝试验证JTextField:payField.validate()代码>。您确定1.5秒的时间足以让用户吸收显示的信息吗?更好的方法是使用带有确认对话框的JOptionPane,这样用户就有时间确认显示的内容,并可以选择一个按钮将其取消。如果您不喜欢默认的JTextField#setText()方法:payField.validate(),则可以将自定义的JPanel添加到JOptionPane确认对话框中代码>。您确定1.5秒的时间足以让用户吸收显示的信息吗?更好的方法是使用带有确认对话框的JOptionPane,这样用户就有时间确认显示的内容,并可以选择一个按钮将其取消。如果不喜欢默认的JPanel,可以将自定义JPanel添加到JOptionPane确认对话框中。