TextCellRenderer

Hallo,

ich habe eine JTable, in den verschieden lange Strings dargestellt werden. Nun möchte ich, dass wenn ein String sehr lang ist der String in mehrere Zeilen umgebrochen wird, jedoch in einer „Tabellenfeld“ dargestellt wird. Ich habe darufhin ein wenig gesucht und habe dann folgende Idee gefunden und ausprogrammiert: einen TextCellRenderer der von einem JTextArea erbt. Das funktioniert teilweise auch ganz gut, leider wird nicht immer die höhe der Zelle korrekt angepasst, sprich es ist nur ein Teil meines Strings sichtbar. Hat jemand eine Idee woran das liegen könnte? Nachfolgende mein Code:

public class TextCellRenderer extends JTextArea implements TableCellRenderer {
public Component getTableCellRendererComponent(JTable table, Object obj, boolean isSelected, boolean hasFocus, int row, int column) 
{
 this.setFont(new Font("Lucida", 0, 12));
 setLineWrap(true);
 setWrapStyleWord(true);
 setText( (String) obj);
 int wanted = (int) getPreferredSize().getHeight();

 if (wanted \> table.getRowHeight(row)) {
 table.setRowHeight(row, wanted);
 }
 return this;
 }
}

Bin für alle Tips dankbar, habe inzwischen nämlich keine Idee mehr woran es liegen könnte…

Gruß,
Michi

Moin

Hast du schon kontrolliert ob das:

int wanted = (int) getPreferredSize().getHeight();

den richtigen Wert liefert ? JTextarea updated seine Grösse nicht immer sofort nach den einsetzen von neuem Text.

cu

Tach,

habe gerade nachgeschaut: Du hast recht, der Aufruf

int wanted = (int) getPreferredSize().getHeight(); 

liefert nicht immer den richtigen Wert. Wie bekomme ich jetzt aber meine Textarea dazu die Grösse zu updaten?

Gruß,
Michi

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Moin

Wie bekomme ich jetzt aber
meine Textarea dazu die Grösse zu updaten?

Ich habs noch nie gemacht, also kann ich nur raten:
javax.swing.JComponent.validate() oder revalidate() oder invalidate().

Eine der Methoden sollte es sein…

cu

Hallo,

ich habe es jetzt hinbekommen. Rufe revalidate auf und sage der TextArea mit setSize die Anfangsgrösse (also auch die zur Verfügung stehende Breite) und jetzt funzt’s?! Habe keine Ahnung wiso, aber jetzt stimmt es auf jeden Fall.

Nochaml vielen Dank für die Hilfe,

Michi