package husacct.validate.presentation.tableModels; import husacct.ServiceProvider; import java.awt.Color; import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.AbstractCellEditor; import javax.swing.JButton; import javax.swing.JColorChooser; import javax.swing.JDialog; import javax.swing.JTable; import javax.swing.table.TableCellEditor; public class ColorChooserEditor extends AbstractCellEditor implements TableCellEditor, ActionListener { private static final long serialVersionUID = 2378648633168150198L; private Color currentColor; private JButton button; private JColorChooser colorChooser; private JDialog dialog; protected static final String EDIT = ServiceProvider.getInstance().getLocaleService().getTranslatedString("edit"); public ColorChooserEditor() { // Set up the editor (from the table's point of view), // which is a button. // This button brings up the color chooser dialog, // which is the editor from the user's point of view. button = new JButton(); button.setActionCommand(EDIT); button.addActionListener(this); button.setBorderPainted(false); // Set up the dialog that the button brings up. colorChooser = new JColorChooser(); dialog = JColorChooser.createDialog(button, ServiceProvider.getInstance().getLocaleService().getTranslatedString("PickAColor"), true, // modal colorChooser, this, // OK button handler null); // no CANCEL button handler } /** * Handles events from the editor button and from the dialog's OK button. */ @Override public void actionPerformed(ActionEvent e) { if (EDIT.equals(e.getActionCommand())) { // The user has clicked the cell, so // bring up the dialog. button.setBackground(currentColor); colorChooser.setColor(currentColor); dialog.setVisible(true); // Make the renderer reappear. fireEditingStopped(); } else { // User pressed dialog's "OK" button. currentColor = colorChooser.getColor(); } } // Implement the one CellEditor method that AbstractCellEditor doesn't. @Override public Object getCellEditorValue() { return currentColor; } // Implement the one method defined by TableCellEditor. @Override public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { currentColor = (Color) value; return button; } }