Swing JTable - Problem mit Zeilenumbruch

Nokia8210

Mitglied
Hallo,

ich habe eine JTable bei der ich möchte, dass der Text umgebrochen angezeigt wird, wenn er zu lang ist.
Dazu habe ich einen einfachen Renderer erstellt der von JTextArea ableitet und TableCellRenderer implementiert und in der getTableCellRendererComponent
Java:
		this.setWrapStyleWord(true);
		this.setLineWrap(true);
		this.setText((String)value);
		return this;

stehen hat.
Das setzen an anderer Stelle schaut so aus:
Java:
tbl.setDefaultRenderer(String.class, new MyCellRenderer());
jedoch passiert nichts. Die Methode das Renderers wird nichtmal aufgerufen (erkannt anhand eines Sysouts), warum? Muss ich sonst noch was wichtiges mit der JTable machen?
Das der JTable zugehörige TableModel kann ich ja manipulieren wie ich will, das sollte die Table und ihren Renderer ja nicht stören, oder?

Noch eine Frage am Rande: Eine maximale Spaltenbreite muss später logischerweise gesetzt werden, weil sonst einfach der maximale Platz ausgenutzt wird, richtig? Aber das sollte aktuell ja keine Rolle spielen, weil die Methode nicht aufgerufen wird.

Gruß
 

Michael...

Top Contributor
Damit der Renderer auch verwendet wird muss die JTable für getColumnClass(int column) auch String.class zurückliefern, standardmäßig liefert sie nur Object.class zurück, d.h. es wird bei Dir nur der Renderer für Object verwendet.

Das
Code:
this.setWrapStyleWord(true);
und
Code:
this.setLineWrap(true);
könnte man einmalig setzen und müsste es nicht jedesmal in der getRenderer... aufrufen.
 

Nokia8210

Mitglied
Danke.

Wenn mich meine Englischkenntnisse nicht im Stich lassen, wandelt mein DefaultTableModel meinen Vector of Vectors of Strings, dass ich ihm im Konstruktor mit übergebe also in ein Vector of Vectors of Objects um? Das heisst ich muss entweder eine Methode des DefaultTableModels überschreiben oder dem Renderer einfach Object.class übergeben?
Ich schätze ersteres wäre sauberer und ressourcenschonender? Nur welche Methode wäre das? setDataVector? Oder kann ich einfach im Konstruktor was ändern. Ich bin verwirrt, zumal ich dem TableModel ja ansich einen String Vector übergebe.

P.S: Hm wenn ich den CellRenderer einfach mit Object.class setze, werden plötzlich keine Tabellenzeilen mehr markiert bei selektion, ist also wohl keine Lösung.
 
Zuletzt bearbeitet:

Michael...

Top Contributor
Wenn mich meine Englischkenntnisse nicht im Stich lassen, wandelt mein DefaultTableModel meinen Vector of Vectors of Strings, dass ich ihm im Konstruktor mit übergebe also in ein Vector of Vectors of Objects um? Das heisst ich muss entweder eine Methode des DefaultTableModels überschreiben oder dem Renderer einfach Object.class übergeben?
Ich schätze ersteres wäre sauberer und ressourcenschonender? Nur welche Methode wäre das? setDataVector? Oder kann ich einfach im Konstruktor was ändern. Ich bin verwirrt, zumal ich dem TableModel ja ansich einen String Vector übergebe.
Beim DefaultRenderer ist entscheidend, welche Klasse von der bereits erwähnten Methode
Code:
getColumnClass(int column)
zurückgegeben wird, ob das Objekt ein String, ein Integer oder ein sonstiges Object ist, ist dabei egal - solange der Renderer damit umgehen kann . Alternativ kann man auch einen Renderer direkt für eine Spalte setzen (an die TableColumn kommt man über das ColumnModel)
P.S: Hm wenn ich den CellRenderer einfach mit Object.class setze, werden plötzlich keine Tabellenzeilen mehr markiert bei selektion, ist also wohl keine Lösung.
Die Darstellung der Zelle ob mit/ohne Selektion/Fokus ist Aufgabe des Renderers, d.h. wenn Du einen anderen Renderer setzt musst Du darin auch definieren wie Zellen mit Selektion/Fokus aussehen.
 

Nokia8210

