Bom dia,
O código a seguir mostra uma maneira de fazer o que você deseja:
// Código obtido em: http://www.java2s.com/Tutorial/Java/0240__Swing/ColorChooserEditor.htm
// Data 04/03/2013
import java.awt.BorderLayout;
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.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableColumn;
import javax.swing.table.TableModel;
class ColorTableModel extends AbstractTableModel {
Object rowData[][] = { { "1", Color.RED }, { "2", Color.BLUE }, { "3", Color.GREEN } };
String columnNames[] = { "English", "Color" };
public int getColumnCount() {
return columnNames.length;
}
public String getColumnName(int column) {
return columnNames[column];
}
public int getRowCount() {
return rowData.length;
}
public Object getValueAt(int row, int column) {
return rowData[row][column];
}
public Class getColumnClass(int column) {
return (getValueAt(0, column).getClass());
}
public void setValueAt(Object value, int row, int column) {
rowData[row][column] = value;
}
public boolean isCellEditable(int row, int column) {
return (column != 0);
}
}
class ColorChooserEditor extends AbstractCellEditor implements TableCellEditor {
private JButton delegate = new JButton();
Color savedColor;
public ColorChooserEditor() {
ActionListener actionListener = new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
Color color = JColorChooser.showDialog(delegate, "Color Chooser", savedColor);
ColorChooserEditor.this.changeColor(color);
}
};
delegate.addActionListener(actionListener);
}
public Object getCellEditorValue() {
return savedColor;
}
private void changeColor(Color color) {
if (color != null) {
savedColor = color;
delegate.setBackground(color);
}
}
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected,
int row, int column) {
changeColor((Color) value);
return delegate;
}
}
public class ChooserTableSample {
public static void main(String args[]) {
JFrame frame = new JFrame("Editable Color Table");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
TableModel model = new ColorTableModel();
JTable table = new JTable(model);
TableColumn column = table.getColumnModel().getColumn(3);
TableCellEditor editor = new ColorChooserEditor();
column.setCellEditor(editor);
JScrollPane scrollPane = new JScrollPane(table);
frame.add(scrollPane, BorderLayout.CENTER);
frame.setSize(400, 150);
frame.setVisible(true);
}
}
O uso do botão não ficou bom com o LookAndFeel que estou utilizando então alterei a classe ColorChooserEditor para usar um JPanel.
private class ColorChooserEditor extends AbstractCellEditor implements TableCellEditor {
Color cor;
public ColorChooserEditor() {}
public Object getCellEditorValue() {
return cor;
}
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected,
int row, int column) {
cor = JColorChooser.showDialog(null, "Color Chooser", cor);
JPanel p = new JPanel();
p.setBackground(cor);
return p;
}
}
Sei que para o seu caso já está resolvido mas estou deixando o código para quem “cair” aqui via Google.
Abraço.