package me.drton.flightplot; import javax.swing.*; import javax.swing.table.TableCellEditor; import java.awt.*; /** * Created by ton on 13.03.15. */ class ColorParamTableCellEditor extends AbstractCellEditor implements TableCellEditor { private ColorSupplier colorSupplier; private Color color; private JComboBox select; public ColorParamTableCellEditor(ColorSupplier colorSupplier) { this.colorSupplier = colorSupplier; select = new JComboBox(); select.setRenderer(new ColorCellRenderer()); for (Paint paint : colorSupplier.getPaintSequence()) { select.addItem(paint); } } public JComboBox getComponent() { return select; } @Override public Object getCellEditorValue() { return colorSupplier.getPaint(select.getSelectedIndex()); } @Override public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { color = (Color) value; select.setSelectedItem(color); return select; } private class ColorCellRenderer extends JLabel implements ListCellRenderer { boolean setBg = false; public ColorCellRenderer() { setOpaque(true); setPreferredSize(new Dimension(0, 15)); } @Override public void setBackground(Color bg) { if (!setBg) { return; } super.setBackground(bg); } public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { setBg = true; setText(""); setBackground((Color) value); setBorder(BorderFactory.createEmptyBorder()); setBg = false; if (isSelected) { setBorder(BorderFactory.createLineBorder(Color.white, 2)); } return this; } } }