gpt4 book ai didi

java - setText() 在 mouseClicked() 函数中不起作用

转载 作者:行者123 更新时间:2023-12-01 22:04:53 27 4
gpt4 key购买 nike

 public class Pragrassbar extends JFrame implements MouseListener {

JProgressBar jb;
int i = 0, num = 0;
JButton jbt;
JLabel jl;

Pragrassbar() {
setSize(400, 400);

setLayout(new FlowLayout());
jbt = new JButton("Start");
jl = new JLabel("Click Start!");

jb = new JProgressBar(0, 2000);
jb.setValue(0);
jb.setStringPainted(true);
jbt.addMouseListener(this);
add(jbt);
add(jb);
add(jl);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public void mouseClicked(MouseEvent me) {

jl.setText("downloading.....");

jbt.setEnabled(false);

try {

while (i <= 2000) {

jb.setValue(i);
jb.paintImmediately(0, 0, 200, 25);
i = i + 40;

Thread.sleep(30);

}
jl.setText("download complete");
jbt.setEnabled(true);
} catch (Exception ex) {
ex.printStackTrace();
}

}

public static void main(String[] args) throws Exception {
Pragrassbar m = new Pragrassbar();
m.setVisible(true);

}

setText() 在 MouseListener 接口(interface)的 mouseClicked 函数下不起作用虽然它在我使用的 while 循环之后起作用

最佳答案

Thread.sleep() 导致事件调度线程 (EDT) hibernate ,这意味着 GUI 无法重新绘制自身,直到循环代码执行完毕。

不要使用Thread.sleep。相反,长时间运行的代码应该在单独的线程中执行,这样就不会阻塞 EDT。您可能应该为此使用 SwingWorker

阅读 Swing 教程中关于 Concurrency 的部分有关此方法的更多信息和工作示例。

您还可以阅读有关 How to Use Progress Bars 的部分了解执行此操作的正确方法。

关于java - setText() 在 mouseClicked() 函数中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32976172/

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