JTable mit TableCellRenderer

Status
Nicht offen für weitere Antworten.

Rainbow

Bekanntes Mitglied
Hi,
ich hab mir ne JTable gemacht mit 3 Spalten und 5 Zeilen.
Nun möchte ich jede Zelle individuell bearbeiten können. Dafür benutze ich einen TableCellRenderer.
Jetzt möchte ich zum Beispiel in einer Zelle den Text ändern, aber mit setValueAt funktioniert das nicht.
Wie kann man das machen?

[HIGHLIGHT="Java"]public class SampleTableCellRenderer extends JLabel implements TableCellRenderer {

DefaultTableCellRenderer tableRenderer = new DefaultTableCellRenderer();

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
table.setValueAt("Hallo", 0, 0);
table.setOpaque(true);
tableRenderer = (DefaultTableCellRenderer)tableRenderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

return tableRenderer;
}
}[/HIGHLIGHT]

Gruss
Rainbow
 

Illuvatar

Top Contributor
Schau mal in die FAQ: Java FAQ » JTable

Edit: Das Forum macht den Link kaputt :/
Edit Ebenius: Hab den Link editiert und die Fehlerbeschreibung weitergeleitet.
 
Zuletzt bearbeitet von einem Moderator:

Rainbow

Bekanntes Mitglied
gibt es denn nicht irgendeinen Aurfruf wie...

getCell(row, column).setText("Test");
gettCell(row, column).setBackround(Color.Red);

oder so?
etwas in der Art habe ich dort nicht gefunden
 

Ebenius

Top Contributor
Nö. Das Konzept (allgemein in Swing) ist ganz anders. Die Daten kommen aus dem TableModel, die Spaltenauswahl- und Reihenfolge bestimmt das TableColumnModel, die Zeilen-Selektion und die Spalten-Selektion wird über je ein SelectionModel abgebildet, die Zellendarstellung übernimmt ein TableCellRenderer, das Editieren übernimmt ein TableCellEditor, die Darstelung der Spaltenköpfe (wieder per TableCellRenderer) und die Ansteuerung der Zeilensortierung und der Spaltenreihenfolge übernimmt die JTableHeader-Komponente, die Sortierung der Zeilen in der Darstellung macht ein TableRowSorter und alles wird von der JTable-Komponente gesteuert und zusammen gehalten. Bestimmt habe ich noch irgendwelche Teile vergessen.

Zum Glück ist das so modular aufgebaut, ansonsten würde man sich oft ins Knie schießen. Das bestätigen Dir sicher gern einige Leute die mit .NET das DataGrid verwenden müssen und ständig an die Grenzen des Machbaren stoßen.

Ebenius
 

Rainbow

Bekanntes Mitglied
also ich denke ich steige durch das Prinzip selbst noch nicht so ganz durch....
aber wenn ich 2 Spalten und 5 Zeilen hab, dann hab ich ja 10 Zellen....wenn jede einzelne jetzt ne andere Farbe haben soll zum Beispiel...dann brauche ich auch 10 verschiedene CellRenderer oder wie?
 

Rainbow

Bekanntes Mitglied
ja so genau hab ich mir das noch nicht überlegt.
ich wollte halt nur prinzipiell sachen ausprobieren, um halt irgendwie dahinter zu steigen, wie man mit so einem CellRenderer umgeht
 

Michael...

Top Contributor
ja so genau hab ich mir das noch nicht überlegt
das ist aber meist das Entscheidende ;-)

hier mal ein kurzes Bsp. mit CellRenderer, ansonsten kann man sich mal den Quellcode von DefaultTableCellRenderer anschauen.
[HIGHLIGHT="Java"]import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;

