/** * Copyright (c) 2009 - 2011 AppWork UG(haftungsbeschränkt) <e-mail@appwork.org> * * This file is part of org.appwork.utils.swing.table.columns * * This software is licensed under the Artistic License 2.0, * see the LICENSE file or http://www.opensource.org/licenses/artistic-license-2.0.php * for details */ package org.appwork.utils.swing.table.columns; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JComponent; import javax.swing.JRadioButton; import org.appwork.utils.swing.renderer.RendererCheckBox; import org.appwork.utils.swing.table.ExtColumn; import org.appwork.utils.swing.table.ExtDefaultRowSorter; import org.appwork.utils.swing.table.ExtTable; import org.appwork.utils.swing.table.ExtTableModel; /** * @author daniel * */ public abstract class ExtRadioColumn<E> extends ExtColumn<E> implements ActionListener { private static final long serialVersionUID = -5391898292508477789L; private final JRadioButton checkBoxRend; private final JRadioButton checkBoxEdit; public ExtRadioColumn(String name, ExtTableModel<E> table) { super(name, table); checkBoxRend = new JRadioButton(); checkBoxRend.setHorizontalAlignment(RendererCheckBox.CENTER); checkBoxEdit = new JRadioButton(); checkBoxEdit.setHorizontalAlignment(RendererCheckBox.CENTER); this.setRowSorter(new ExtDefaultRowSorter<E>() { @Override public int compare(E o1, E o2) { boolean b1 = getBooleanValue(o1); boolean b2 = getBooleanValue(o2); if (b1 == b2) return 0; if (this.isSortOrderToggle()) { return b1 && !b2 ? -1 : 1; } else { return !b1 && b2 ? -1 : 1; } } }); } protected abstract boolean getBooleanValue(E value); protected abstract void setBooleanValue(boolean value, E object); @Override protected int getMaxWidth() { return 70; } @Override public int getMinWidth() { return 30; } @Override public final Object getCellEditorValue() { return checkBoxEdit.isSelected(); } @Override public JComponent getEditorComponent(ExtTable<E> table, E value, boolean isSelected, int row, int column) { checkBoxEdit.removeActionListener(this); checkBoxEdit.setSelected(getBooleanValue(value)); checkBoxEdit.addActionListener(this); return checkBoxEdit; } @Override public final JComponent getRendererComponent(ExtTable<E> table, E value, boolean isSelected, boolean hasFocus, int row, int column) { checkBoxRend.setSelected(getBooleanValue(value)); return checkBoxRend; } @Override public boolean isEditable(E obj) { return false; } public boolean isEnabled(E obj) { return true; } @Override public boolean isSortable(E obj) { return true; } @Override public final void setValue(Object value, E object) { setBooleanValue((Boolean) value, object); } public void actionPerformed(ActionEvent e) { checkBoxEdit.removeActionListener(this); this.fireEditingStopped(); } }