Swing JTextPane bei Größenänderung Formatierung behalten

XS1NDL

Mitglied
Hey ihr,

steh vor einem Problem und hab bisher trotz langer Suche nix zu meinem Problem gefunden.

Mein Problem ist, das ich ein JScrollPane habe, dem ich im Konstruktor das JTextPane übergebe:

Java:
JTextPane textarea;
JScrollPane scrollPane;
.
.
scrollPane = new JScrollPane(textarea);
this.getContentPane().add(BorderLayout.CENTER,scrollPane);

Klappt fast alles wie es soll, automatische vertikale Scrollbar, Zeilenumbruch...

Mein Problem ist, dass wenn ich das JFrame vergrößere "verhaut" es mir die Formatierung, sprich wo bisher der autom. Zeilenumbruch war zieht der die Wörter aus der nächsten Zeile nach.

Beim Verkleinern das selbe Spiel, beim vorhandenen Text wird autom. ein Zeilenumbruch gemacht.

Ich stell mir das aber so vor, dass er beim Vergrößern des Frames eben alle Zeilenumbrüche so lässt wie sie sind, und beim Verkleinern falls nötig die Horizontale Scrollbar aktiviert und keinen Zeilenumbruch macht.

Hoffe Ihr könnt mir unter die Arme helfen..

Mfg

XS1NDL

P.s.:
Hier der komplette Code von dem Frame:

Java:
package gui;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;

public class EditorWindow extends JFrame{

	private static final long serialVersionUID = 1L;
	private JTextPane textarea;
	private JScrollPane scrollPane;
	private int x=50;
	private int y=50;
	private int height,width;
	public EditorWindow(int width, int height){
		this.width=width;
		this.height=height;
		initWindow();
		initComp();
	}
	private void initWindow() {
		this.setBounds(x, y, width, height);
		this.setMinimumSize(new Dimension(width,height));
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setLayout(new BorderLayout());
		this.setJMenuBar(new EditorMenu());
	}
	private void initComp() {
		int i=0;
		textarea=new JTextPane();
		textarea.addComponentListener(new ComponentListener() {
			
			@Override
			public void componentShown(ComponentEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void componentResized(ComponentEvent e) {
			
				System.out.println("resize");
			}
			
			@Override
			public void componentMoved(ComponentEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void componentHidden(ComponentEvent e) {
				// TODO Auto-generated method stub
				
			}
		});
		scrollPane = new JScrollPane(textarea);
		this.getContentPane().add(BorderLayout.CENTER,scrollPane);
	}
}
 

jgh

Top Contributor
Dein "Problem" lässt sich -wenn ich es denn richtig verstanden habe ;)- relativ einfach lösen.
Das BorderLayout gibt der Center-Komponente den gesamten Platz, der zur Verfügung steht. In den 4 anderen Bereichen werden die Komponenten entsprechend ihrer Größe, bzw. der preferredSize angezeigt.

Wenn du also die JTextPane in den Westen, Norden, Süden, oder Osten legst...eine preferredSize mitgibst, dann sollte -zumindest meine Interpretation deines Wunsches- klappen.
Die preferredSize für die TextPane habe ich hier einfach um 18 verkleinert, damit die Scrollbalken entsprechend angezeigt werden...ohne weitere Überprüfung.
Auf das notwendigste gekürzt:

Java:
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;

public class EditorWindow extends JFrame {
	public static void main(String[] args) {
		new EditorWindow(500, 500).setVisible(true);
	}

	private static final long serialVersionUID = 1L;
	private JTextPane textarea;
	private JScrollPane scrollPane;
	private int x = 50;
	private int y = 50;
	private int height, width;

	public EditorWindow(int width, int height) {
		this.width = width;
		this.height = height;
		initWindow();
		initComp();
	}

	private void initWindow() {
		this.setBounds(x, y, width, height);
		this.setMinimumSize(new Dimension(width, height));
		this.setMaximumSize(new Dimension(width, height));
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setLayout(new BorderLayout());
	}