public class ColoredTable extends JFrame{
private Object[][] data = {
{"Zelle A1", "Zelle A2", "Zelle A3", "Zelle A4"},
{"Zelle B1", "Zelle B2", "Zelle B3", "Zelle B4"},
{"Zelle C1", "Zelle B2", "hurz", "Zelle C4"},
{"Zelle D1", "Zelle D2", "Zelle D3", "Zelle D4"}
};
public ColoredTable() {
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setBounds(0, 0, 500, 300);

DefaultTableModel model = new DefaultTableModel();
model.setDataVector(data, new Object[] {"Spalte A", "Spalte B", "Spalte C", "Spalte D"});
JTable table = new JTable(model);
this.getContentPane().add(table, BorderLayout.CENTER);
table.setDefaultRenderer(Object.class, new ColorRenderer());
table.setRowHeight(40);
}

public static void main(String[] args) {
new ColoredTable().setVisible(true);
}

class ColorRenderer extends JLabel implements TableCellRenderer {
public ColorRenderer() {
this.setOpaque(true);
this.setHorizontalAlignment(JLabel.CENTER);
}

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col) {
this.setText(value.toString());

// Verändern aufgrund der Position
if ((row%2==0 && col%2==0)|| (row%2==1 && col%2==1))
this.setBackground(Color.GREEN.darker());
else
this.setBackground(Color.CYAN);

//Verändern aufgrund des Zelleninhalts
if (value.toString().endsWith("2"))
this.setForeground(Color.BLUE);
else
this.setForeground(Color.RED);
if (value.toString().equals("hurz"))
this.setBackground(Color.ORANGE);

// Verändern aufgrund der Selektion
if (isSelected)
this.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2));
else
this.setBorder(null);
return this;
}
}
}[/HIGHLIGHT]
 

Rainbow

Bekanntes Mitglied
danke, das ist aber genau das was ich mir vorgestellt habe.
So meinte ich das :)

