gpt4 book ai didi

java - 使用 setText() 方法时,GUI 中的 JTextField 不会更新

转载 作者:行者123 更新时间:2023-12-01 18:17:09 24 4
gpt4 key购买 nike

我有一个带有 JTextField 的 GUI,它应该代表进度条。最初我将其设置为“0%”,它位于水平位置,有足够的文本空间。然而,当程序运行时,即使在我使用progress.setText()之后,JTextField也拒绝更改。奇怪的是,当我使用progress.getText()时,它准确地打印了它应该打印的内容。我尝试过查看不同的区域,但大多数只是说使用我尝试过的 .revalidate() 或 .repaint ,但两者都不起作用。相关代码在这里:

if(box3.isSelected()){
progress.setText("0%");
int i = 0;
FragChecker fc = new FragChecker();
String[] temp = new String[0];
LexicalizedParser lp = fc.LPReciever(temp);
while(i < tn.sentenceSizeGetter()){
tn.fragChecker((double)i, temp, lp);
setProgress(tn.fragPercentDone((double)i));
i++;
}
}

tn 指的是我的 Tokenizer 类,tn.sentencesSizeGetter 返回数组列表的大小。 tn.fragPercentDone 返回已处理的句子除以总句子数乘以 100。相关代码的下一位是 setProgress:

public void setProgress(String x){
System.out.println(x);
progress.setText(x + "%");
System.out.println(progress.getText());
}

最佳答案

您的问题听起来像是一个经典的 Swing 线程问题——您可能在 Swing 事件线程上运行长时间运行的代码,这会阻止 GUI 更新其任何图形。解决方案:在后台线程中执行长时间运行的代码,但确保在事件线程上更新 Swing 组件状态。 SwingWorker 可以很好地完成此任务。

有点像......

     progress.setText("0%");
final FragChecker fc = new FragChecker();
final String[] temp = new String[0];
final LexicalizedParser lp = fc.LPReciever(temp);

new SwingWorker<Void, String>() {
int i = 0;

@Override
protected Void doInBackground() throws Exception {
while (i < tn.sentenceSizeGetter()) {
tn.fragChecker((double) i, temp, lp);
publish(tn.fragPercentDone((double) i));
i++;
}
return null;
}

protected void process(java.util.List<String> chunks) {
for (String chunk : chunks) {
setMyProgress(chunk);
}
};
}.execute();
}

关于java - 使用 setText() 方法时,GUI 中的 JTextField 不会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28910936/

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