我有一个包含进度条的静态布尔变量inProgress 。MainPanel
通信器类将此变量的值更改为真假。
属性监听器如下
@Override
public void propertyChange(PropertyChangeEvent evt) {
System.out.println("Property change check none");
if(true ==MainPanel.inProgress){
progressInformationPanel.getProgressBar().setIndeterminate(true);
progressInformationPanel.getCurrentProcesLabel().setText("Processing...");
}
else if(false ==MainPanel.inProgress){
System.out.println("Property change check none" + false);
progressInformationPanel.getProgressBar().setIndeterminate(false);
progressInformationPanel.getCurrentProcesLabel().setText("Finished....");
}
}
});
通信器类是观察者。那是在听别的课。现在,一旦有进度通信器类更新 MainPanel 的变量,但propertyChangeListener
不采取行动。我不知道为什么会这样。另请在此处查看我的链接问题
这里是SSCCE
import java.awt.GridBagLayout;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.JFrame;
import javax.swing.JProgressBar;
public class MainFrame extends JFrame{
public static boolean inProgress = true;
private JProgressBar bar;
public Communicator diplayFacade;
public MainFrame() {
this.setSize(500, 500);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
diplayFacade = new Communicator();
bar = new JProgressBar();
setLayout(new GridBagLayout());
add(bar);
addProgressListener();
}
public void addProgressListener(){
bar.addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
if(true == MainFrame.inProgress){
System.out.println("Property change check none" + true);
bar.setIndeterminate(true);
}
else if(false ==MainFrame.inProgress){
System.out.println("Property change check none" + false);
bar.setIndeterminate(false);
}
}
});
}
public static void main(String[] args) {
MainFrame frame = new MainFrame();
frame.diplayFacade.methodCalled();
}
}
还有 Communicator 类
import javax.swing.JOptionPane;
public class Communicator {
public void methodCalled(){
JOptionPane.showInputDialog("Hi");
MainFrame.inProgress = true;
}
}