package com.revolsys.swing.parallel; import java.awt.BorderLayout; import java.awt.Dimension; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.List; import javax.swing.JPanel; import org.jdesktop.swingx.JXBusyLabel; import com.revolsys.swing.SwingUtil; import com.revolsys.swing.component.BusyLabelPainter; import com.revolsys.util.Property; public class SwingWorkerProgressBar extends JPanel implements PropertyChangeListener { private static final long serialVersionUID = -5112492385171847107L; private final JXBusyLabel busyLabel = new JXBusyLabel(new Dimension(16, 16)); public SwingWorkerProgressBar() { super(new BorderLayout(2, 2)); this.busyLabel.setBusyPainter(new BusyLabelPainter()); this.busyLabel.setDelay(400); this.busyLabel.setFocusable(false); Invoke.getPropertyChangeSupport().addPropertyChangeListener("workers", this); add(this.busyLabel, BorderLayout.WEST); } @Override public void propertyChange(final PropertyChangeEvent event) { final List<?> workers = (List<?>)event.getNewValue(); boolean visible; if (Property.isEmpty(workers)) { visible = false; } else { visible = true; } this.busyLabel.setBusy(visible); SwingUtil.setVisible(this, visible); } @Override public void removeNotify() { super.removeNotify(); Invoke.getPropertyChangeSupport().removePropertyChangeListener("workers", this); } }