# JTextPane Problem



## userc45 (4. Jan 2007)

Hallo,

ich habe eine JTextPane in die ich verschieden farbige Texte per doc.insertString( ... ) einfüge.
Wenn ich die JTextPane normal in mein JPanel einfüge dann bricht der Text wunderschön um kein Problem.

Nachdem ich die JTextPane zum anzeigen eines Chats benutze muss dieser aber scrollen.

Wenn ich die JTextPane in eine JScrollPane packe ist aber der automatisch Zeilenumbruch futsch!
Wie kann ich das lösen?

Ach ja und zum Thema scrollen ... die JScrollPane scrollt nicht automatisch mit.
Ich habe das jetzt so gelöst, dass ich mir nach einfügen des Textes den MaxValue der Scrollbar hole und
die Scrollbar Position auf diesen Wert setzte.
Gibt eine elegantere Lösung?

mfg userc45

edit: Warum poste ich das in der Applet Sektion - ich entwickle ein Applet vllt gibt es da Einschränkungen ka


----------



## MarcoBehnke (4. Jan 2007)

poste mal den Code, den Du benutzt


----------



## userc45 (4. Jan 2007)

chatboard ist meine Klasse die den Chat repräsentiert

```
public class ChatBoard extends JPanel{
	/**
	 * 
	 */
	private JTextPane chat = new JTextPane();
	private JScrollPane nested = null;
	private static final long serialVersionUID = -3711729076635781160L;

	public ChatBoard(JScrollPane nested)
	{		
		this.nested = nested;
		this.setLayout(new BorderLayout());
		this.add(chat,BorderLayout.CENTER);
	}
	
	public void appendString(String text, Style style) throws BadLocationException
	{
    	StyledDocument doc = (StyledDocument)chat.getDocument();
    	System.out.println(this.getChat().getWidth()+" "+text.length());
		doc.insertString(doc.getLength(), text, style);
	}
	
	public void appendIcon(Icon icon)
	{
		chat.setCaretPosition(chat.getDocument().getLength());
		chat.insertIcon(icon);
	}
	
	public static Style styleGenerator(StyledDocument doc, String stylename,boolean italic, boolean bold, String fontfamily,int fontsize,Color background, Color foreground)
	{
		Style style = doc.addStyle(stylename,null);
		StyleConstants.setItalic(style, italic);
		StyleConstants.setBold(style, bold);
		StyleConstants.setFontFamily(style, fontfamily);
		StyleConstants.setFontSize(style, fontsize);
		StyleConstants.setBackground(style, background);
		StyleConstants.setForeground(style, foreground);
		return style;
	}
	
	public JTextPane getChat() {
		return chat;
	}

	public void setChat(JTextPane chat) {
		this.chat = chat;
	}

	public JScrollPane getNested() {
		return nested;
	}

	public void setNested(JScrollPane nested) {
		this.nested = nested;
	}
}
```

Und hier füg ich den Chat in die ScrollPane (eastPane ist auch ein JPanel mit GridLayout 3,1)

```
JScrollPane scroll = new JScrollPane(chatboard);
chatboard.setNested(scroll);

JPanel tmp = new JPanel();
tmp.setLayout(new BorderLayout());
tmp.add(scroll,BorderLayout.CENTER);
tmp.add(command,BorderLayout.SOUTH);
		
eastPane.add(tmp);
```

mfg userc45


----------



## userc45 (4. Jan 2007)

keiner eine Idee ?


----------



## MarcoBehnke (7. Jan 2007)

Du musst den Container anders benutzen.

  JScrollPane scrollPane = new JScrollPane();
  scrollPane.getViewport().setView(new JTextArea());

nicht add() benutzen


----------



## userc45 (8. Jan 2007)

Hallo,

in meinem Beispiel


```
JScrollPane tmp = new JScrollPane();
tmp.getViewport().setView(chatboard);
```

Wenn ich das so mache scrollt das Panel aber noch immer und es passiert kein Zeilenumbruch.

mfg userc45


----------



## MarcoBehnke (8. Jan 2007)

Weil chatboard ein JPanel ist und nicht das Textfeld...

JScrollPane scroll = new JScrollPane();
scroll.getViewport().setView(chatboard.getChat());


----------



## userc45 (8. Jan 2007)

Vielen dank funktioniert jetzt - solved 

mfg userc45


----------



## MarcoBehnke (8. Jan 2007)

sehr schön!


----------



## Bert Brenner (8. Jan 2007)

Geht das nicht auch wenn man einfach Horizontales scrollen beim JScrollPane abschaltet?


----------



## MarcoBehnke (8. Jan 2007)

Bert Brenner hat gesagt.:
			
		

> Geht das nicht auch wenn man einfach Horizontales scrollen beim JScrollPane abschaltet?



?? das soll helfen das zum scrollen zu bringen indem Du scrollbars abschaltest?

Das Problem hier war ja, dass nicht die TextArea, sondern das Panel im ScrollViewport waren. Dadurch wird ja nicht der Text, sondern das Panel gescrollt. Da das jedoch nicht zu groß war, wird logischerweise nicht gescrollt 

Also TextArea in SCrollPaneViewport und schwupps.


----------



## Bert Brenner (8. Jan 2007)

Ne, das Scrollen muss schon anders gemacht werden, aber der Zeilenumbruch.


----------



## MarcoBehnke (8. Jan 2007)

das habe ich gar nicht gelesen. Aber recht hast Du, Scrollbalken an der Seite disablen und dann ist der automatische Zeilenumbruch wieder da


----------



## userc45 (8. Jan 2007)

Hallo nochmal,

das mit Zeilenumbruch funktioniert wunderbar ... ich bin aber jetzt auf noch ein Problem gestoßen.

Wenn ich das Applet im AppletViewer (Eclipse) aufrufe kann ich Images in der JTextPane anzeigen (mit insertIcon).
Beim Aufruf im Browser werden gifs in anderen Componenten angezeigt aber in der JTextPane nicht  .. der farbige Text schon.

icon ist ein Image das übergeben wird, dass 100%ig existiert

```
chat.setCaretPosition(chat.getDocument().getLength());
chat.insertIcon(new ImageIcon(icon));
```

der obige Teil funktioniert anscheinend nicht.


```
StyledDocument doc = (StyledDocument)chat.getDocument();
System.out.println(this.getChat().getWidth()+" "+text.length());
doc.insertString(doc.getLength(), text, style);
```

der Teil, also nur Text, funktioniert schon.

Was könnte es da haben?

mfg userc45


----------



## userc45 (16. Jan 2007)

Hallo,

hat vielleicht wer eine idee wo das problem liegen kann?

mfg userc45


----------



## SeannWilliamScott (12. Okt 2007)

Hallo, 

ich habe das kleine Problem, das ich gern möchte, das mein JTextPane horizontal scrollbar ist.
Ich habe das JTextPane in ein JScrollPane eingebunden, vertikal scrollt dieses auch nur horizontal nicht. Ich habe versucht verschiedene Eigenschaften der horizontalen Scollbar zusetzen, aber nichts geht.

MfG SeannWilliamScott


----------

