JTable - zawijanie tesktu w komórkach

0

Witam
Mam prośbę do osób dobrze programujących w Swingu.
Jak zmusić komponent JTable do wypisywania kilku linii tekstu w jednej komórce?
Chodzi o to, że gdy wczytam do tabelki zbyt długi tekst, żeby nie wyświetlało tylko tyle tekstu ile się mieści w komórce + ..., ale żeby automatycznie tekst został zawinięty do następnej linii.

Spędziłem nad tym cały dzień grzebiąc po necie i znalazłem 3 rozwiązania:

  1. Wstawić w tekst znacznik HTML
    - wolałbym jednak uniknąć tego rozwiązania bo jest kiepskie.

  2. Zmienić domyślny edytor komórki z JLabel na np. JTextArea funkcją:

public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected, int row, int column)
Niestety to nie działa u mnie, nie mam pojęcia dlaczego...

  1. Zmienić domyślny renderer komórki funkcją:

public Component getTableCellRendererComponent (JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column)
...podobnie jak wyżej, żadnych skutków to nie przynosi....

Może coś źle robię?
Dziękuję za pomoc.

0
  1. Zmienić domyślny edytor komórki z JLabel na np. JTextArea funkcją:

public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected, int row, int column)
Niestety to nie działa u mnie, nie mam pojęcia dlaczego...

Jak to nie działa? Musisz odziedziczyć klasę DefaultCellEditor i przedefiniować powyższą metodę, zeby zwracała JTextArea a zanim zwrócisz ten obiekt to ustaw mu zawijanie wierszy setLineWrapStyle(true) o ile dobrze pamiętam możesz też ustawić przenoszenie słów
jeżeli się nie mieszczą. Ale generalnie efekty tego będziesz widział tylko w przypadku edycji. Jeżeli również chcesz widzieć to zawijanie itd. to musisz w analoginczy sposób zdefiniować Renderera. Musisz też pamiętać o ustawianiu odpowiednich kolorów w przypadku isSelected i obramowania jeżeli hasFocus bo inaczej może wyglądać nie elegancko bo inaczej od pozostałych komórek. Drugim rozwiązaniem, o którym zresztą wspomniałeś jest zawarcie tekstu w znaczniki html jest to jakieś rozwiązanie bo domyslnym rendererem jest JLabel czy obiekt obsługujący html. Ale generalnie ładniejszym sposobem wydaje mi się ten pierwszy. Pozdr

0

Właśnie wolałbym by tekst w komórkach nie był ucinany, ale by słowo, które już się nie mieści było w całości przenoszone do nowej linii.
Mógłbyś wspomóc mnie kawałkiem działającego kodu? ;-)
Byłbym bardzo wdzięczny, bo ten problem nie daje mi już spokoju...

Dzięki i pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1