# JTextArea in JTable und die optimale Zeilenhöhe



## Romsl (7. September 2004)

*[BRAUCHE HILFE] JTextArea in JTable und die optimale Zeilenhöhe*

Hi,

bin schon seit Tagen dran irgendeine Lösung zu finden, komme aber auf kein aktzeptables Resultat.

Wenn ich die Zeilenhöhe in dieser überschriebenen Methode setze dann habe ich eine Endlosschleife produziert. Suche auch schon vergeblich nach einem Listener oder ähnlichem.

Ich habe eine JTextArea in einem JTable Feld. Jetzt möchte ich, dass sich die Zeilenhöhe genau an diese JTextArea anpasst. Ich weiß aber nicht wo ich dies setzen kann ohne eine Endlosschleife zu bekommen, wie ich dies bemerke wann die Zeilenhöhe neu berechnet werden muss.


```
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
                                                 boolean hasFocus, int row, int column) {

    if (isSelected) {
      setForeground(table.getSelectionForeground());
      setBackground(table.getSelectionBackground());
    }
    else {
      setForeground(table.getForeground());
      setBackground(table.getBackground());
    }
    setFont(table.getFont());
    if (hasFocus) {
      setBorder(UIManager.getBorder("Table.focusCellHighlightBorder"));
      if (table.isCellEditable(row, column)) {
        setForeground(UIManager.getColor("Table.focusCellForeground"));
        setBackground(UIManager.getColor("Table.focusCellBackground"));
      }
    }
    else {
      setBorder(new EmptyBorder(1, 2, 1, 2));
    }
    setText((value == null) ? "" : value.toString());

    String objString = (String)value;

     if((objString.length() % 20) >= 1) {
       table.setRowHeight(row, (int) (objString.length() / 20) * 15);
     }
     setText(objString);

     //Wenn ich die Zeilenhöhe in dieser Methode setze habe ich eine Endlosschleife
     System.out.println("*");

    return this;
  }
```

Bin wirklich dankbar über jede noch so kleine Hilfe.

Romsl


----------



## Romsl (8. September 2004)

Hab mich in diversen Foren durchgewurschtelt => Resultat 0,00%


----------



## Snape (8. September 2004)

*Re: [BRAUCHE HILFE] JTextArea in JTable und die optimale Zeilenhöhe*



> _Original geschrieben von Romsl _
> *Hi,
> bin schon seit Tagen dran irgendeine Lösung zu finden, komme aber auf kein aktzeptables Resultat.
> 
> ...



Hm, evtl. in der setValueAt(...) Methode? Sorry, hab derzeit keine Zeit, mich mit so einem Problem länger und intensiver auseinander zu setzen.


----------



## Vincentius (8. September 2004)

Die Ursache für die Endlosschleife ist klar: die Methode *setRowHeight()* von der JTable bewirkt, dass die Tabelle neu gerendert wird, und da kommt Dein Renderer wieder zum Einsatz und ruft nochmal die Methode *setRowHeight()* auf, usw...

Probiere doch die Höhe nicht auf die gesamte Tabelle, sondern auf das jeweilige RendererComponent zu setzen. Allerdings weiß ich nicht ob es was bewirkt.


----------



## Snape (8. September 2004)

> _Original geschrieben von Vincentius _
> Die Ursache für die Endlosschleife ist klar: die Methode *setRowHeight()* von der JTable bewirkt, dass die Tabelle neu gerendert wird, und da kommt Dein Renderer wieder zum Einsatz und ruft nochmal die Methode *setRowHeight()* auf, usw...



Stimmt auffallend. Wie wäre es prinzipiell, sich im Renderer die RowHeight zu jeder Row zu merken und nur dann neu zu setzen, wenn sie sich auch verändert hat?


----------



## Romsl (8. September 2004)

> Wie wäre es prinzipiell, sich im Renderer die RowHeight zu jeder Row zu merken und nur dann neu zu setzen, wenn sie sich auch verändert hat?



Genau das hab ich auch schon versucht. Komischerweise wird bei mir immer der Wert für das selektierte Element dann gespeichert und wenn ich das selbe auf einem anderen Element mache wird mir genau dieser Wert mit den aktuellen überschrieben. Somit hab ich nie verschiedene Werte zu den jeweiligen Elementen.

Hoffe man kanns verstehen, aber weiß mich im Moment nicht besser auszudrücken.

Danke


----------



## Snape (8. September 2004)

> _Original geschrieben von Romsl _
> *Genau das hab ich auch schon versucht. Komischerweise wird bei mir immer der Wert für das selektierte Element dann gespeichert und wenn ich das selbe auf einem anderen Element mache wird mir genau dieser Wert mit den aktuellen überschrieben. Somit hab ich nie verschiedene Werte zu den jeweiligen Elementen.
> 
> Danke *



Dann speicherst Du wohl falsch, schliesslich bekommst Du doch zur eindeutigen Identifizierung bei

getTableCellRendererComponent(...)

alles übergeben.


----------



## Romsl (9. September 2004)

Kannst du mir dann anhand des Oberen Codeausschnitts ein Beispiel geben?

Danke


----------

