TextArea, JTextPane, JEditorPane

TeNNoX

Mitglied
Hey, ich suche nach dem richtigen Textfeld für meinen Chat 🙂

hab schon ein bischen rumprobiert und bin mit TextArea ganz gut klargekommen, doch das ist mir aufgefallen, das man nur eine Formatierung für den ganzen Text festlegen kann... :shock: ich will aber die namen Fett machen oder vielleicht mal was farbig o.ä. Dann habe ich JTextPane ausprobiert, aber da konnte man irgendwie nicht scrollen... 😱 Ich habe mehrere Sachen ausprobiert, z.b. JScrollPane, aber irgendwie komme ich damit gar nicht klar 😳 es erscheint keine Scrollbar und durch history.setCaretPosition(...) verändert sich gar nichts...

also was würdet ihr mir empfehlen und wie muss ich das dann machen?

Lg

TeNNoX
 
Zuletzt bearbeitet:
Du kannst mit allen 3en scrollen, wenn du die ScrollPane richtig verwendest:
Java:
JScrollPane scrollPane = new JScrollPane(deineTextKomponente);
// Alternativ:
JScrollPane scrollPane = new JScrollPane();
scrollPane.setViewportView(deineTextKomponente);

// Danach:
deinUebergeordneterContainter.add(scrollPane);

Ich würde auf jeden Fall nicht die JTextArea verwenden, aus den von dir bereits festgestellten Gründen; sie ist eben "nur" dafür gamacht um einfachen Plain-Text anzuzeigen bzw. zu editieren.

Die Unterschiede zwischen JEditorPane und JTextPane kannst du ja der Doku und Google entnehmen.
 
Zuletzt bearbeitet:
Du kannst mit allen 3en scrollen, wenn du die ScrollPane richtig verwendest:
...

So hab ich's eingegeben,aber keine Scrollbar erscheint... muss ich nicht noch angeben welche scrollbar (horizontal/vertikal) angezeigt werden soll?
Java:
history = new JTextPane();
JScrollPane scrollHistory = new JScrollPane(history);
history.setText("Waiting for Client...\n");
history.setBounds(0, 20, 500, 300);
this.add(history);
this.(scrollHistory);
history.setFont(new Font("Courier Sans MS", Font.PLAIN, 15));
history.setEditable(false);
history.setMaximumSize(new Dimension(500, 300));
 
1. Meintest du in Zeile 6 etwa:
Code:
this.add(scrollHistory);
???

2. Du darfst nicht, wenn du schon ohne LayoutManager arbeitest, was nicht zu empfehlen ist, die Bounds der JTextPane einstellen, da die ja im Viewport deiner JScrollPane liegt und "adden", sondern musst dies bei deiner JScrollPane tun.

Also so in etwa:
Java:
history = new JTextPane();
JScrollPane scrollHistory = new JScrollPane(history);
history.setText("Waiting for Client...\n");
scrollHistory.setBounds(0, 20, 500, 300);
this.add(scrollHistory);
history.setFont(new Font("Courier Sans MS", Font.PLAIN, 15));
history.setEditable(false);
history.setMaximumSize(new Dimension(500, 300));

[EDIT]
Außerdem kannst du mit den beiden Textkomponenten JTextPane und JEditorPane auch Dinge, wie etwa Syntaxhighlighting anstellen!
[/EDIT]
 
Zuletzt bearbeitet:
muss ich nicht noch angeben welche scrollbar (horizontal/vertikal) angezeigt werden soll?

Nein, da VERTICAL/HORIZONTAL SCROLLBAR AS NEEDED der Standard Wert ist. Somit musst du bei der Scroll Bar Policy nicht zwingend etwas ändern.


Problem sollte aber eh mit GUI-Programmers Hilfe gelöst werden. 🙂
 
1. Meintest du in Zeile 6 etwa:
Code:
this.add(scrollHistory);
???

2. Du darfst nicht, wenn du schon ohne LayoutManager arbeitest, was nicht zu empfehlen ist, die Bounds der JTextPane einstellen, da die ja im Viewport deiner JScrollPane liegt und "adden", sondern musst dies bei deiner JScrollPane tun.

zu 1. Ja meine ich... ???:L

zu 2. Danke der Part geht schon mal 😀
Die Scrollbar kommt jetzt wenn sie benötigt wird 😉
Jetzt nur zum verständniss... was müsste ich ändern wenn ich will, das die scrollbar imer angezeigt wird?
oder das die text nicht gebrochen wird sondern auch eine horizontale scrollbat erscheint?

Und wie mache ich das am besten mit dem formatieren des Textes?

@layout manager: ich komme damit leider nciht so wirklich klar, muss mich mal nach einem tutorial dafür umsehen :bahnhof:

danke schonmal


[EDIT]Komischerweise wird in JTextPane Shift+Enter nicht als enter erkannt ???:L ???:L kann man das ändern?[/EDIT]
 
Zuletzt bearbeitet:
Java:
// für die Anzeige der Scrollbars
scrollHistory.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
scrollHistory.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);

//und für den automatischen Zeilenumbruch

history.setLineWrap(true);
 
Gut, und wie kann ich den Text jetzt formatieren?
ich denke doch mit
Java:
doc.insertString(doc.getLength(), "Client: ", new AttributeSet());
aber AttributeSet kann man nicht instanzieren...
 
Gut, und wie kann ich den Text jetzt formatieren?
ich denke doch mit
Java:
doc.insertString(doc.getLength(), "Client: ", new AttributeSet());
aber AttributeSet kann man nicht instanzieren...

Was genau meinst du mit formatieren??? Etwas farblich hervorheben, den Link zum Syntaxhighlighting hast du ja bereits. Oder irgendwas am Text ändern?
 
Fett und rot:
Java:
final MutableAttributeSet a = new SimpleAttributeSet();
StyleConstants.setBold(a, true);
StyleConstants.setForeground(a, Color.RED);
doc.insertString(doc.getLength(), "Client: ", a);
 
Eine gute Lösung wurde von xehpuk bereits genannt. Ansonsten, wenn du etwas Spezielles hervorheben willst, musst du eben einen bestimmten Teil, des hoffentlich mit HTML geschriebenen Textes HTML spezifisch hervorheben, z.B. Fett:
Code:
<b>dieser Text ist bei HTML fett</b>
.
 

Zurück
Oben