package demo;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
public class ColorTableDemo extends JFrame {
private JTable table;
private DefaultTableModel model;
private Color[] bgColor = new Color[] {Color.WHITE, Color.YELLOW, Color.GREEN, Color.BLUE, Color.RED};
public ColorTableDemo() {
model = new DefaultTableModel(new String[] {"Standard", "ColorObjekt"}, 0);
for (int i=0; i<10; i++)
model.addRow(new Object[] {"Zeile " + i, new ColorObject("Zeile " + i)});
table = new JTable(model);
table.getColumnModel().getColumn(1).setCellRenderer(new ColorRenderer(bgColor));
this.getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
JButton button;
final JComboBox rowCombo, columnCombo, colorCombo;
JPanel panel = new JPanel(new GridLayout(2, 4));
panel.add(new JLabel("Row:"));
panel.add(new JLabel("Column:"));
panel.add(new JLabel("Color:"));
panel.add(new JPanel());
panel.add(rowCombo = new JComboBox(new Object[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}));
panel.add(columnCombo = new JComboBox(new Object[] {"Standard", "ColorObject"}));
panel.add(colorCombo = new JComboBox(bgColor));
panel.add(button = new JButton("Paint"));
this.getContentPane().add(panel, BorderLayout.NORTH);
columnCombo.setSelectedIndex(1);
colorCombo.setSelectedIndex(4);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
Object value = model.getValueAt(rowCombo.getSelectedIndex(), columnCombo.getSelectedIndex());
if (value instanceof ColorObject) {
ColorObject co = (ColorObject)value;
co.setBackground(colorCombo.getSelectedIndex());
table.repaint();
}
else
JOptionPane.showMessageDialog(ColorTableDemo.this, "Cell cannot change color!\nSelect another one!");
}
});
table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
if (!e.getValueIsAdjusting()) {
rowCombo.setSelectedIndex(table.getSelectedRow());
columnCombo.setSelectedIndex(table.getSelectedColumn());
}
}
});
}
class ColorRenderer extends DefaultTableCellRenderer {
private Color[] colors;
public ColorRenderer(Color[] colors) {
this.colors = colors;
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
ColorObject co = (ColorObject)value;
if(!isSelected && !hasFocus)
this.setBackground(colors[co.getBackground()]);
this.setText(co.getText());
return this;
}
}
class ColorObject {
private String text;
private int color;
public ColorObject(String text) {
this.text = text;
color = 0;
}
public String getText() {
return text;
}
public void setBackground(int colorIndex) {
this.color = colorIndex;
}
public int getBackground() {
return color;
}
}
public static void main(String[] args) {
JFrame frame = new ColorTableDemo();
frame.setBounds(0, 0, 800, 300);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}