	private void initComp() {
		textarea = new JTextPane();
		textarea.setPreferredSize(new Dimension((width - 18), height));
		scrollPane = new JScrollPane(textarea);
		add(BorderLayout.NORTH, scrollPane);
	}
}
 

XS1NDL

Mitglied
Guten Morgen,

danke schonmal für die schnelle Antwort. Wenn ich deinen Code so übernehme, passiert leider noch genau das gleiche bei mir, wobei ich mir gut vorstellen kann, dass es etwas mit der preferred size zu tun hat.

Bei dem Code von dir erscheint nur beim vergrößern unterhalb des textpanes grauer balken, sprich dort endet die Textarea.

Wenn ich jedoch das Fenster horizontal vergrößerer, verhaut er mir wieder die Zeilenumbrüche.

Hier zwei Bilder die das Problem zeigen, ein manueller Zeilenumbruch wird beibehalten:

bildschirmfoto20110815u.png


und nach Strecken des Fensters:

bildschirmfoto20110815u.png


MFG

XS1NDL
 

jgh

Top Contributor
ändere mal [java=38] add(BorderLayout.WEST, scrollPane);[/code] auf West, oder East....dann sollte es passen!
 

XS1NDL

Mitglied
Dann sieht es wie folgt aus:

bildschirmfoto20110815u.png


Die Lösung ist wahrscheinlich so simpel :(

Er soll die Größe von dem JTextPane schon auch mit vergrößern, nur halt die formatierung beibehalten.

Gruß XS1NDl
 

xehpuk

Top Contributor
So etwas in der Art?

Java:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Insets;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.SwingUtilities;

public class Main {
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				final JTextPane textPane = new JTextPane() {
					private final int width = 200;

					@Override
					public Insets getMargin() {
						final Insets margin = super.getMargin();
						if (margin != null)
							return new Insets(margin.top, margin.left, margin.bottom, getWidth() - width - margin.right);
						else
							return new Insets(2, 2, 2, getWidth() - width - 2);
					}

					@Override
					public Dimension getPreferredSize() {
						final Dimension preferredSize = super.getPreferredSize();
						return new Dimension(width, preferredSize.height);
					}
				};
				textPane.setText("Lorem ipsum dolor sit amet, consectetur adipisici elit, "
						+ "sed eiusmod tempor incidunt ut labore et dolore magna aliqua. "
						+ "Ut enim ad minim veniam, quis nostrud exercitation ullamco "
						+ "laboris nisi ut aliquid ex ea commodi consequat. Quis aute "
						+ "iure reprehenderit in voluptate velit esse cillum dolore eu "
						+ "fugiat nulla pariatur. Excepteur sint obcaecat cupiditat non "
						+ "proident, sunt in culpa qui officia deserunt mollit anim id est laborum.");
				final JPanel panel = new JPanel(new BorderLayout());
				panel.add(textPane);
				final JScrollPane scrollPane = new JScrollPane(panel);
				final JFrame frame = new JFrame();
				frame.setContentPane(scrollPane);
				frame.setSize(300, 300);
				frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				frame.setLocationRelativeTo(null);
				frame.setVisible(true);
			}
		});
	}
}
 

XS1NDL

Mitglied
Fast...Wenn ich deinem Beispiel jetzt das Fenster vergößere und dann weiter schreib, macht er immer noch dort Zeilenumbrüche wo er sie vorher auch gemacht hat, soll sie aber nun dort machen wo das fenster aufhört...
 

bERt0r

Top Contributor
JTextArea.setLineWrap(true);

Java:
import javax.swing.JFrame;
import javax.swing.JTextArea;


public class TextAreaTest extends JFrame{
	
	public TextAreaTest()
	{
		JTextArea textpane=new JTextArea();
		textpane.setLineWrap(true);
		textpane.setText("JUHUUUUUUUUUUUUUUUUUUUUUUUUUU ICH BIN EIN LAAAAAAANGER TEXT JAWOHL");
		this.add(textpane);
		this.setSize(100,100);
		this.setVisible(true);
	}
	
