Hallo zusammen,
wer kann mir helfen?
Ich habe als Teil eines Projektes eine JTable-Tabelle mit sieben Spalten. Jeder Datensatz für diese Tabelle besteht also aus sieben Feldern. Das erste Feld ist vom Typ Boolean, das zweite ein Integer, die restlichen sind Strings.
Alle Daten der Tabelle sollen mit einem Font fester Zeichenbreite (Courier New) und die Integer-Daten, Werte zwischen 1 und 9999, vierstellig formatiert mit vorangestellten Nullen dargestellt werden.
Bis auf die Darstellung der Spalte 2 für die Integer-Daten funktioniert alles einwandfrei. Diese jedoch werden getTableCellRendererComponent() in meinem Renderer überhaupt nicht übergeben. Übergeben werden nur die Daten der Spalten drei bis sieben, also die Daten vom Typ String.
Versuchshalber habe ich daher in der Klasse TabelleDaten für alle Daten den Typ Object verwendet. Obwohl eigentlich weder Boolean noch Integer Objecte sind, funktionierte das grundsätzlich. Die Daten mussten beim Auslesen allerdings gecastet werden. Aber auch dies brachte nicht den gewünschten Erfolg.
Hier einmal der Renderer:
In Zeile 25 wird der Font festgelegt und in den Zeilen 33 bis 46 sollten die Integer-Werte formatiert werden.
Das kann aber alles nicht funktionieren, wenn der Aufruf von getTableCellRendererComponent() für die Spalte 1 nicht erfolgt.
Wo liegt mein Denkfehler.
Mit freundlichem Gruß,
Konrad
wer kann mir helfen?
Ich habe als Teil eines Projektes eine JTable-Tabelle mit sieben Spalten. Jeder Datensatz für diese Tabelle besteht also aus sieben Feldern. Das erste Feld ist vom Typ Boolean, das zweite ein Integer, die restlichen sind Strings.
Alle Daten der Tabelle sollen mit einem Font fester Zeichenbreite (Courier New) und die Integer-Daten, Werte zwischen 1 und 9999, vierstellig formatiert mit vorangestellten Nullen dargestellt werden.
Bis auf die Darstellung der Spalte 2 für die Integer-Daten funktioniert alles einwandfrei. Diese jedoch werden getTableCellRendererComponent() in meinem Renderer überhaupt nicht übergeben. Übergeben werden nur die Daten der Spalten drei bis sieben, also die Daten vom Typ String.
Versuchshalber habe ich daher in der Klasse TabelleDaten für alle Daten den Typ Object verwendet. Obwohl eigentlich weder Boolean noch Integer Objecte sind, funktionierte das grundsätzlich. Die Daten mussten beim Auslesen allerdings gecastet werden. Aber auch dies brachte nicht den gewünschten Erfolg.
Hier einmal der Renderer:
Java:
public class Renderer extends DefaultTableCellRenderer {
private JTable sdkListe;
private Color colorSelected = new Color(51, 153, 255);
private Color colorNormal = new Color(255, 255, 255);
public Renderer(JTable lst, ListModel mod) {
sdkListe = lst;
setFont(new Font("Courier New", Font.PLAIN, 12));
sdkListe.setRowHeight(sdkListe.getRowHeight() + 3);
sdkListe.getColumnModel().getColumn(0).setPreferredWidth(mod.getSpaltenBreite(0));
sdkListe.getColumnModel().getColumn(1).setPreferredWidth(mod.getSpaltenBreite(1));
sdkListe.getColumnModel().getColumn(2).setPreferredWidth(mod.getSpaltenBreite(2));
sdkListe.getColumnModel().getColumn(3).setPreferredWidth(mod.getSpaltenBreite(3));
sdkListe.getColumnModel().getColumn(4).setPreferredWidth(mod.getSpaltenBreite(4));
sdkListe.getColumnModel().getColumn(5).setPreferredWidth(mod.getSpaltenBreite(5));
sdkListe.getColumnModel().getColumn(6).setPreferredWidth(mod.getSpaltenBreite(6));
setOpaque(true);
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
setForeground(Color.BLACK);
if (hasFocus || isSelected) {
setBackground(colorSelected);
}
else {
setBackground(colorNormal);
}
if (column == 1) {
if ((Integer)value < 10) {
setText("000" + value.toString());
}
else if ((Integer)value < 100) {
setText("00" + value.toString());
}
else if ((Integer)value < 1000) {
setText("0" + value.toString());
}
else {
setText(value.toString());
}
}
else {
setText(value.toString());
}
return this;
}
}
In Zeile 25 wird der Font festgelegt und in den Zeilen 33 bis 46 sollten die Integer-Werte formatiert werden.
Das kann aber alles nicht funktionieren, wenn der Aufruf von getTableCellRendererComponent() für die Spalte 1 nicht erfolgt.
Wo liegt mein Denkfehler.
Mit freundlichem Gruß,
Konrad
Zuletzt bearbeitet: