Zeilenumbruch im JTable-->Verzweiflung

kevdiablo

Grünschnabel
Hallo Leute,
Ein ganzes Wochenende ist drauf gegangen!!
Ich weis einfach nicht mehr weiter!
Ich habe ein funktionierendes JTable Model und lese eine DB aus. In der DB sind längere Texte mit zeilenumbrüche. Ich habe bisher im INet gefunden das ich ein eigenes CellRenderer erstellen muss. Ich habe dann folgendes gemacht :

public class JTCellRenderer extends JTextArea implements TableCellRenderer
{

private static final long serialVersionUID = 1L;

public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus,
int row, int column)
{
// Text setzen
setWrapStyleWord(true);
setLineWrap(true);
setText((String)value);

System.out.println("hallo");

return this;
}

}

In der Main mache ich folgendes:

JTCellRenderer renderer = new JTCellRenderer();
table.setDefaultRenderer(String.class, renderer);

Aber es nicht!!
Ich setzte ja den defaultRenderer da muss er doch mein sysout ausgeben, oder
Macht er aber nicht...

Kann mir jemand helfen :-(

Danke

Grüße

FR
 
Hallo Snape..

freut mich :) habe so viele Einträge von Dir gelesen, Respekt! ;-)

Spaltenhöhe war der falsche Ausdruck, was ich brauchte war eine Variable Zeilenhöhe!

Denn den Zeilenumbruch bekommt man ja hin, weil man ja von JTextArea ableitet..aber wenn man einen längeren Text hat muss sich ja die Spalte dem Text anpassen!
Ich habe mir jetzt selbst eine Lösung einfallen die ganz simpel ist.. Spaltenbreite sind fest definiert und die Zeilenhöhe ist variabel dem Text angepasst...Super cool das ganze..

das was mich interessiert ist, warum ich über mein JTable Objekt keine Einstellungen mehr machen kann an meiner table wenn ich getTableCellRendererComponent überschreibe?
Nur weil ich von JTextArea ableite und diesen dann als default Renderer setze
Weil mir gehen viele nette funktionen verloren die ich mir eigentlich mühsamm selber programmieren muss..

Danke schon mal
 
Ich poste es einfach mal:


Im Prinzip ganz einfach..
Ich lese jede Zeile Spalte für Spalte aus mit model.getValueAt(i, j) Ich hole mir die Zelle mit der größten variablenlänge und die setze ich dann mit table.setRowHeight(i,str_length/2+16); wobei geteilt durch 2+16 das ganze optimiert... das wars..



int str_length =0; // variable zum setzen des grössten wertes

TableModel model = table.getModel();

for (int clmCnt = model.getColumnCount(), rowCnt = model
.getRowCount(), i = 0; i < rowCnt; i++) {
for (int j = 0; j < clmCnt; j++) {
if (model.getValueAt(i, j) != null){
String value = model.getValueAt(i, j).toString();
//Es werden ja alle spalten ausgelesen deswegen hole ich mir
//den den grössten wert
if(value.length()>=str_length)
{
str_length = value.length();

}
//hier wird die grösste variable als zeilenhöhe gesetz bei der aktuellen Spalte
table.setRowHeight(i,str_length/2+16);
}

}
//Nach jeder Zeile muss die Höhe wieder zurückgesetzt werden
str_length = 0;

}

//Spaltenbreite definieren
table.getColumnModel().getColumn(0).setPreferredWidth(50);
table.getColumnModel().getColumn(1).setPreferredWidth(30);
table.getColumnModel().getColumn(2).setPreferredWidth(30);
table.getColumnModel().getColumn(3).setPreferredWidth(20);
table.getColumnModel().getColumn(4).setPreferredWidth(270);
table.getColumnModel().getColumn(5).setPreferredWidth(200);
table.getColumnModel().getColumn(6).setPreferredWidth(50);



Ich hoffe es ist eine Hilfe für die solche probleme hatte... hat mich nerven gekostet ;-)
 

Neue Beiträge

Zurück