Swing ListCellRenderer + JTextArea + LineWrap

hdi

Top Contributor
Hallo,

Ich habe ein Problem mit der Darstellung einer JTextArea innerhalb einer JList. Der Renderer:

Java:
public class MyListRenderer implements ListCellRenderer{
	
	private JTextArea txt;

	public MyListRenderer () {
		txt = new JTextArea();
		txt.setLineWrap(true);
		txt.setWrapStyleWord(true);
	}

	@Override
	public Component getListCellRendererComponent(JList list,
			Object value, int index, boolean isSelected, boolean cellHasFocus) {
		txt.setText(value.toString());
		System.out.println(txt.getPreferredSize());
		return txt;
	}
}

Das Problem liegt nun im LineWrap: Dieses funktioniert zwar, allerdings passt sich die TextArea in ihrer Größe nicht an. Heißt: Wenn der Text umgebrochen wird auf 2 Zeilen, ist die TextArea trotzdem nur so hoch dass sie nur eine Zeile anzeigt. Wenn der Text Zeilenumbrüche (\n) enthält, passt sich die TextArea dahingegen an und wird höher.

Um herauszufinden was da los ist hab ich das obige sysout eingebaut. Und da kommen dann ganz seltsame Werte heruas, genauer ist der Wert für die Höhe irrsinnig hoch. Bei Text, der in eine Zeile passen würde liefert das schon 188 Pixel, bei Text der mittels Line-Wrap auf 4 Zeilen umgebrochen wird sind es fast 3000. Ja 3000, nicht 300.

Es stellen sich mir nun folgende Fragen: Wie errechnet sich denn bitte diese Höhe für die preferredSize? Und: Wie kommt's, dass der Renderer diese Größe gar nicht annimmt? Komisch finde ich halt vor allem dass es grundsätzlich bei mehreren Zeilen (per Zeilenumbruch) schon klappt , aber bei mehreren Zeilen die durch LineWrap verursacht sind kriegt er nix mit.. Wobei das ja anscheinend in die prefferedSize einfließt, die aber ignoriert wird.

Ideas?
 
Zuletzt bearbeitet:

hdi

Top Contributor
Ach du meine Güte... sieht ja schlimm aus :D Gut ich werd sehen ob ich's auf die List adaptieren kann. Danke!
 

hdi

Top Contributor
Hm das Beispiel tweakt zu krass an der Table rum. Viele entsprechende Einstellungsmöglichkeiten hab ich in der JList gar nicht. Ich hab jetzt noch etwas weiter recherchiert und mehr oder weniger ist die Antwort "Nicht möglich". Ich weiß ich könnte mir meine ganz eigene ScrollList programmieren, aber ich will noch nicht aufgeben.

Eine Idee für ein Workaround hätte ich: Ich kann mir die Anzeige-Größe der Liste (die ich ja mitbekomm in der Methode) abfragen, sowie den anzuzeigenden Text. Berücksichtigt man dann noch die FontMetrics kann man sich selbst ausrechnen wo er wrappt und die Größe manuell setzen. Und genau da scheiter ich jetzt wieder.

Ein
Code:
txt.setPreferredSize()
funktioniert zwar, d.h. damit kann ich pixelgenau die Höhe festlegen - lustigerweise aber nur beim ersten Call der Methode. Ich kann also die TextArea-Höhe einmalig festlegen und dann nicht mehr verändern. Was ja blöd ist, weil ich das ja zur Laufzeit abhängig von der Anzeigebreite der JList anpassen muss. Aber der Hammer kommt jetzt: Selbst wenn ich jedes mal eine neue Instanz der TextArea erzeuge, und der eine bestimmte Größe verpasse, bleibt es bei der alten Größe. Aber die kann man beim ersten Call beeinflussen. Wie auch immer die JList auf die Anzeige-Größe kommt, das muss ein riesen Chaos sein und ist für mich null nachvollziehbar.

