PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : JTextPane-Zeilenumbruch-Problem



SeeksTheMoon
31-01-2003, 16:32
Hi Leutz!

Ich hab bisher noch nie mit JTextPanes gearbeitet und damit ein kleines Problem:
Ich habe eine Anwendung mit einem JScrollPane und einem JPanel mit 2 Komponenten (einer JComboBox und ein JTextPane).
Also: ScrollPane beinhaltet Panel. Panel beinhaltet JComboBox und JTextPane.

Je nachdem, welchen Eintrag der Combobox ich wähle, erscheint im Textpane ein dazu einprogrammierter Text unterschiedlicher Länge.
Die Combobox soll oben sein, das Textpane darunter; ich verwende GridBagLayout.
Das war noch keine Herausforderung, aber das Dumme ist, dass der Text in dem JTextPane ein langer String ohne Zeilenumbruch ist.
Das heißt, dass das TextPane ca. 3000 Pixel breit wird und ich mit mir den Inhalt mit den waagrechten Scrollbar des ScrollPanes anschauen muss.
Ich will aber einen senkrechten Scrollbar; möglichst im TextPane

Das Textpane sollte also die Breite des Panels annehmen in dem es liegt (dessen Größe aber variieren kann, wenn man das gesamte Frame in der Größe verändert) und seinen Inhalt mit automatischen Zeilenumbrüchen versehen.
Die Größe der Combobox soll immer gleich groß sein.

Ich hab das bisher so gemacht:



this.comboBox = new JComboBox();
//diese füllen, Wert setzen, Listener setzen; hab ich hier rausgelassen

this.textPane = new JTextPane();
this.textPane.setText("hier kommt ein fetter String rein");
this.textPane.setEditable(false);
this.textPane.setAutoscrolls(true);

//LayoutManager
this.gbl = new GridBagLayout();
this.gbc = new GridBagConstraints();

this.setLayout(gbl);

//mit einem Abstand (Inset) von 5 in alle Richtungen für alle Komponenten
this.gbc.insets = new Insets(5, 5, 5, 5);
this.gbc.fill = GridBagConstraints.BOTH;
this.gbc.anchor = GridBagConstraints.WEST;
this.gbc.gridwidth = 1;
this.gbc.gridheight = 1;

//oben links die Combobox:
this.gbc.gridx = 0;
this.gbc.gridy = 0;
this.gbl.setConstraints(this.comboBox, this.gbc);

//darunter das Textpane
this.gbc.gridy = 1;
this.gbc.gridwidth = 2; //2, damit die Combobox nicht in die Länge gezogen wird
this.gbl.setConstraints(this.textPane, this.gbc);

this.add(this.comboBox);
this.add(this.textPane);


Was für Anweisungen fehlen, damit sich das Teil größtmöglich ausbreitet, scrollen kann und Zeilenumbruch macht?
Tutorials und API haben mir bisher nicht weitergeholfen.

thx

maceop
31-01-2003, 16:38
vielleicht hilft dir das ja weiter :

http://www.straub.as/java/swing/linewrapping2.html

SeeksTheMoon
31-01-2003, 17:57
ich kriegs nicht gebacken!

Das blöde Teil ist 10m breit und eine Zeile hoch!
Es soll sich aber nach unten ausbreiten und rechts maximal Fensterbreite annehmen...

SeeksTheMoon
31-01-2003, 22:06
daran lags:

this.textPane.setPreferredSize(new Dimension(550,430));
this.textPane.revalidate();

ohne diese beiden Zeilen sieht es einfach scheiße aus. Das hat jetzt ein paar Stunden gedauert um darauf zu kommen...