# JTextArea in JTable und die optimale Zeilenhöhe



## Romsl (7. Sep 2004)

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

_Editiert von P3AC3MAK3R: Tags repariert_


----------



## Romsl (8. Sep 2004)

:cry: Es muss doch jemanden geben der eine Antwort darauf hat?!?


----------



## Roar (8. Sep 2004)

setze einfach die größe der JTextArea:
textarea.setPreferredSize();


----------



## Romsl (8. Sep 2004)

Aber wenn ich bei der JTextArea die preferredSize verändere hat es keine Auswirkungen auf die JTable. Deswegen ändert die JTable ja nicht ihre Zeilenhöhe.

Oder lieg ich da verkehrt?

Gruß

Romsl


----------



## Roar (8. Sep 2004)

hast du es ausprobiert? 
rate mal wie die JTable ihre masse berechnet.
ja, genau, vom den komponenten in ihr.
jetzt weisst du auch warum es zunem StackOverflowError oder OutOfMemoryError kommt wenn du direkt auf die Jtable zugreifen willst.


----------



## Romsl (8. Sep 2004)

Aber wie komme ich an die JTextArea die in einer bestimmten Spalte und in einer bestimmten Zeile liegt?


----------



## Roar (8. Sep 2004)

hä? du hast die JTextArea doch im renderer, oder was is das da!?


----------



## Romsl (8. Sep 2004)

Ich habe den Renderer genau wie oben beschrieben. Wenn ich in der Methode die Höhe der Tabelle setze habe ich die Schleife und wenn ich mit this.setPreferredSize(Dimension) die Größe setze passiert nichts.

Kannst du einen kurzen Codeausschnitt geben wie du das meinst?

Danke


----------



## Roar (8. Sep 2004)

von welcher klasse leitet der cellrenderer denn ab?? JtextArea? wenn nicht: dann kannst du doch gar keien JTextArea in deine JTable einfügen!? bzw. einfpgen schon aber sie wird nicht dargestellt...


----------



## Romsl (8. Sep 2004)

Argh...

Das könnte sein. Während dem Editieren habe ich keine JTextArea sondern ein JTextField. Aber wenn ich das Editieren mit Enter beende dann ersetzt mein Renderer das JTextField durch eine JTextArea.

Hast du mir einen Lösungsvorschlag wie ich in eine 5 spaltige Tabelle in der 4 Spalte eine JTextArea bekomme und den Rest mit JTextFields. Die Tabellenreihen sollten dynamisch erweiterbar sein und die Zeilenhöhe sollte sich an der Größe der JTextArea orientieren.

Danke


----------



## Roar (8. Sep 2004)

tja du müsstest dann wohl für die TableColumn mit den textareas einen eigenen renderer schreiben, der dann in der getComponent methode die größe der textarea setzt, per setPreferredSize(). normalerweise soltle sich die JTable daran orientieren und die zeilenhöhe der höhe der textarea anpassen.


----------



## Romsl (8. Sep 2004)

Ich habe einen eigenen Renderer geschrieben, siehe ganz oben. Habs auch mit dem setPreferredSize versucht. Auf der Tabelle auch den repaint() und validate() aufgerufen.

Aber nichts passiert. Vielleicht hab ich das immernoch nicht richtig verstanden.

Gruß

Romsl


----------

