JTextPane Problem

Status
Nicht offen für weitere Antworten.

userc45

Mitglied
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 😀
 
chatboard ist meine Klasse die den Chat repräsentiert
Code:
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)
Code:
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
 
Du musst den Container anders benutzen.

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

nicht add() benutzen
 
Hallo,

in meinem Beispiel

Code:
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
 
Weil chatboard ein JPanel ist und nicht das Textfeld...

JScrollPane scroll = new JScrollPane();
scroll.getViewport().setView(chatboard.getChat());
 
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.
 
🙂 das habe ich gar nicht gelesen. Aber recht hast Du, Scrollbalken an der Seite disablen und dann ist der automatische Zeilenumbruch wieder da
 
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
Code:
chat.setCaretPosition(chat.getDocument().getLength());
chat.insertIcon(new ImageIcon(icon));

der obige Teil funktioniert anscheinend nicht.

Code:
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
 
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
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben