package com.revolsys.swing.field;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JCheckBox;
import com.revolsys.swing.menu.MenuFactory;
import com.revolsys.util.Booleans;
public class CheckBox extends JCheckBox implements Field, ActionListener {
private static final long serialVersionUID = 1L;
private final FieldSupport fieldSupport;
public CheckBox(final String fieldName) {
this(fieldName, "");
}
public CheckBox(final String fieldName, final Object fieldValue) {
this.fieldSupport = new FieldSupport(this, this, fieldName, fieldValue, true);
setFieldValue(Booleans.getBoolean(fieldValue));
addActionListener(this);
MenuFactory.getPopupMenuFactory(this);
setOpaque(false);
}
@Override
public void actionPerformed(final ActionEvent e) {
setFieldValue(isSelected());
}
@Override
public Field clone() {
return new CheckBox(getFieldName(), getFieldValue());
}
@Override
public void firePropertyChange(final String propertyName, final Object oldValue,
final Object newValue) {
super.firePropertyChange(propertyName, oldValue, newValue);
}
@Override
public FieldSupport getFieldSupport() {
return this.fieldSupport;
}
@SuppressWarnings("unchecked")
@Override
public <T> T getFieldValue() {
return (T)(Boolean)isSelected();
}
@Override
public void setEditable(final boolean editable) {
setEnabled(editable);
}
@Override
public void setFieldToolTip(final String toolTip) {
super.setToolTipText(toolTip);
}
@Override
public boolean setFieldValue(final Object value) {
final boolean newValue = Booleans.getBoolean(value);
final boolean selected = isSelected();
getUndoManager().discardAllEdits();
if (newValue != selected) {
setSelected(newValue);
getUndoManager().discardAllEdits();
}
return Field.super.setFieldValue(newValue);
}
@Override
public void setToolTipText(final String text) {
final FieldSupport fieldSupport = getFieldSupport();
if (fieldSupport == null || fieldSupport.setOriginalTooltipText(text)) {
super.setToolTipText(text);
}
}
@Override
public String toString() {
return getFieldName() + "=" + getFieldValue();
}
@Override
public void updateFieldValue() {
setFieldValue(isSelected());
}
}