Mitglied
hm. und wie mach ich das jetzt? Es ist ja nicht der CellRenderer der auf Mausklicks reagiert sondern der MouseListener!?
Erster Ansatz (im Renderer):

Java:
		if (isSelected){
			Color c = new Color(255, 0, 0);
			table.setRowSelectionAllowed(true);
			table.setRowSelectionInterval(row, row);
			table.setSelectionBackground(c);			
		}

funktioniert aber wie erwartet nicht.
Muss ich Listener und Renderer noch irgendwie miteinander verbinden oder so?

PS: Wobei ich grad selber Merke, das der Code ansich mindestens zur Hälfte Schwachsinn ist. Wenn irgendwas schon selektiert ist (isSelected) braucht man dies ja nicht nochmal tun.
Also nur um sicher zu gehen: Klicke ich in die Tabelle, wird nach wie vor was selektiert, nur ich sehe es nicht mehr?

PS2:eek:k, glaub es funktioniert:
Java:
this.setBackground(c)
Hab jetzt erstmal keine Zeit mehr da weiter zu machen, werd später nochmal nach schauen, hoffe das war's schon ;)
 
Zuletzt bearbeitet:

Michael...

Top Contributor
hm. und wie mach ich das jetzt? Es ist ja nicht der CellRenderer der auf Mausklicks reagiert sondern der MouseListener!?
Klar, aber es geht ja nicht darum auf Mausklicks zu reagieren, sondern die dadurch selektierten/fokusierten Zellen darzustellen. ...und die Darstellung ist nun mal Aufgabe des Renderers.

Wenn der Renderer von DefaultTableRenderer erbt, kann man z.B. die Super Klasse nach entsprechenden Attributen (Hintergrund, Schriftfarbe, Rahmen...) fragen und diese verwenden.
Wenn man das Interface TableCellRenderer implementiert, bekommt ja in der Methode getTableCellRendererCo... Informationen über den Zustand der Zelle mitgeteilt: isSelected, hasFocus.
Dann muss man entsprechen dieser boolean, den gewünschten Hintergrund, Schriftfarbe, Rahmen setzen.
 

Nokia8210

Mitglied
Ich glaub ich hab jetzt verstanden wie das mit dem CellRenderer funktioniert, zumindest hoffe ich das.

Also danke nochmal für deine Hilfe.

So sollte jetzt alles klappen:

Java:
	public Component getTableCellRendererComponent(JTable table, Object value,
			boolean isSelected, boolean hasFocus, int row, int column) {
		this.setText((String)value);
		if (isSelected){			
			this.setBackground(Color.LIGHT_GRAY);			
		}
		else {
			this.setBackground(Color.WHITE);
		}
		return this;
	}