Wer kriegt es hin, die Größe einer JTextArea in einer JList zur Laufzeit zu ändern?
 
V

vanny

Gast
Nur so eine Idee, schon mal versucht, ein JPanel als Container für die TextArea zu nutzen und das dann an die Liste zu geben?
Vielleicht kann der LayoutManager des Panels dein Problem beheben.

Zugegeben, ist nicht die feine englische aber könnte ja eine Möglichkeit sein.

Gruß Vanny
 

hdi

Top Contributor
Leider auch keine Chance :noe: Ich glaub das wird nix. Ich hab zwischenzeitlich noch etwas bei Google gefunden, das einleuchtet:

The paradox is that the JList expects the rendering components to report their size in order to determine the desired size of the JList, while the JTextArea requires sizing information in order to word-wrap.

Ich find's nur doof dass man die Größe nicht mal per Hand setzen kann..
 
V

vanny

Gast
Tjoa,

dann weg mit dem Renderer und pro Listenelement eine richtige Area erzeugen :autsch:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Swing Problem mit ListCellRenderer AWT, Swing, JavaFX & SWT 7
F ListCellRenderer mit JLabel und MouseListener AWT, Swing, JavaFX & SWT 4
B JList + ListCellRenderer AWT, Swing, JavaFX & SWT 5
frankred Swing Eigener ListCellRenderer D'n'D "MOVE" - Mauszeiger flackert AWT, Swing, JavaFX & SWT 14
hdi Swing ListCellRenderer und LookAndFeel AWT, Swing, JavaFX & SWT 11
H Swing ListCellRenderer einer JList zeichnet sporadisch falsch AWT, Swing, JavaFX & SWT 6
K Swing Schrift in Kopfzeile von JComboBox über ListCellRenderer ändern AWT, Swing, JavaFX & SWT 2
H JFormatterTextField und JButton in JList (ListCellRenderer) AWT, Swing, JavaFX & SWT 2
N JList (JXList) ListCellRenderer zur Laufzeit ändern (Anzeigefehler) AWT, Swing, JavaFX & SWT 6
GilbertGrape Kleinigkeit beim ListCellRenderer AWT, Swing, JavaFX & SWT 2
A ListCellRenderer und JScrollPane AWT, Swing, JavaFX & SWT 4
Tom299 JList ListCellRenderer wird überschrieben AWT, Swing, JavaFX & SWT 8
J problem mit ListCellRenderer und in der zeile ein Jbutton AWT, Swing, JavaFX & SWT 5
A JTabbedPane JList Listcellrenderer AWT, Swing, JavaFX & SWT 5
R JList + ListCellRenderer AWT, Swing, JavaFX & SWT 1
T Swing Mehrere Ausgaben in JTextArea AWT, Swing, JavaFX & SWT 2
B JPanel-Inhalte inkl. JTextarea zoomen? AWT, Swing, JavaFX & SWT 3
P JTextarea (in JScrollPane) zeigt nur die beiden letzten Einträge an? AWT, Swing, JavaFX & SWT 0
RedEagle Swing JTextArea ist leer AWT, Swing, JavaFX & SWT 13
E Warum wird Text im JTextArea erst am Programmende angezeigt ? AWT, Swing, JavaFX & SWT 1
E wie in JScrollPane auf JTextArea zugreifen AWT, Swing, JavaFX & SWT 12
K Swing 2 JTextArea parrallel scrollable AWT, Swing, JavaFX & SWT 16
Hatsi09 JTextArea Inhalt verlinken AWT, Swing, JavaFX & SWT 4
ralfb1105 jTextArea Scrollbar hinzufügen - mit Jigloo erstellt AWT, Swing, JavaFX & SWT 7
S Ausgabe in JTextArea AWT, Swing, JavaFX & SWT 13
H JTextArea - farbige Zeilen .. bitte um Vorschläge zur Implementierung AWT, Swing, JavaFX & SWT 1
F 2D-Grafik JTextArea drucken bringt mieses Ergebnis AWT, Swing, JavaFX & SWT 2
Mario1409 Swing JTextArea scroll Problem AWT, Swing, JavaFX & SWT 0
Bluedaishi JTextArea gefundene Zeile nach Oben Scrollen AWT, Swing, JavaFX & SWT 13
S JTextArea Text nach oben wandern lassen AWT, Swing, JavaFX & SWT 7
Bluedaishi JtextArea AWT, Swing, JavaFX & SWT 6
V JScrollBar soll weiterscrollen, wenn Inhalt von JTextArea erweitert wird AWT, Swing, JavaFX & SWT 7
G JTextArea mit JScrollPane wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
Bluedaishi JDialog modal und JTextArea AWT, Swing, JavaFX & SWT 4
F JTextarea Steuern ~ consolenanbindung AWT, Swing, JavaFX & SWT 5
F Event Handling JTextArea auf bestimmte Eingabe reagieren (Return-Taste) AWT, Swing, JavaFX & SWT 2
F JTextArea hat keinen Rahmen AWT, Swing, JavaFX & SWT 10
N JTextArea Events weiterleiten AWT, Swing, JavaFX & SWT 3
R JTextArea mit verschiedenen Textfarben AWT, Swing, JavaFX & SWT 6
M JTextArea wird nicht aktualisiert (ActionListener-Problem) AWT, Swing, JavaFX & SWT 1
HoloYoitsu jTextArea.setCaretPosition(); What am I doing wrong? AWT, Swing, JavaFX & SWT 0
S Zeilenumbruch jTextArea mit toString AWT, Swing, JavaFX & SWT 2
F Swing String[] in JTextArea ausgeben. Jeder Eintrag in neue Zeile, aber ohne "\n"- Geht das? AWT, Swing, JavaFX & SWT 3
M JTextArea - Leertaste "sperren" AWT, Swing, JavaFX & SWT 1
S Inhalt der Java-Konsole in die JTextArea AWT, Swing, JavaFX & SWT 3
M Swing JTextArea mit ScrollBar AWT, Swing, JavaFX & SWT 9
S Swing Zahl der Zeilenumbrüche in einer JTextArea bestimmen AWT, Swing, JavaFX & SWT 1
F Swing Caret in JTextArea vergrößern AWT, Swing, JavaFX & SWT 2
D JTextArea auf KeyListener Command AWT, Swing, JavaFX & SWT 6
N JFrame änliches wie JTextArea? AWT, Swing, JavaFX & SWT 2
A Swing JTextArea - Multi-Line-Editing AWT, Swing, JavaFX & SWT 2
A Swing JTextArea aus anderer Klasse in realtime aktualisieren AWT, Swing, JavaFX & SWT 3
O JTextArea befüllen AWT, Swing, JavaFX & SWT 2
G JTextArea on the fly aus anderem Programm befüllen AWT, Swing, JavaFX & SWT 4
A Swing Einrücken mehrerer Zeilen per Tab in einem JTextPane/JTextArea AWT, Swing, JavaFX & SWT 3
T Swing Ausgabe aus ArrayList in Klasse1 in jTextArea in Klasse2 AWT, Swing, JavaFX & SWT 2
B JTextArea Größe an Container anpassen AWT, Swing, JavaFX & SWT 2
B Drucken der JTextArea AWT, Swing, JavaFX & SWT 4
M JTextArea Zeile hinzufügen AWT, Swing, JavaFX & SWT 4
C JTextArea scrollt bei append(String) aus Threads nicht ans Ende AWT, Swing, JavaFX & SWT 7
P JPanel- Listener durch JTextArea aktivieren AWT, Swing, JavaFX & SWT 8
A JTextArea - Zeichenbegrenzung nach .txt Datei import AWT, Swing, JavaFX & SWT 6
M Swing JScrollPane (Parent JTextArea) aktualisieren + neue Zeile AWT, Swing, JavaFX & SWT 5
Hoppelmann Swing Tasten in JTextArea blockieren AWT, Swing, JavaFX & SWT 2
S JTextArea Tastaturanschläge AWT, Swing, JavaFX & SWT 2
E Swing JTextArea in JFrame, wie nun WindowFocusListener implementieren? AWT, Swing, JavaFX & SWT 2
S Problem mit JButton und JTextArea AWT, Swing, JavaFX & SWT 2
J Swing Mitwachsende JTextArea+ JPanel AWT, Swing, JavaFX & SWT 4
P Swing JtextArea füllen mit setText AWT, Swing, JavaFX & SWT 7
M Probleme mit der Selektion einer JTextArea AWT, Swing, JavaFX & SWT 3
T Die Größe einer JTextArea an Ihren Parent JPanel anpassen. AWT, Swing, JavaFX & SWT 5
T ComponentOrientation in JTextArea AWT, Swing, JavaFX & SWT 3
H Hintergrundbild in jTextArea AWT, Swing, JavaFX & SWT 4
G Swing JTextArea mit fester Anzahl Spalten! AWT, Swing, JavaFX & SWT 10
G ein JTextArea in zwei JPanels AWT, Swing, JavaFX & SWT 2
L JTextArea mit JScrollPane AWT, Swing, JavaFX & SWT 7
padde479 Swing replace JTextArea funktioniert nicht AWT, Swing, JavaFX & SWT 2
L Zeilenumbrüche aus JTextArea MIT in Textdatei schreiben AWT, Swing, JavaFX & SWT 4
_dp jTextArea/jTextPanel Auto Höhe AWT, Swing, JavaFX & SWT 5
Ollek JTextArea - Feste Zeilenanzahl(8 Zeilen) AWT, Swing, JavaFX & SWT 3
S Swing JTextArea während der Laufzeit füllen AWT, Swing, JavaFX & SWT 5
Ollek Text in JTextField und JTextArea zur Laufzeit ändern AWT, Swing, JavaFX & SWT 6
P Datenelement anderer Klasse in JTextArea ausgeben AWT, Swing, JavaFX & SWT 4
P Scrollbar JTextArea AWT, Swing, JavaFX & SWT 23
M Swing Ausgabe in JTextArea verzögern AWT, Swing, JavaFX & SWT 7
T Swing jTextArea soll sich der Fenstergröße anpassen beim ziehen?? AWT, Swing, JavaFX & SWT 2
S System.out in JTextArea AWT, Swing, JavaFX & SWT 4
S Swing JTextArea - Bild auf/ab Tasten implementieren AWT, Swing, JavaFX & SWT 4
J JTextArea verschwindet bei resize vom JFrame AWT, Swing, JavaFX & SWT 2
VfL_Freak "setAccelerator/KeyStroke" bei JTextArea ? AWT, Swing, JavaFX & SWT 6
P Swing JTextArea - beim neuzeichnen bleibt manchmal weißer Kasten AWT, Swing, JavaFX & SWT 10
Dit_ JTextArea zu Zeile X scrollen AWT, Swing, JavaFX & SWT 4
H variable Höhe einer JTextArea (als Renderer/Editor) als Zelle einer JTable AWT, Swing, JavaFX & SWT 9
B Wechsel JTextArea und JComponent AWT, Swing, JavaFX & SWT 9
M [erledigt] Bestimmte Zeile aus JTextArea löschen AWT, Swing, JavaFX & SWT 3
G Swing JTable und JTextArea synchronisieren AWT, Swing, JavaFX & SWT 2
C JLabel, JTextArea, JScrollPane. repaint(); ? AWT, Swing, JavaFX & SWT 6
M JTextArea AWT, Swing, JavaFX & SWT 2
E Swing JTextArea Alternative? AWT, Swing, JavaFX & SWT 5
A Swing JTextArea über Frame hinaus anzeigen? AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben