package org.pepsoft.util.swing;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
/**
* Created by Pepijn Schmitz on 19-01-17.
*/
public class RemoteJCheckBox extends JCheckBox implements ChangeListener {
public RemoteJCheckBox(JCheckBox peer, String text) {
if (peer == null) {
throw new NullPointerException("peer");
}
this.peer = peer;
setText(text);
setSelected(peer.isSelected());
peer.addChangeListener(this);
addChangeListener(this);
}
// ChangeListener
@Override
public void stateChanged(ChangeEvent e) {
if (programmaticChange) {
return;
}
if (e.getSource() == this) {
// We have changed; change the peer, without falling into an endless
// loop
programmaticChange = true;
try {
peer.setSelected(isSelected());
} finally {
programmaticChange = false;
}
} else if (e.getSource() == peer) {
// Our peer has changed; reflect the change, without falling into an
// endless loop
programmaticChange = true;
try {
setSelected(peer.isSelected());
} finally {
programmaticChange = false;
}
}
}
private final JCheckBox peer;
private boolean programmaticChange;
}