setText() 在 mouseClicked() 函数中不起作用
setText() not working in mouseClicked() function
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 接口的 mouseClicked 函数下无法运行
虽然它在我使用的 while 循环之后工作
Thread.sleep() 会导致事件调度线程 (EDT) 休眠,这意味着 GUI 在循环代码执行完毕之前无法重新绘制自身。
不要使用 Thread.sleep。相反,长 运行 代码应该在单独的线程中执行,这样您就不会阻塞 EDT。您可能应该为此使用 SwingWorker
。
阅读有关 Concurrency 的 Swing 教程部分,了解有关此方法的更多信息和工作示例。
您还可以阅读有关 How to Use Progress Bars 的部分,了解执行此操作的正确方法。
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 接口的 mouseClicked 函数下无法运行 虽然它在我使用的 while 循环之后工作
Thread.sleep() 会导致事件调度线程 (EDT) 休眠,这意味着 GUI 在循环代码执行完毕之前无法重新绘制自身。
不要使用 Thread.sleep。相反,长 运行 代码应该在单独的线程中执行,这样您就不会阻塞 EDT。您可能应该为此使用 SwingWorker
。
阅读有关 Concurrency 的 Swing 教程部分,了解有关此方法的更多信息和工作示例。
您还可以阅读有关 How to Use Progress Bars 的部分,了解执行此操作的正确方法。