JTable Zellenhöhe an Zeilenanzahl anpassen

Ned Nederlander

Aktives Mitglied
Hallo,
ich habe einen JTable und möchte darin mehrzeiligen Text eingeben.

Ich hab auf "Java ist auch eine Insel" diesen CellRenderer gefunden, der in den Zellen eine TextArea verwendet. Wenn ich jetzt Strings einlese, kann ich in diese mit \n einen Zeilenumbruch realisieren.

Java:
public class TwoLinesCellRenderer extends JTextArea implements TableCellRenderer
{
  @Override public Component getTableCellRendererComponent(
    JTable table, Object value,
    boolean isSelected, boolean hasFocus, int row, int column )
  {
    setText( value.toString() );    // Value kann String mit \n enthalten

    return this;
  }
}



Komischerweise werden die Zeileninhalte sobald ich in eine Zelle doppelklicke(also editieren will) hintereinander angezeigt.

Mein zweites Problem ist, dass die Zellenhöhe auch bei mehreren Zeilen Text genauso schmal bleibt, wie einzeilige Zellen. Gibt es da eine Möglichkeit, die Zellenhöhe automatisch an die Zeilenanzahl anzugleichen?


Danke im Vorraus!
 
Komischerweise werden die Zeileninhalte sobald ich in eine Zelle doppelklicke(also editieren will) hintereinander angezeigt.
Das liegt daran, dass Du den Standardeditor verwendest und der ist ein JTextField, Du musst für diese Zellen ebenfalls eine JTextArea als CellEditor anbieten.
Mein zweites Problem ist, dass die Zellenhöhe auch bei mehreren Zeilen Text genauso schmal bleibt, wie einzeilige Zellen. Gibt es da eine Möglichkeit, die Zellenhöhe automatisch an die Zeilenanzahl anzugleichen?
Du brauchst einen Algorithmus der die maximale Höhe (aus PreferredSize()) der Komponenten einer Zeile ermittelt und diese dann per setRowHeight setzt.
 
vielen dank, das mit dem celleditor hat wunderbar geklappt. aber wie/wo mach ich das mit der zeilenhöhe? kannst mir da nen tipp geben?

wenn ich was einlese, wärs halt gut, wenns direkt danach die zeilenhöhe angleicht. sowohl wenn ich direkt etwas editiere, als auch, wenn ich im programm einen string einlese.

danke.
 
Zuletzt bearbeitet:

Zurück
Oben