vielen dank, das Beispiel hilft mir auf jeden Fall weiter
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Swing JTable, eigener TableCellRenderer Keine Anzeige in den Zellen AWT, Swing, JavaFX & SWT 8
R JTable - TableCellRenderer AWT, Swing, JavaFX & SWT 3
R JTable - TableCellRenderer - BufferedImage AWT, Swing, JavaFX & SWT 9
R JTable - TableCellRenderer AWT, Swing, JavaFX & SWT 2
D JTable TableCellRenderer AWT, Swing, JavaFX & SWT 2
J JTable und TableCellRenderer AWT, Swing, JavaFX & SWT 2
J Drag und drop aus einer JTable - bitte um Unterstützung AWT, Swing, JavaFX & SWT 2
S HPRO und UPRO gemeinsame JTABLE gemeinsamer RENDERER ? AWT, Swing, JavaFX & SWT 1
F Swing JTable - MultiHeader inkl. Eingabemöglichkeit AWT, Swing, JavaFX & SWT 1
S JTable - Feldinhalte anzeigen AWT, Swing, JavaFX & SWT 15
D Swing JTable Spaltenbreite AWT, Swing, JavaFX & SWT 1
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
G jTable - getSelectedRow() AWT, Swing, JavaFX & SWT 3
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
P JTable Listener für die Änderung einzelner Zellen oder Rows AWT, Swing, JavaFX & SWT 2
D Tastaturabfragen CTRL+t, CTRL+E bei eine JTable, bestehend aus JTextAteas AWT, Swing, JavaFX & SWT 4
P Checkboxes in JTable nicht editable AWT, Swing, JavaFX & SWT 9
F Best-Practise: JTable Text in Zelle zu groß AWT, Swing, JavaFX & SWT 2
izoards JTable in CSV File schreiben... AWT, Swing, JavaFX & SWT 23
Kohl Jedes Objekt einer JTable um ein Zeichen verkürzen AWT, Swing, JavaFX & SWT 7
I JTable, DefaultTableModel, zwei Zahlen multiplizieren. AWT, Swing, JavaFX & SWT 26
M JTABLE / wie oft wurde gewürfelt. AWT, Swing, JavaFX & SWT 1
F JTable vergrößern AWT, Swing, JavaFX & SWT 2
H JTable: Diverse NullPointer-Exceptions zur Laufzeit AWT, Swing, JavaFX & SWT 3
J Swing Werte des JTable werden nicht angezeigt AWT, Swing, JavaFX & SWT 9
T Swing JTable cellRenderer mit jpg Hintergrundfarbe lässt sich nicht ändern. AWT, Swing, JavaFX & SWT 1
HoT Einzelne Zelle in JTable Rahmen unten setzen AWT, Swing, JavaFX & SWT 24
B JTable Zellen zusammenfügen AWT, Swing, JavaFX & SWT 3
M Swing Cell Renderer für Zeilenumbruch in JTable AWT, Swing, JavaFX & SWT 0
H JTable im JSplitPane darstellen AWT, Swing, JavaFX & SWT 2
MadMax2506 Swing JTable lädt sehr lange AWT, Swing, JavaFX & SWT 1
D Zeilenumbruch in einer JTable AWT, Swing, JavaFX & SWT 9
R Swing JTable und Spaltenausrichtung AWT, Swing, JavaFX & SWT 8
G JTable füllen AWT, Swing, JavaFX & SWT 1
H JTable TableCellEditor-Problem AWT, Swing, JavaFX & SWT 0
W Swing JTable Zeilenumbruch innerhalb einer Zelle AWT, Swing, JavaFX & SWT 3
J Datensatz in jTable ausgeben AWT, Swing, JavaFX & SWT 3
M Swing Automatischer Editorstart in JTable-Zelle AWT, Swing, JavaFX & SWT 5
ralfb1105 Swing JTable aktualisieren AWT, Swing, JavaFX & SWT 5
adiko01 JTable: Nur markierte Zeilen aus der Tabelle in CSV exportiern AWT, Swing, JavaFX & SWT 9
M JTable.setDefaultRenderer(...) greift nicht AWT, Swing, JavaFX & SWT 0
J JTable: Eingabe in Tabellenzelle korrigieren AWT, Swing, JavaFX & SWT 4
T Problem mit JTable Sortierung AWT, Swing, JavaFX & SWT 2
D JTable nach INSERT aktualisieren /refreshen AWT, Swing, JavaFX & SWT 1
D MySQL Daten in JTable anzeigen AWT, Swing, JavaFX & SWT 2
H Swing Jtable extra spalte AWT, Swing, JavaFX & SWT 6
S Swing Rechteck über JTable zeichnen (per MouseListener) AWT, Swing, JavaFX & SWT 1
S Swing Mal wieder JTable Ansicht aktualisieren AWT, Swing, JavaFX & SWT 10
A JTable mit Daten füllen AWT, Swing, JavaFX & SWT 1
VfL_Freak Swing Einzelne Zeile in jTable selektieren klappt nicht AWT, Swing, JavaFX & SWT 7
N AWT jTable CellRenderer AWT, Swing, JavaFX & SWT 6
T Swing JTable valueChanged datensatz löschen AWT, Swing, JavaFX & SWT 1
0 Swing JTable aus anderer Klasse updaten AWT, Swing, JavaFX & SWT 5
S Jtable defaultRenderer wohin damit ? AWT, Swing, JavaFX & SWT 23
T Swing JTable / FocusListener AWT, Swing, JavaFX & SWT 0
it_is_all Warum wird die JTable im JDialog nicht angezeigt? AWT, Swing, JavaFX & SWT 1
L Swing JTable im Panel darstellen AWT, Swing, JavaFX & SWT 8
T Swing Double Click bei Buttons in JTable AWT, Swing, JavaFX & SWT 9
J addRow bei JTable AWT, Swing, JavaFX & SWT 6
M Jtable gibt -1 wert bei selectedRow und Column AWT, Swing, JavaFX & SWT 3
Meeresgott Swing JTable AWT, Swing, JavaFX & SWT 4
J JTable Selection Listener funktioniert nicht AWT, Swing, JavaFX & SWT 4
C Swing Daten in JTable wiedergeben per TableModel und MVC Pattern AWT, Swing, JavaFX & SWT 16
Z Swing Drag&Drop zwischen JTable und JTree AWT, Swing, JavaFX & SWT 4
Thallius JTable dynamisch Spaltenanzahl verändern AWT, Swing, JavaFX & SWT 2
Thallius JTable dynamisch laden? AWT, Swing, JavaFX & SWT 2
B Swing JTable sortieren AWT, Swing, JavaFX & SWT 2
T Swing JTable auslesen und befüllen AWT, Swing, JavaFX & SWT 8
B JTable wird nicht angezeigt AWT, Swing, JavaFX & SWT 1
J JTable und Suchlogik AWT, Swing, JavaFX & SWT 4
Viktim Swing JTable mit Tab verlassen AWT, Swing, JavaFX & SWT 1
F Swing Spaltenbreite einer Column eines JTable auslesen AWT, Swing, JavaFX & SWT 5
Viktim Swing JTable Mit Tab druch Zeilen Wechseln AWT, Swing, JavaFX & SWT 5
Thallius Warum refrehsed mein JTable nicht? AWT, Swing, JavaFX & SWT 5
Ghostman1711 Hinzufügen ausgewählter Dateinen des Filechoosers zu einem JTable AWT, Swing, JavaFX & SWT 9
S Swing JTable - Einzelne Rows einfärben AWT, Swing, JavaFX & SWT 11
M Wert einer Zelle aus JTable ziehen AWT, Swing, JavaFX & SWT 4
K JTable getValueAt() klappt nicht immer AWT, Swing, JavaFX & SWT 1
K JTable in extra Klasse, Zugriff in einer anderen klasse nicht möglich AWT, Swing, JavaFX & SWT 26
B Swing Tabelle(JTable) filtern swing GUI AWT, Swing, JavaFX & SWT 3
P JTable - bei Eingabe Selektion AWT, Swing, JavaFX & SWT 0
P Fokus auf Zelle in JTable AWT, Swing, JavaFX & SWT 1
S Swing Deselektion in JTable verhindern AWT, Swing, JavaFX & SWT 0
D Problem mit JTable AWT, Swing, JavaFX & SWT 1
N Swing Print JTable mit AbstractTableModel AWT, Swing, JavaFX & SWT 1
Ananaskirsche Swing jTable Reihen zuviel eingefügt AWT, Swing, JavaFX & SWT 12
P im JTable die Schriftfarbe ändern AWT, Swing, JavaFX & SWT 19
T Swing JTable wird nicht angezeigt AWT, Swing, JavaFX & SWT 4
S Dreiecke in bestimmte Zellen einer JTable AWT, Swing, JavaFX & SWT 9
LexeB4F Zelle in JTable gezielt einfärben AWT, Swing, JavaFX & SWT 4
LexeB4F JTable mehrere Zelle selektieren und inhalte Löschen.. Ideen gesucht AWT, Swing, JavaFX & SWT 1
D Swing JTable Renderer Grafikfehler AWT, Swing, JavaFX & SWT 0
K Swing JTable mit ImageIcon und Text in einer Zelle AWT, Swing, JavaFX & SWT 1
M Swing JTable GroupableHeader Background Color AWT, Swing, JavaFX & SWT 4
K Swing JTable updaten AWT, Swing, JavaFX & SWT 9
thet1983 Swing MySQL >> JTable AWT, Swing, JavaFX & SWT 5
J JTable bounds ändern durch resizing des Fensters AWT, Swing, JavaFX & SWT 9
F JTable Zellen-Hintergrund ändern AWT, Swing, JavaFX & SWT 7
O JTable linksbündig drucken (nicht der Zelleninhalt) AWT, Swing, JavaFX & SWT 2
Crazynet xls Datei in JTable AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben