JTextPane - wyrównanie komponentów w środku

0

Witam,

mój problem jest taki, że mając komponent JTextPane dodaję do niego komponenty JLabel za pomocą takiej oto metody

public void sendMessage(Message pMessage) {
	JLabel label = new JLabel(pMessage.getText() + "\n");
	Font font = new Font("Verdana", Font.PLAIN, 12);
	label.setFont(font);
	label.setVisible(true);
	this.outputTextPane.insertComponent(label);
}

(klasa Message to moja klasa i tam jest przechowywany tekst wiadomości póki co, ale nie w tym jest błąd).
Chodzi o to, że jeśli dodam kilkanaście tych JLabeli to zamiast przechodzić do nowego wiersza w JTextPane, to zwyczajnie brnie dalej i dodaje się w tej samej linii cały czas, co dziać się nie może. Zależy mi też na tym, żeby był to JTextPane, bo chcę tam wsadzać swingowe kontrolki, a JEditorPane nie bardzo się nadaje do tego.

Kod JTextPane (+JScrollPane):

//	    StyleContext context = new StyleContext();
//	    StyledDocument document = new DefaultStyledDocument(context);
//
//	    Style style = context.getStyle(StyleContext.DEFAULT_STYLE);
//	    StyleConstants.setAlignment(style, StyleConstants.ALIGN_LEFT);
//	    StyleConstants.setFontSize(style, 14);
//	    StyleConstants.setSpaceAbove(style, 4);
//	    StyleConstants.setSpaceBelow(style, 4);

//		this.textPane = new JTextPane(document);
		
		this.textPane = new JTextPane();

		JScrollPane scrl = new JScrollPane(this.textPane);
		scrl.setBounds(5, 5, this.chatPanel.getSize().width - 10,
				this.chatPanel.getSize().height - 10);
		scrl.setViewportView(this.textPane);
		scrl.setBorder(BorderFactory.createLineBorder(Color.gray));
		scrl.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
		scrl.setMaximumSize(new Dimension(this.chatPanel.getSize().width - 15,
				this.chatPanel.getSize().height - 15));
		scrl.setPreferredSize(new Dimension(this.chatPanel.getSize().width - 15,
				this.chatPanel.getSize().height - 15));

		this.textPane.setBounds(0, 0, scrl.getWidth(), scrl.getHeight());
		this.textPane.setMaximumSize(new Dimension(scrl.getWidth(),
		 scrl.getHeight()));
		this.textPane.setBorder(null);
		this.textPane.setEditable(false);
		this.textPane.setFocusable(false);
		
		this.textPane.setVisible(true);

		this.chatPanel.add(scrl);

Linie zakomentowane to nieudane próby naprawienia tego błędu.
Problem jest właśnie taki, że musi mi się to albo dodawać w nowej linii zamiast w jednej, nie wiem już co mam tam zmienić żeby tak się działo.
Tekst wyświetla się dobrze (znaczy się przechodzi do nowych linii), komponenty wyświetlają się w jednym wierszu.
Proszę o pomoc.

0

OK chyba dałem radę, naprawiłem to modyfikując metodę dodającą te JLabele

StyledDocument doc = this.outputTextPane.getStyledDocument();
SimpleAttributeSet attr = new SimpleAttributeSet();
		
JLabel label = new JLabel(pMessage.getText() + "\n");
label.setBackground(Color.RED);
Font font = new Font("Verdana", Font.PLAIN, 12);
label.setFont(font);
label.setVisible(true);
		
this.outputTextPane.setCaretPosition(this.outputTextPane.getDocument().getLength());
this.outputTextPane.insertComponent(label);
try {
	doc.insertString(doc.getLength(), "\n", attr );
} catch (BadLocationException e) {
	e.printStackTrace();
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1