Swing JtextPane sau langsam

Sinus

Aktives Mitglied
Hallo,

in ein JTextPane Array mit 10000 Elementen möchte mittels .setText "hello world!" schreiben.
Leider ist die Performance sehr bescheiden. Es MUSS JTextPane sein, da ich den Text stylen bzw.
formatieren will. Hier ein Beispielcode:






Java:
	import javax.swing.*;
	import javax.swing.text.*;
	
	public class JTextPaneTest {
	JTextPane [] textPane = new JTextPane[10000];		
	
	JTextPaneTest() {			    
	        for(int i=0;i<textPane.length;i++) {
		        textPane[i] = new JTextPane();
		        textPane[i].setText("Hello world!");
	        }				
        }   	
	public static void main(String[] args) {
	        float startTime = System.nanoTime();
		new JTextPaneTest();
		float stopTime = System.nanoTime() - startTime;
		System.out.println("elapsed time: "+stopTime/1000000000+ "s");
	}}

Habt ihr vielleicht Ideen oder alternative Vorschläge, wie ich die Performance verbessern kann?

Vielen Dank
SinuS
 
Zuletzt bearbeitet:

VfL_Freak

Top Contributor
Moin,

10000 Panes ????? :shock:

Wohin addest Du die denn überhaupt?
Erklär' mal verständlich, was Du eigentlich vorhast !!

Gruß
Klaus
 

diggaa1984

Top Contributor
Vielleicht hilft dir das Konzept des Document weiter: Document (Stichwort Element)

Pane brauchst du dafür nur eins, denn das zeigt dein Document mit den ganzen verschiedenen Elementen an
 
Zuletzt bearbeitet:

Thallius

Top Contributor
mit Graphics.drawString() kannst du den Text genauso formatieren und stylen. Sogar noch viel genauer uns besser. Und es dürfte viel viel schneller sein.

Gruß

Claus
 

Sinus

Aktives Mitglied
Hallo VFL Freak,

ok ich erkläre es:
ich habe eine txt Datei mit ca. 7000 Zeilen. Diese habe ich zunächst in ein String Array mit 7000 Elementen geladen bzw. gespeichert.
Nun möchte diese in einer Tabelle darstellen. Vorher habe ich das mit JTable gemacht, aber da das
ein Krampf ist mit JTable zu arbeiten, habe ich beschlossen eine künstliche Tabelle zu layouten.
Deswegen habe ich mit GridBagLayout eine Tabelle erstellt und in jedes Gridbag ein JTextPane eingebettet.
Logischeweise ist das JTextPane ebenfalls ein Array mit 7000 Elementen und möchte in jedes JTextPane Element das im Sring Array befindliche Array Element einbetten.
 
Zuletzt bearbeitet:

Sinus

Aktives Mitglied
@diggaa1984

danke für den Tipp, ich habe es gleich ausprobiert. Es ist auch in der Tat deutlich schneller

