package automenta.vivisect.swing.property.sheet.editor; import java.awt.event.ActionEvent; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import javax.swing.AbstractAction; import javax.swing.JCheckBox; import javax.swing.JPanel; import javax.swing.UIManager; import automenta.vivisect.swing.property.beans.editor.AbstractPropertyEditor; import automenta.vivisect.swing.property.propertysheet.Property; import automenta.vivisect.swing.property.sheet.I18N; import automenta.vivisect.swing.property.sheet.ResizeLayout; /** * Boolean value table cell editor. */ public class BooleanEditor extends AbstractPropertyEditor { private JCheckBox checkbox = null; private JPanel panel = null; public BooleanEditor(Object property) { Property prop = (Property) property; checkbox = new JCheckBox(); boolean selected = Boolean.TRUE.equals(prop.getValue()); checkbox.setSelected(selected); checkbox.setText(selected ? I18N.TRUE : I18N.FALSE); checkbox.setOpaque(true); checkbox.setLocation(-3, 0); checkbox.setFocusable(false); checkbox.setBackground(UIManager.getColor("Table.selectionBackground")); checkbox.setForeground(UIManager.getColor("Table.selectionForeground")); checkbox.setAction(new AbstractAction() { private static final long serialVersionUID = 1L; @Override public void actionPerformed(ActionEvent e) { checkbox.setText(checkbox.isSelected() ? I18N.TRUE : I18N.FALSE); } }); panel = new JPanel(); panel.setLayout(new ResizeLayout()); panel.setBorder(null); panel.add(checkbox); panel.setFocusCycleRoot(true); panel.setBackground(UIManager.getColor("Table.selectionBackground")); panel.setForeground(UIManager.getColor("Table.selectionForeground")); panel.setOpaque(true); panel.addFocusListener(new FocusListener() { @Override public void focusLost(FocusEvent e) { Object older = checkbox.isSelected() ? Boolean.FALSE : Boolean.TRUE; Object newer = checkbox.isSelected() ? Boolean.TRUE : Boolean.FALSE; firePropertyChange(older, newer); } @Override public void focusGained(FocusEvent e) { checkbox.requestFocus(); } }); this.editor = panel; } @Override public Object getValue() { return checkbox.isSelected() ? Boolean.TRUE : Boolean.FALSE; } @Override public void setValue(Object value) { boolean selected = Boolean.TRUE.equals(value); checkbox.setSelected(selected); checkbox.setText(selected ? I18N.TRUE : I18N.FALSE); } }