	public static void main(String args[])
	{
		new TextAreaTest();
	}

}
 

bERt0r

Top Contributor
Komisch, ich kann deinen Fehler nicht nachreproduzieren, vielleicht Betriebssystemspezifischer Bug?
Versuch mal in deinen ComponentListener ein revalidate() reinzupacken

Meine güte, ich denk grad voll an dir vorbei. Du willst zwar das Textpane vergrößern aber die automatischen Zeilenumbrüche behalten. Das wird wohl nicht funktionieren, es sei denn du fügst manuell welche ein.
Aber wieso setzt du nicht einfach eine MaximumSize für deine Textpane?
 

XS1NDL

Mitglied
Ich weiß nicht, wollte eigentlich die größe dynamisch machen, aber werd mich wohl damit abfinden dass das nicht so geht wie ich will.

Alternativ müsste es doch gehen, dass ich die vorhandenen(auch die autom) Zeilenumbrüche auslese, und beim ComponentChangeListener einfach in der resize-methode neu setzte?

Gruß XS1NDL
 

xehpuk

Top Contributor
Fast...Wenn ich deinem Beispiel jetzt das Fenster vergößere und dann weiter schreib, macht er immer noch dort Zeilenumbrüche wo er sie vorher auch gemacht hat, soll sie aber nun dort machen wo das fenster aufhört...
Hmm. Dann verstehe ich nicht wirklich, was du möchtest. Ändert man die Größe des TextPane, dann soll die Formatierung erhalten bleiben? Aber wenn man dann den Inhalt ändert, soll der Text an die neue Größe angepasst werden? Wozu?

