我在a.java类中有一个进度条(在表单中)。我需要从b.java类中获取它。 我的进度条名称是jprog。(我把它放在palet的表单中) 如何设置公开我的进度条?我无法在属性页面中找到它。 我在一流的进步空间。但是我想在第二堂课改变它的价值。 感谢。
答案 0 :(得分:1)
您可以添加到将更新进度条的类方法。然后您不必直接触摸进度条。
答案 1 :(得分:1)
考虑在第一堂课中添加PropertyChangeListener
,在第二堂课中使用SwingWorker
。 SwingWorker有一个名为setProgress()
的方法,您可以调用该方法来设置进度条的值。然后,您可以覆盖第一堂课中的propertyChange()
方法并执行以下操作:
public void propertyChange(PropertyChangeEvent evt) {
if ("progress" == evt.getPropertyName()) {
int progress = (Integer) evt.getNewValue();
progressBar.setValue(progress);
}
}
使用几个类 ClassA 和 ClassB 的示例如下:
public ClassA extends JForm implements PropertyChangeListener{
private JProgressBar progressBar;
public ClassA(){
/**
* Your setup for the form
*/
}
/**
* Invoked when task's progress property changes.
*/
public void propertyChange(PropertyChangeEvent evt) {
if ("progress" == evt.getPropertyName()) {
int progress = (Integer) evt.getNewValue();
progressBar.setValue(progress);
}
}
public void someMethod(){
ClassB classB = new ClassB();
classB.addPropertyChangeListener(this);
classB.execute();
}
}
class ClassB extends SwingWorker<Void, Void> {
/*
* Main task. Executed in background thread.
*/
@Override
public Void doInBackground() {
Random random = new Random();
int progress = 0;
//Initialize progress property.
setProgress(0);
//Sleep for at least one second to simulate "startup".
try {
Thread.sleep(1000 + random.nextInt(2000));
} catch (InterruptedException ignore) {}
while (progress < 100) {
//Sleep for up to one second.
try {
Thread.sleep(random.nextInt(1000));
} catch (InterruptedException ignore) {}
//Make random progress.
progress += random.nextInt(10);
setProgress(Math.min(progress, 100));
}
return null;
}
}
答案 2 :(得分:0)
如果您想通过按ClassA上的按钮来更新进度条,我仍然建议使用Sujay的解决方案,但是您需要使用Runnable上下文调用您的方法。避免在可能阻止更新progressBar的事件调度线程的上下文中执行操作非常重要
public void someMethod(){
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
// Some stuff
classB.addPropertyChangeListener(this);
classB.execute();
}
});
}