[Java] Neue Zeile im EditorPane

09/29/2015 19:28 panic'#1
Hallo,

habe wiedermal ein Problem, ich krieg es einfach nicht hin, eine neue Zeile im EditorPane zu schreiben. Man soll einen Text in ein TextField schreiben, und danach soll es ins EditorPane, aber durch setText wird der Text halt immer ersetzt. Er soll da bleiben und der neue Texte in eine neue Zeile.
Mit einer TextArea kriege ich das ganz einfach mit dem Befehl
Code:
TextField.append("Anweisung bla");
hin.. Aber nicht mit dem EditorPane.. :/

Mein Code:

Code:
if (textField.getText().equals("")){
					JOptionPane.showMessageDialog(null, "Text erforderlich!");
				
			}
				else {
				editorPane.setText("textField.getText()");
				textField.setText("");
09/29/2015 19:50 Menan#2
Das JPaneEditorPane unterstützt soweit ich weiß html.

Versuch einfach deinen Text durch String konkatenation zu verbinden mit einem <br> dazwischen.

Code:
EditorPane.setText(EditorPane.getText() + "<br>" + textField.getText());
Irgendwie so in die Richtung ;)
09/29/2015 20:57 Zunft#3
Quote:
Originally Posted by Menan View Post
Das JPaneEditorPane unterstützt soweit ich weiß html.

Versuch einfach deinen Text durch String konkatenation zu verbinden mit einem <br> dazwischen.

Code:
EditorPane.setText(EditorPane.getText() + "<br>" + textField.getText());
Irgendwie so in die Richtung ;)
Da braucht es kein HTML, es reicht eine simple Escapesequenz

Code:
editorPane.setText(editorPane.getText() + "\n" + textField.getText());
oder

Code:
Document doc = editorPane.getDocument();
doc.insertString(doc.getLength(), "\n" +  textField.getText(), null);
In Anführungszeichen schreibt man übrigens lediglich Text, den du selbst eingibst, keinen Befehl.


So nicht:
Code:
editorPane.setText("textField.getText()");


Sondern so:
Code:
editorPane.setText("Befehl: " + textField.getText());
09/30/2015 13:42 panic'#4
Quote:
Originally Posted by Admiral Sack View Post
Da braucht es kein HTML, es reicht eine simple Escapesequenz

Code:
editorPane.setText(editorPane.getText() + "\n" + textField.getText());
oder

Code:
Document doc = editorPane.getDocument();
doc.insertString(doc.getLength(), "\n" +  textField.getText(), null);
In Anführungszeichen schreibt man übrigens lediglich Text, den du selbst eingibst, keinen Befehl.


So nicht:
Code:
editorPane.setText("textField.getText()");


Sondern so:
Code:
editorPane.setText("Befehl: " + textField.getText());
Ich habe es jetzt mit
Code:
editorPane.setText(editorPane.getText() + "\n" + textField.getText());
probiert. Jetzt schreibt er aber nicht mehr in den editorPane rein.. :/
09/30/2015 13:44 Menan#5
Wie bereits geschrieben unterstützt das EditorPane kein "\n"...

Probier es mit dem <br> Tag ;)
09/30/2015 14:04 panic'#6
Quote:
Originally Posted by Menan View Post
Wie bereits geschrieben unterstützt das EditorPane kein "\n"...

Probier es mit dem <br> Tag ;)
Das klappt auch nicht, weil der Text ja gar nicht erst im EditorPane rein kommt :D
09/30/2015 14:36 Menan#7
Vermutlich musst du dein EditorPane erst initialisieren.
Da null zurückgegeben wird von getText(), falls dein Editorpane bereits Text enthält...

Code:
if(EditorPane.getText() == null){
EditorPane.setText(textField.getText());
}
else{
editorPane.setText(editorPane.getText() + ("\n" bzw "<br>") + textField.getText());
}
09/30/2015 15:14 Zunft#8
Posted doch einfach mal den relevanten Ausschnitt deines Quellcodes
09/30/2015 16:25 Mysthik#9
Damit geht es:
PHP Code:
@SuppressWarnings("serial")
    class 
MyEditorPane extends JEditorPane
    
{
        public 
void appendText(final String newText)
        {
            if(
newText == null)return;
            try 
            {
                
Document doc getDocument();
                
doc.insertString(doc.getLength(), System.lineSeparator() + newText,new SimpleAttributeSet());
            }
            catch (
BadLocationException e)
            {
                
e.printStackTrace();
            }
        }
    } 
Eventuell musst du mit den AttributeSet noch ein wenig rumspielen. Ich kann aber nicht sagen ob das HTML-rendering dann noch einwandfrei funktioniert.