Ansonsten etwa noch einen DocumentListener in mein Beispiel einbauen und dadurch width verändern.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Stylen eines JTextPane funktioniert nicht AWT, Swing, JavaFX & SWT 1
T JTextPane ignoriert HTML Zeilenumbruch <br> tag wegen eigenem HTMLEditorKit AWT, Swing, JavaFX & SWT 5
J Swing JTextpane aktuallisiert nicht den setText? AWT, Swing, JavaFX & SWT 9
M Strings im JTextPane vergleichen und mit StyledDocument formatieren AWT, Swing, JavaFX & SWT 3
X JTextPane automatischer Zeilenumbruch IM Wort AWT, Swing, JavaFX & SWT 2
R GUI Element in einer Methode aktualisieren (JTextPane) AWT, Swing, JavaFX & SWT 13
M Swing JTextPane, Bilder und Text-flow AWT, Swing, JavaFX & SWT 2
D Swing Breite einer HTML Tabelle in einer JTextPane AWT, Swing, JavaFX & SWT 6
S Swing Warum funktioniert der automatische Zeilenumbruch mit arabischen Zeichen beim JTextPane nicht AWT, Swing, JavaFX & SWT 3
S Swing JtextPane sau langsam AWT, Swing, JavaFX & SWT 15
J Swing JTextPane mit JScrollPane auf JPanel scrollen nicht AWT, Swing, JavaFX & SWT 6
C JTextPane scrollt mit setText() immer nach oben AWT, Swing, JavaFX & SWT 2
S Swing Style Attribute aus JTextPane kopieren AWT, Swing, JavaFX & SWT 1
E JTextPane Focus AWT, Swing, JavaFX & SWT 1
TheJavaKid JTextPane: komplexe Formatierung (links) AWT, Swing, JavaFX & SWT 2
B Swing JTextPane - Einfärbungen auf "default" AWT, Swing, JavaFX & SWT 2
A Swing Einrücken mehrerer Zeilen per Tab in einem JTextPane/JTextArea AWT, Swing, JavaFX & SWT 3
T JtextPane Zeile aktualisieren AWT, Swing, JavaFX & SWT 3
T Hintergrundbild in JTextPane fixieren AWT, Swing, JavaFX & SWT 2
M Swing JTextPane frisst Anführungszeichen AWT, Swing, JavaFX & SWT 2
M Swing JTextPane + Scrollbar = Fragen AWT, Swing, JavaFX & SWT 15
H Swing JTextPane hat unästhetisches Scrollbar AWT, Swing, JavaFX & SWT 3
R Swing Renderproblem bei HTML in einer JTextPane AWT, Swing, JavaFX & SWT 12
N Swing JTextPane zur Anzeige von HTML AWT, Swing, JavaFX & SWT 2
E Swing jTextPane Text datei anzeigen AWT, Swing, JavaFX & SWT 7
xehpuk Swing Line-wrapping von JTextPane (in JScrollPane) AWT, Swing, JavaFX & SWT 3
Tobse Swing [JTextPane] Farbliche Hervorhebung AWT, Swing, JavaFX & SWT 9
0 JTextPane copy/paste trotz editable(false) ? AWT, Swing, JavaFX & SWT 10
T Swing JTextPane Tastatureingabe abfangen AWT, Swing, JavaFX & SWT 4
B Durchsichtiges JScroll und JTextPane AWT, Swing, JavaFX & SWT 4
xehpuk Swing JTextPane in JScrollPane wird nicht ordentlich neugezeichnet AWT, Swing, JavaFX & SWT 3
S Swing JTextPane append formatprobleme AWT, Swing, JavaFX & SWT 5
C JTextPane / JEditorPane ohne Keywords farbig machen AWT, Swing, JavaFX & SWT 4
C Zeilenumbruch von JTextPane wird nicht erkannt AWT, Swing, JavaFX & SWT 2
S JEditorPane oder JTextPane? AWT, Swing, JavaFX & SWT 2
P Aktuelle Zeile in JTextPane farblich hervorheben AWT, Swing, JavaFX & SWT 3
J JTextPane Background setzen AWT, Swing, JavaFX & SWT 6
T Text in JTextPane vertikal (!) zentrieren AWT, Swing, JavaFX & SWT 4
M Zugriff paralleler Threads auf selbes JTextPane AWT, Swing, JavaFX & SWT 6
M JTextPane - bewegungsloses Hintergrundsbild (Duplikat) AWT, Swing, JavaFX & SWT 2
B JTextPane formatierten Inhalt speichern AWT, Swing, JavaFX & SWT 2
E JTextPane setText ignoriert \n AWT, Swing, JavaFX & SWT 6
P Swing Sichtbaren teil eines JTextPane herausbekommen (mit JScrollPane) AWT, Swing, JavaFX & SWT 2
C Swing JTextPane zeigt HTML-Text aus Variable nicht an :( AWT, Swing, JavaFX & SWT 3
T Zeichen zählen JTextPane AWT, Swing, JavaFX & SWT 4
K Swing JTextPane Formatierungen SyntaxHighlighting AWT, Swing, JavaFX & SWT 11
F Mit TAB JTextPane wechseln AWT, Swing, JavaFX & SWT 5
J JSlider auf JTextPane? AWT, Swing, JavaFX & SWT 2
S Buchstabenpositionen in JTextPane erhalten..? AWT, Swing, JavaFX & SWT 5
I JTextPane und Hyperlink (ohne JEditorPane) AWT, Swing, JavaFX & SWT 5
T Swing JTextArea, JTextPane, JEditorPane...Unterschied?! AWT, Swing, JavaFX & SWT 3
A Swing JTextPane sehr langsam AWT, Swing, JavaFX & SWT 6
P Drucken von Jtextpane mit Seitenangabe AWT, Swing, JavaFX & SWT 1
M Swing JTextPane mit JScrollPane soll aussehen wie JLabel AWT, Swing, JavaFX & SWT 3
A JTextPane: Text hinzufügen AWT, Swing, JavaFX & SWT 9
E Swing JTextPane Inhalt(Text und Bilder) als HTML text bekommen AWT, Swing, JavaFX & SWT 3
K Swing jTextPane zeilenumbruch AWT, Swing, JavaFX & SWT 2
Stillmatic JTextPane langsam? AWT, Swing, JavaFX & SWT 5
E Swing JTextPane linewrap AWT, Swing, JavaFX & SWT 4
M Swing [JTextPane] Cursor lässt sich nicht mit Pfeiltasten bewegen AWT, Swing, JavaFX & SWT 3
T Swing xml in JTextPane mit EditorKit, StyledDocument & co. AWT, Swing, JavaFX & SWT 3
M Cursor setzen im JTextPane AWT, Swing, JavaFX & SWT 3
M Formatierungsfehler JTextPane WARUM ?? AWT, Swing, JavaFX & SWT 4
JavaKaffee Array auslesen in jTextPane? AWT, Swing, JavaFX & SWT 9
E JTextPane Bold Italic und Co AWT, Swing, JavaFX & SWT 6
M JTextPane Ende des Feldes AWT, Swing, JavaFX & SWT 4
D JTextPane - Text andersfarbig unterstreichen AWT, Swing, JavaFX & SWT 7
P Probleme mit JTextpane AWT, Swing, JavaFX & SWT 7
M Größe von JTextPane manuell bei Bedarf anpassen AWT, Swing, JavaFX & SWT 6
bugmenot JTextPane String stimmt nicht mit übergebenem String überein AWT, Swing, JavaFX & SWT 9
C JTextPane <br oder <p> statt \n AWT, Swing, JavaFX & SWT 2
C JTextPane HTML und eigene Tags AWT, Swing, JavaFX & SWT 10
G JTextPane durchsichtig? AWT, Swing, JavaFX & SWT 6
GilbertGrape Fehler bei HTML in JTextPane AWT, Swing, JavaFX & SWT 2
S JTextPane: Probem mit AlignmentAction AWT, Swing, JavaFX & SWT 3
J Problem mit JTextPane & JScrollPane (horizontal) AWT, Swing, JavaFX & SWT 3
B JTextPane und Image importieren in HTML String. AWT, Swing, JavaFX & SWT 2
J JTextPane mit genau 80 Zeichen breite definieren? AWT, Swing, JavaFX & SWT 3
J Html in JTextPane anzeigen? AWT, Swing, JavaFX & SWT 2
Steev JTextPane mit Textformatierung funktioniert nicht AWT, Swing, JavaFX & SWT 5
S JTextPane - markierten Text Formatieren AWT, Swing, JavaFX & SWT 11
P HTMLDocument in einem JTextPane. Anhängen von HTML-Code AWT, Swing, JavaFX & SWT 2
M Makierten Text in JTextPane zentrieren AWT, Swing, JavaFX & SWT 2
F JTextPane aktive Zeile AWT, Swing, JavaFX & SWT 2
G insert & JTextPane AWT, Swing, JavaFX & SWT 4
J JTextPane bekommt keinen Focus! AWT, Swing, JavaFX & SWT 3
S Farben eienr JTextPane dynamisch zuweisen AWT, Swing, JavaFX & SWT 2
R JTextPane scrollen vermeiden AWT, Swing, JavaFX & SWT 2
B Feste Breite einer JTextPane, die HTML anzeigt AWT, Swing, JavaFX & SWT 8
A JScrollPane in JTextPane AWT, Swing, JavaFX & SWT 2
B Swing Logging: Ein/Ausblenden eines scrollenden JTextPane AWT, Swing, JavaFX & SWT 2
F Java JTextPane AWT, Swing, JavaFX & SWT 13
Saxony JTextPane - letzte Zeile löschen AWT, Swing, JavaFX & SWT 4
TheJavaKid LineWrap & WrapStyleWord in JTextPane AWT, Swing, JavaFX & SWT 3
G Zeilenabstand bei HTML-Texten in JLabel/JTextPane AWT, Swing, JavaFX & SWT 7
O Swing Xml highlightning mit JTextPane und Regular expressions AWT, Swing, JavaFX & SWT 5
J JTextPane Alignment AWT, Swing, JavaFX & SWT 6
Y entfernten String einer JTextPane per DocumentListener AWT, Swing, JavaFX & SWT 5
B Ein großes JTextPane komplett drucken AWT, Swing, JavaFX & SWT 2
7 Latex/MathML Code in JTextPane AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben