Moin Moin!
Ich würde gerne in einer JTable den fokussierten Eintrag auslesen und gleiche Einträge in dieser Tabelle farblich markieren. Dies habe ich mit einem TableCellRenderer versucht, was aber leider nur bedingt funktioniert.
Scheinbar werden nicht immer alle Zellen neue gezeichnet und komischerweise kann ich auch die erste Zeile nicht markieren.
Hat jemand wie ich es lösen kann?
Hier ein kleines funktionsfähiges Beispiel:
Ich würde gerne in einer JTable den fokussierten Eintrag auslesen und gleiche Einträge in dieser Tabelle farblich markieren. Dies habe ich mit einem TableCellRenderer versucht, was aber leider nur bedingt funktioniert.
Scheinbar werden nicht immer alle Zellen neue gezeichnet und komischerweise kann ich auch die erste Zeile nicht markieren.
Hat jemand wie ich es lösen kann?
Hier ein kleines funktionsfähiges Beispiel:
Java:
public class Main extends JFrame {
public Main() {
this.setLayout(new FlowLayout());
String[][] rowData = {
{"Tag 1", "1", "2", "3", "4", "5"},
{"Tag 2", "2", "1", "5", "4", "4"},
{"Tag 3", "1", "2", "3", "4", "3"},
{"Tag 4", "1", "2", "3", "3", "5"},
{"Tag 5", "1", "2", "2", "4", "5"},
{"Tag 6", "1", "1", "3", "4", "5"}
};
String[] columnNames = {
"Tag", "Aktion 1", "Aktion 2", "Aktion 3", "Aktion 4", "Aktion 5"
};
JTable table = new JTable(rowData, columnNames);
TableColumnModel columnModel = table.getColumnModel();
columnModel.getColumn(1).setCellRenderer(new TestCellRenderer());
columnModel.getColumn(2).setCellRenderer(new TestCellRenderer());
columnModel.getColumn(3).setCellRenderer(new TestCellRenderer());
columnModel.getColumn(4).setCellRenderer(new TestCellRenderer());
columnModel.getColumn(5).setCellRenderer(new TestCellRenderer());
add(new JScrollPane(table));
pack();
}
public static void main(String[] args) {
Main test = new Main();
test.setVisible(true);
}
public class TestCellRenderer extends JLabel implements TableCellRenderer {
private Color colorEqual = new Color(255, 0, 0);
private Color colorFocused = new Color(0, 255, 0);
private Color colorDefault = new Color(255, 255, 255);
public TestCellRenderer() {
this.setOpaque(true);
this.setHorizontalAlignment(JLabel.CENTER);
}
// ##################################
// Implementierung: TableCellRenderer
// ##################################
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
String str = String.valueOf(value);
this.setText(str);
int selectedColumn = table.getSelectedColumn();
int selectedRow = table.getSelectedRow();
System.out.println(row + "\t\t" + column + "\t\t" + selectedRow + "\t\t" + selectedColumn);
if (selectedRow > 0 && selectedColumn > 0) {
String compare = String.valueOf(table.getValueAt(selectedRow, selectedColumn));
if (hasFocus) {
this.setBackground(colorFocused);
} else if (str.equals(compare)) {
this.setBackground(colorEqual);
} else {
this.setBackground(colorDefault);
}
} else {
this.setBackground(colorDefault);
}
return this;
}
}
}