Chatfenster

memgen

Grünschnabel
moinmoin,

ich bin dabei ein Chatprogramm zu schreiben und suche eine Möglichkeit verschiedene Dinge im Chatfenster darzustellen:

-Text in verschiedenen Farben, Schriftarten & Größen etc.
-Textdarstellung zentriert, rechts & linksbündig
-automatischer Zeilenumbruch wenn die Breite des Chatfensters nicht ausreicht
-Links die klickbar sein sollen (also durch Klicken im Systembrowser geöffnet werden)
-Darstellung von Bildern
-einfaches Anhängen einer neuen Nachricht ohne starke CPU-Belastung
-Markierung des gesamten Textes (um ihn eventuell zu kopieren etc.)

Bisherige Lösung war die Darstellung des Ganzen in HTML in einem JTextPane.
Jede neue Nachricht wird ans Ende der HTML-Seite angefügt und die Seite neu aufgebaut, was sehr viel Leistung benötigt. Auch führt diese Lösung bei vielen schnell verschickten Nachrichten von Zeit zu Zeit zum Programmabsturz, ohne erkennbaren Grund, daher suche ich nach einer besseren Lösung

Wenn jemand eine Lösung oder Anregungen hat, immer her damit! ;)

lG
memgen
 
Mein Lösungsansatz wäre jetzt ähnlich wie deiner mit ein paar Veränderungen:
- du brauchsd JTextPane oder JEditorPane zum Anzeigen
- für das Formatieren nimmst du einen Syntax (HTML,BB, oder was ähnliches)
- in den Methoden, in denen du formatierst fügst du einfach in dem zu sendenden Text deine Tags vor und hinter den ausgewählten Textabschnitt (oder bei HTML kannsd du auch Style im StyledDocument setzen)
- für den automatischen Zeilenumbruch setzt du in deinem JTextArea-Objekt
Code:
setLineWrap(true)
- für das Anhängen einer Nachricht:
Code:
void append(final String s)
	{
		final Document doc = this.text.getDocument();
int index=doc.getLength();
		if (doc != null)
		{
			try
			{
				doc.insertString(doc.getLength(), s, null);
			}
			catch (final BadLocationException e)
			{}
		}
//Hier kommt dann deine Methode, die deine Formattierung ab der Position index anwendet, so dass nur der angehängte Text verarbeitet werden muss
	}
- Zum Anwenden der Formatierung wählst du jeweils den Text innerhalb eines Tags aus und setzt im StyledDocument die jeweiligen Attribute
Hier eine Methode um zum Beispiel die Schriftart eines ausgewählten Textabschnittes einheitlich zu ändern:
Code:
//text ist meine JTextPane
void setTextFont(final Font f)
	{
		if (this.text.getSelectedText() == null)
		{
			return;
		}
		final int i = this.text.getSelectionStart();
		final AttributeSet as =
				((JTextPane) this.text).getStyledDocument().getCharacterElement(i).getAttributes();
		final SimpleAttributeSet sas = new SimpleAttributeSet(as);
		StyleConstants.setFontFamily(sas, f.getFamily());
		StyleConstants.setFontSize(sas, f.getSize());
		StyleConstants.setBold(sas, f.isBold());
		StyleConstants.setItalic(sas, f.isItalic());
		((JTextPane) this.text).getStyledDocument().setCharacterAttributes(i,
				this.text.getSelectedText().length(), sas, true);
	}

Hoffe du hasd meine Beschreibung verstanden:)
doe300
 

Neue Beiträge

Zurück