Java:
	import javax.swing.*;
        import javax.swing.text.*;

	public class JTextPaneTest {
		JTextPane textPane = new JTextPane();		
		Document [] doc = new DefaultStyledDocument[10000];
		
		JTextPaneTest() {			    
			for(int i=0;i<doc.length;i++) {
				doc[i] = new DefaultStyledDocument();
				try {
					doc[i].insertString(0, "hello world!", null);
				} catch (BadLocationException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				textPane.setDocument(doc[i]);
			}				
		}
		
		public static void main(String[] args) {
			System.out.println("start...");
			float startTime = System.nanoTime();
			new JTextPaneTest();
			float stopTime = System.nanoTime() - startTime;
			System.out.println("elapsed time: "+stopTime/1000000000+ "s");
		}
	}

Das Problem ist nur, dass ich dann nur ein Pane habe (siehe Beitrag von 15:05).
Wahrscheinlich muss ich mein Konzept überdenken :(
 

Sinus

Aktives Mitglied
@Thallius,

mit Graphics.drawString() habe ich noch keine Erfahrung. Hättest du vielleicht ein simples Beispiel?
Sonst google ich mal danach

Vielen Dank!
SinuS
 

Thallius

Top Contributor
Ne wenn dir JTable schon zu kompliziert ist, dann würde ich das lassen :)

JTable ist nun wirklich absolut easy going.

Gruß

Claus
 

dzim

Top Contributor
Fällt noch jemanden das Stichwort "Asynchronität" ein. Wäre IMHO bei solch größeren Jobs ja recht sinnvoll... Wobei ich immer noch nicht ganz verstehe, warum der TO das macht. Kann mir wer den tieferen Sinn erklären? Nicht bös' gemeint, aber ich blick's wirklich nicht.

Für mich klingt's im Moment nach einem Nachbau von etwas á la StyledText (SWT)
(siehe Help - Eclipse Platform )

Oder JavaFX
(siehe java - Styled text in JavaFX? - Stack Overflow - WebView/HTMLEditor,
https://wikis.oracle.com/display/OpenJDK/Rich+Text+API+Details ,
https://docs.oracle.com/javase/8/javafx/api/javafx/scene/text/TextFlow.html )
 

Sinus

Aktives Mitglied
Kann mir wer den tieferen Sinn erklären? Nicht bös' gemeint, aber ich blick's wirklich nicht.

eigentlich will ich nur die 7000 Datensätze, welche in einem String Array gespeichert sind, als Liste dargestellt haben.
Klar kann man das mit JList oder JTable machen, aber dann kann ich den Text nicht wirklich stylen. Aus diesem
Grund habe ich ein Array mit JTextPane erstellt und die dann in ein GridBagLayout eingebettet. Das ist alles.
 

Sinus

Aktives Mitglied
ich habe jetzt nochmal alles überdacht und überarbeitet. Funktioniert auch ganz gut.
Mein Code sieht jetzt so aus:
Java:
	import java.awt.BorderLayout;
	import javax.swing.*;
	import javax.swing.text.*;
	
	public class JTextPaneTest {
		JTextPane textPane = new JTextPane();
		Document doc = new DefaultStyledDocument();
		
		//constructor
		JTextPaneTest() {			    
			for(int i=0;i<10000;i++) {
				try {
					doc.insertString(doc.getLength(), i+" hello world!", null);
				} catch (BadLocationException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}				
			}
			textPane.setDocument(doc);
			createWindow();
		}
		
		public void createWindow() {
			JFrame frame = new JFrame();
		    frame = new JFrame("frame");     
		    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		    frame.setSize(400, 300);
		    frame.setLocationRelativeTo(null);
		    frame.getContentPane().add(new JScrollPane(textPane), BorderLayout.CENTER);
		    frame.setVisible(true);			
		}
		
		public static void main(String[] args) {
			System.out.println("start...");
			float startTime = System.nanoTime();
			new JTextPaneTest();
			float stopTime = System.nanoTime() - startTime;
			System.out.println("elapsed time main: "+stopTime/1000000000+ "s");
		}
	}

Das klappt wunderbar, eigentlich reicht mir das auch schon so in der Art aus. Nur habe ich jetzt
einen großen Unterschied zwischen i+" hello world!" und i+" hello world!\n" in Zeile
14 festgestellt. Mit der zweiten Variante ist der Code um ein vielfaches schneller. Warum ist das so?
Liegt das am Rendering?
 

Thallius

Top Contributor
eigentlich will ich nur die 7000 Datensätze, welche in einem String Array gespeichert sind, als Liste dargestellt haben.
Klar kann man das mit JList oder JTable machen, aber dann kann ich den Text nicht wirklich stylen. Aus diesem
Grund habe ich ein Array mit JTextPane erstellt und die dann in ein GridBagLayout eingebettet. Das ist alles.

Sorry aber das ist doch murks was du da erzählst. Man nehme einen eigenen Renderer und dann kannst du bei JTable auch Sternchen und Weihnachsglocken um Deine Schrift malen.

Gruß

Claus
 

Sinus

Aktives Mitglied
Sorry aber das ist doch murks was du da erzählst. Man nehme einen eigenen Renderer und dann kannst du bei JTable auch Sternchen und Weihnachsglocken um Deine Schrift malen.

ja mit einem Renderer und allem pipapo geht alles... mit JTextPane geht das Stylen viel einfacher. Außerdem
ist die Neuskalierung bzw. Größenanpassung bei Änderung der Fenstergröße viel angenehmer.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Swing JTextPane sehr langsam AWT, Swing, JavaFX & SWT 6
Stillmatic JTextPane langsam? AWT, Swing, JavaFX & SWT 5
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
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
X Swing JTextPane bei Größenänderung Formatierung behalten AWT, Swing, JavaFX & SWT 11
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
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
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