Eigentlich bin ich sogar ganz froh, dass bestimmte Sachen nur mit eigenen Implementierungen gehen, z.B. auch das uneditierbar machen einer Zelle, dann schaut man sich das zumidest mal an und merkt, dass das durchaus auch ein paar Vorteile mit sich bringt, einen eigenen CellRenderer zu implementieren.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H JTable TableCellEditor-Problem AWT, Swing, JavaFX & SWT 0
T Problem mit JTable Sortierung AWT, Swing, JavaFX & SWT 2
D Problem mit JTable AWT, Swing, JavaFX & SWT 1
I JTable,AbstractTableModel Problem AWT, Swing, JavaFX & SWT 3
K Swing JTable Problem... AWT, Swing, JavaFX & SWT 3
J JTable: Problem bei CellRenderer AWT, Swing, JavaFX & SWT 3
W jTable Scrollbar Problem AWT, Swing, JavaFX & SWT 2
GianaSisters Swing jTable Undo Problem. AWT, Swing, JavaFX & SWT 5
J Swing Problem mit JTable erweitern AWT, Swing, JavaFX & SWT 6
Draculajr Problem mit jformattedtextfields und jtable AWT, Swing, JavaFX & SWT 10
B Swing JTable custom ColumnModel Problem AWT, Swing, JavaFX & SWT 5
T JSpinner in JTable: Problem beim Auslesen, funktioniert erst beim Zellwechsel AWT, Swing, JavaFX & SWT 7
D Problem mit JFileChooser -> Daten werden mit anführungsstriche in JTable geschrieben AWT, Swing, JavaFX & SWT 8
B Problem mit Alignment in JTable AWT, Swing, JavaFX & SWT 2
F Swing Problem mit Drag&Drop in JTable AWT, Swing, JavaFX & SWT 4
D Swing JTable Model View Problem AWT, Swing, JavaFX & SWT 6
D Swing JTable Problem bei automatischem update von Zellen AWT, Swing, JavaFX & SWT 3
F Swing JTable: Problem beim zeile löschen AWT, Swing, JavaFX & SWT 3
C Swing Problem mit MouseEvent in JTable AWT, Swing, JavaFX & SWT 5
O JDialog-JScrollPane-JTable Problem AWT, Swing, JavaFX & SWT 3
aze JTable in Popup.Problem mit DefaultTableCellRenderer AWT, Swing, JavaFX & SWT 9
N Swing Problem beim Einlesen von Jtable in Array AWT, Swing, JavaFX & SWT 5
M Problem mit funktionellem JTable Header AWT, Swing, JavaFX & SWT 5
M Problem mit Festsetzen der Anzahl ein reihen in einer JTable AWT, Swing, JavaFX & SWT 11
S JTable & TableCellEditor Problem AWT, Swing, JavaFX & SWT 5
M JTable und ListSelectionListener Problem AWT, Swing, JavaFX & SWT 3
S Sortierter JTable Problem AWT, Swing, JavaFX & SWT 2
K Problem mit JButton in JTable AWT, Swing, JavaFX & SWT 4
M JTable & Problem, das nicht die komplette Zeile gefärbt AWT, Swing, JavaFX & SWT 6
B Anspruchsvolles JTable Problem AWT, Swing, JavaFX & SWT 4
W Problem mit JTable und fireTableDataChanged() AWT, Swing, JavaFX & SWT 13
M Layout-Problem: JTable AWT, Swing, JavaFX & SWT 3
S JTable - Problem mit der Selection AWT, Swing, JavaFX & SWT 4
G Darstellungs Problem mit ComboBox in JTable AWT, Swing, JavaFX & SWT 15
G Problem bei JTable in JInternalFrame AWT, Swing, JavaFX & SWT 4
H JTable problem mit TableSorter AWT, Swing, JavaFX & SWT 4
M JDBC + dynamischer JTable - Spalten problem AWT, Swing, JavaFX & SWT 5
S JTable Problem AWT, Swing, JavaFX & SWT 2
E JTable: Problem mit clearSelection() AWT, Swing, JavaFX & SWT 7
R JTable auslesen Problem AWT, Swing, JavaFX & SWT 4
D GridBagLayout Problem mit JTable AWT, Swing, JavaFX & SWT 6
M Problem mit ImageIcon in einer JTable AWT, Swing, JavaFX & SWT 2
G JTable - Problem.:( AWT, Swing, JavaFX & SWT 6
Z Problem mit Icons in JTable AWT, Swing, JavaFX & SWT 3
D Jtable farbig markieren - Verständnis Problem AWT, Swing, JavaFX & SWT 5
M Problem mit JTable und DefaultTableModel AWT, Swing, JavaFX & SWT 2
G Problem mit JTable / mit dem Eintragen der Daten aus Vector AWT, Swing, JavaFX & SWT 4
S JTable + Sortieren => Problem bei Darstellung AWT, Swing, JavaFX & SWT 13
TRunKX Problem mit JTable AWT, Swing, JavaFX & SWT 3
J jtable + Textarea problem AWT, Swing, JavaFX & SWT 3
M Problem bei Verbinden v. jTable, ScrollPane u. JLabel AWT, Swing, JavaFX & SWT 5
G Problem mit Scrollpanel in JTable AWT, Swing, JavaFX & SWT 2
T Problem mit JTable - Renderer AWT, Swing, JavaFX & SWT 3
W Problem/Absturz bei Zelle nicht editierbar setzen (JTable) AWT, Swing, JavaFX & SWT 6
N JTable - Problem mit markieren von Zellen AWT, Swing, JavaFX & SWT 3
M JTable Problem AWT, Swing, JavaFX & SWT 9
EagleEye Problem mit ObjectOutputStream / JTable AWT, Swing, JavaFX & SWT 5
G JTable CellRenderer-Problem AWT, Swing, JavaFX & SWT 4
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
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
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

Ähnliche Java Themen

Neue Themen


Oben