我在 a.java 类(以表单形式)中有一个进度条。我需要从 b.java 类到达它。 我的进度条名称是jprog。(我把它放在调色板的表单中) 如何设置公开我的进度条?我在属性页中找不到它。 我在头等舱的进度条。但我想改变它在二等舱的值(value)。 谢谢。
最佳答案
考虑向您的第一个类添加一个 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;
}
}
关于java - 我怎样才能从不同的类(class)到达进度条?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12313262/