Selektion durch HTML ersetzen

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Code:
pane = new JTextPane();
pane.setText("Nur irgend ein Text");
		pane.getText();
		pane.setSelectionStart(1);
		pane.setSelectionEnd(5);
		pane.replaceSelection("<div font color=red>Hallo");

Ist es möglich den Selektierten text im JTextPane durch HTML Code zu ersetzen? So das bei der Asugabe "Hallo" in rot steht?
 

Sky

Top Contributor
Im Prinzip kannst Du deine Ausgabe einfärben; aber nicht so...

Zunächst einmal muss Du den Content-Type auf HTML setzen:
Code:
pane.setContentType( "text/html" );

Außerdem benötigst Du ein AttributeSet, z.B.:
Code:
SimpleAttributeSet attributeSet = new SimpleAttributeSet();
StyleConstants.setForeground(attributeSet, Color.red);

Um den Text einzufärben musst Du nun einfach folgendes tun:
Code:
pane.getStyledDocument().setCharacterAttributes( 1, 5, attributeSet, false );
 
G

Gast

Gast
Ah, das wußte ich nicht, vielen Dank! Kann man damit auch bestimmen obd er Font kursiv, fett oder unterstrichen sein soll?
 

Sky

Top Contributor
Anonymous hat gesagt.:
Ah, das wußte ich nicht, vielen Dank! Kann man damit auch bestimmen obd er Font kursiv, fett oder unterstrichen sein soll?
Einfach mal in die API schauen!
Code:
StyleConstants.setBold(attributeSet, true);
StyleConstants.setItalic(attributeSet, true);
 
G

Gast2

Gast
Dazu habe ich auch eine Frage:
Ist es möglich, dass sich nicht der ganze Text der sich im TextPane befindet ändert. -IN dem Fall die Farbe? Denn mit SetForeground ändert scih ja immer alles was sich in diesem Pane befindet. Ich will es aber so haben, dass der ganze Text so bleibt wie er ist, nur die nächsten eingegebenen Zeichen werden in der gewünschten Farbe ausgegeben!?
 
G

Gast

Gast
Da hab ich auch ncoh eine Frage:
Ich habe mehrere Farben zur Auswahl, wenn man eine auswählt will ich nur die die Frabe definieren müssen:
farbe = Color.blue

Dann später will ich mit dem Aufruf setForeground(farbe) die Frabe ändern können. Leider funktioniert dies nicht, bei mir. Welchen DatenTyp muss denn die Variable farbe haben?
Wäre sehr dankbar über hilfreiche Antworten!
 

sisko78

Bekanntes Mitglied
Jetzt mal ne blöde Frage: ich war immer der Meinung, dass bei Content-Type text/html keine Formatierung ausser in Form von HTML Tags möglich ist (also die Attribustsets nicht wirken). Ist das nicht so?
 

Sky

Top Contributor
sisko78 hat gesagt.:
Jetzt mal ne blöde Frage: ich war immer der Meinung, dass bei Content-Type text/html keine Formatierung ausser in Form von HTML Tags möglich ist (also die Attribustsets nicht wirken). Ist das nicht so?
Natürlich wirken die Attribustsets, da sie sich auf das aktuell gewählte StyledDocument beziehen.

btw.: Es ist auch prinzipiell nicht notwendig den Content-Type auf html zu setzen. Dies habe ich nur vorgeschlagen, da ich dachte hier würde mit html gearbeitet (Zeile 7 im Code im ersten Post)
 
G

Guest

Gast
Gast2 hat gesagt.:
Dazu habe ich auch eine Frage:
Ist es möglich, dass sich nicht der ganze Text der sich im TextPane befindet ändert. -IN dem Fall die Farbe? Denn mit SetForeground ändert scih ja immer alles was sich in diesem Pane befindet. Ich will es aber so haben, dass der ganze Text so bleibt wie er ist, nur die nächsten eingegebenen Zeichen werden in der gewünschten Farbe ausgegeben!?

Ich habe das probiert, kriege es aber nicht hin. Selbst wenn ich verschiedene attributeSet's definiere klappt dies nicht!!!

Code:
            		    pane.getStyledDocument().setCharacterAttributes(pane.getSelectionStart(),pane.getSelectionEnd(), attributeSet, false );
            		    pane.getStyledDocument().setCharacterAttributes(pane.getText().length() -1,pane.getText().length(), attributeSet2, false );

So funktionerit es zwar, dass der nachfolgende eingegebene Text die Frabe vom attributeSet2 hat, aber leider funktioniert dies nur, wenn ich den letzten Buchstaben auch in diese Farbe "färbe" -pane.getText().length() -1,pane.getText().length()

...?
Hoffe ihr wisst wie es richtig geht und könnt mir helfen?
 

sisko78

Bekanntes Mitglied
sky80 hat gesagt.:
sisko78 hat gesagt.:
Jetzt mal ne blöde Frage: ich war immer der Meinung, dass bei Content-Type text/html keine Formatierung ausser in Form von HTML Tags möglich ist (also die Attribustsets nicht wirken). Ist das nicht so?
Natürlich wirken die Attribustsets, da sie sich auf das aktuell gewählte StyledDocument beziehen.

btw.: Es ist auch prinzipiell nicht notwendig den Content-Type auf html zu setzen. Dies habe ich nur vorgeschlagen, da ich dachte hier würde mit html gearbeitet (Zeile 7 im Code im ersten Post)

Also ich habe gerade mal ein paar Tests gestartet und bin zu dem Ergebniss gekommen, dass ich es nicht mischen werde. Z.B. überdeckt <font color></font> das mit setForground gesetzte und mit dem Offset ists auch nicht identisch, setze ich dann die fontsize, dann wird plötzlich das html font tag ignoriert usw.
 

sisko78

Bekanntes Mitglied
Das hatte nichts mit dir zu tun.

Wie meinst du das eigentlich.
Hast du den vollständigen Text im TextPane und willst das farblich in mehrere Abschnitte teilen oder
fügst du dem TextPane immer wieder was hinzu?

[Edit] also jetzt nur mal als Beispiel mit mehreren Farben:

Code:
        JTextPane pane = new JTextPane();
        pane.setContentType("text/html");
        pane.setText(
                "<font color = blue>Hallo</font> <a href>dies ist ein Test</a><font color=yellow>Dieses 
Element sollte seine Farbe durch HTML bekommen haben</font>");
        add(pane);
        SimpleAttributeSet attributeSet = new SimpleAttributeSet();
        SimpleAttributeSet attributeSet2 = new SimpleAttributeSet();
        SimpleAttributeSet attributeSet3 = new SimpleAttributeSet();        
        StyleConstants.setForeground(attributeSet, Color.RED);
        StyleConstants.setForeground(attributeSet2, Color.GREEN);
        StyleConstants.setForeground(attributeSet3, Color.CYAN);
        StyleConstants.setBold(attributeSet, true);
        StyleConstants.setItalic(attributeSet, true);
        StyleConstants.setFontSize(attributeSet, 20);
        StyledDocument doc = pane.getStyledDocument();
        doc.setCharacterAttributes(0, 5, attributeSet, false);
        doc.setCharacterAttributes(7, doc.getLength()-7, attributeSet2, false);
        doc.setCharacterAttributes(5, 2, attributeSet3, false);
 
G

Guest

Gast
Ach so, na dann bin ich ja beruhigt :)

Also ich will am Ende immernoch etwas hinzufügen.
Ich kann ja mal kurz genauer erklären, der schon eingegebene Text soll nicht formatiert werden, ich wähle aus einer ComboBox die Farbe aus, meinetwegen rot, dann sollen die nachfolgenden Buchstaben die ich eingebe rot dargestellt werden, wisst ihr was ich meine?
 

sisko78

Bekanntes Mitglied
Du kannst dir wie oben das StyledDocument holen
Code:
StyledDocument doc = pane.getStyledDocument();
und dann mit
Code:
 doc.insertString(doc.getLength(), "hallo, das ist ein test", attributeSet);
ans Dokument anhängen
 
G

Gast

Gast
ja, ich weiß, aber ich will ja nicht so automatisch etwas ans Dokument hängen, sondern manuell direkt im TextPane eingeben!!! So das x-belibiger Text in der neuen Farbe da steht!?

Es geht mir nur darum das sich der Text, der schon im TextPane steht nicht die Frabe ändert, sondern diese neue Farbe nur für den neuen Text gilt. Diesen neuen Text gibt der Nutzer aber direkt im TextPane an, und wird nicht automatisch hinten ran gehangen....!

Hoffe du kannst mir weiter helfen, bisher haben wir ja leider ein wenig aneinder vorbei geredet...vielleicht drücke cih mich einfach zu ungenau aus. Auf jeden Fall vielen Dank für deine bisherige Hilfe!
 

sisko78

Bekanntes Mitglied
Könntest es vielleicht so machen, kenn mich aber auch nicht so gut aus:

Code:
 public static void setTextPaneColor(JTextPane textPane, Color c) {       
        MutableAttributeSet mutableAttributeSet = textPane.getInputAttributes();               
        StyleConstants.setForeground(mutableAttributeSet, c);       
        StyledDocument doc = textPane.getStyledDocument();        
        doc.setCharacterAttributes(doc.getLength(), 1, mutableAttributeSet, false);
    }
 

sisko78

Bekanntes Mitglied
Also in meinem kleinen Test hat das funktioniert, vielleicht kann dir ja jemand anders noch Tips geben.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
U Selektion in JTable Java Basics - Anfänger-Themen 3
R Switch-Case Selektion Java Basics - Anfänger-Themen 13
G [Hibernate] Beschränkte Selektion Java Basics - Anfänger-Themen 2
T Ich brauche eine Schleife die eine beliebige Zahl so lange durch 10 teilt bis zur Null Java Basics - Anfänger-Themen 5
X wie bekomme ich durch Eingabeaufforderung definierte double in einen Befehl, welcher 3 erwartete double braucht? Java Basics - Anfänger-Themen 3
T float soll durch schleife die größte mögliche Zahl herausfinden, Ausgabe ist aber "Infinity" Java Basics - Anfänger-Themen 1
H Counter durch gepresste Taste nur auf 1 erhöhen und nicht durchzählen lassen Java Basics - Anfänger-Themen 7
T Eingabe durch eine Zahl dividieren nachgucken? Java Basics - Anfänger-Themen 4
G Programm läuft durch, ohne Eingabe aus dem Chat abzuwarten Java Basics - Anfänger-Themen 4
S IntelliJ geht alle Klassen durch Java Basics - Anfänger-Themen 9
A 1 Leerzeichen durch zwei Leerzeichen ersetzen Java Basics - Anfänger-Themen 4
E Durch Muster in Array iterieren Java Basics - Anfänger-Themen 3
Thomas06 Wie kann man mithilfe von boolean herausfinden ob eine zahl durch 5 und 7 teilbart ist ? Java Basics - Anfänger-Themen 7
A JTextArea entfernen und durch neuen Text ersetzen Java Basics - Anfänger-Themen 8
B Den Dateipfad einer Java Datei durch Code in Selbiger finden? Java Basics - Anfänger-Themen 10
T Variable durch Action Listener ändern Java Basics - Anfänger-Themen 2
B Attribute eines Objekts einer Klasse durch statische Methode einer 2. Klasse ändern? Java Basics - Anfänger-Themen 32
Agent4nobody Programmstart durch aufruf des interpreters funktioniert nicht Java Basics - Anfänger-Themen 14
obiwanke Ziffern durch ASCII Character ersetzen Java Basics - Anfänger-Themen 8
J Speichern von zwei Variablen durch Auslesen aus einem Numberfield Java Basics - Anfänger-Themen 2
sserio Java Fx, wie erstellt man einen EventHandler, der durch das Drücken eines Button Texte in eine Table view einfügt Java Basics - Anfänger-Themen 17
S Durch HashMap iterieren Java Basics - Anfänger-Themen 8
A Wenn eine Zahl durch 7 teilbar ist, soll statt der Zahl ein ‘*‘ angezeigt werden. java? Java Basics - Anfänger-Themen 47
K mit <<1 kann man mal 2 machen, mit >>2 geteilt durch zwei und was bewirkt <<<1 und >>>1? Java Basics - Anfänger-Themen 5
A Verarbeiten einer Excel Datei durch das java-Programm Java Basics - Anfänger-Themen 3
C In String, Buchstaben ersetzen durch andere Buchstaben Java Basics - Anfänger-Themen 26
F Initialisieren eines Web-Mp3 Players in Tabs durch "booleans" erst wenn Tab geöffnet wird ...? Java Basics - Anfänger-Themen 1
W Werte durch Konsole einlesen Java Basics - Anfänger-Themen 10
C if-Konstrukt durch switch-Konstrukt ersetzen Java Basics - Anfänger-Themen 14
OZAN86 For Schleife von 1-50 die Zahlen werden durch ein Komma getrennt Java Basics - Anfänger-Themen 10
Bademeister007 Operatoren Alle Zahlen einer ArrayList die durch 5 teilbar ist Java Basics - Anfänger-Themen 2
Y Wie kann ich Konsoleneingaben durch den Scanner mit JUnit 4 testen? Java Basics - Anfänger-Themen 1
yoskaem Text Color durch Klicken eines Buttons in anderer Activity ändern Java Basics - Anfänger-Themen 2
N for Schleife durch Rekursion ersetzen Java Basics - Anfänger-Themen 6
N Probleme beim printen von Arrays durch for Schleife Java Basics - Anfänger-Themen 3
L Iterieren durch eine ArrayList. Integer Array wird übergeben Java Basics - Anfänger-Themen 17
J Eine Position im String durch einen Integer - Wert teilen Java Basics - Anfänger-Themen 5
F Methoden Bitte Helft mir meinen Fehler zu finden. Möchte in diesem Bankenprogramm durch die Konsoleneingabe auswählen welches Konto reduziert und welches erhö Java Basics - Anfänger-Themen 17
E 2D Array - char durch die Matrix "wandern" lassen Java Basics - Anfänger-Themen 7
E Objekt durch Benutzer über Konsole erzeugen - Java Java Basics - Anfänger-Themen 3
F Methode für Teilbarkeit durch 5 tut was anderes.... Java Basics - Anfänger-Themen 3
H Aufruf von Methoden durch Methoden Java Basics - Anfänger-Themen 3
H Wie kann ich durch Methoden definiren? Java Basics - Anfänger-Themen 8
O Mehrfache Scanner-Eingabe durch Komma getrennt Java Basics - Anfänger-Themen 6
M String array durch Eingabe begrenzen Java Basics - Anfänger-Themen 7
J Dynamisches Array durch split()-Funktion? Java Basics - Anfänger-Themen 3
O Typparameter durch Wildcards verallgemeinern Java Basics - Anfänger-Themen 3
G Benutzereingaben durch Zeilenumbruch trennen und in Array individueller Größe speichern Java Basics - Anfänger-Themen 20
B Import Tabelle - Struktur durch User einstellbar Java Basics - Anfänger-Themen 4
K Durch eine Text eingabe etwas Ausführen Java Basics - Anfänger-Themen 5
T Konsolenscanner startet nicht durch Aufruf von Actionlistener Java Basics - Anfänger-Themen 4
A OOP Variable in anderer Klasse durch Methode aufrufen und einer anderen Variable gleichsetzen Java Basics - Anfänger-Themen 2
F Ein Datum (int) durch Methode als String formatieren Java Basics - Anfänger-Themen 2
B OOP While Schleife läuft Endlos durch externen aufruf Java Basics - Anfänger-Themen 2
D While Schleife bei Bedarf durch Eingabe stoppen Java Basics - Anfänger-Themen 15
CptK Interface Curser durch Bild ersetzen & MouseListner Java Basics - Anfänger-Themen 2
H OOP eine Zahl immer weiter durch 2 teilen Java Basics - Anfänger-Themen 15
I Null-Überprüfung durch Lambda-Expressions abkürzen Java Basics - Anfänger-Themen 8
W Teilstring durch Teilstring mittels StringBuilder ersetzen Java Basics - Anfänger-Themen 7
N Denksportaufgabe durch Algorithmus lösen Java Basics - Anfänger-Themen 2
H Array mit Zahlen die durch 3 und 5 teilbar sind erstellen Java Basics - Anfänger-Themen 13
D Interface Frame doppelt durch Aufruf der GUI Klasse Java Basics - Anfänger-Themen 1
J Die Zahl herausfinden die durch 2 - 30 Teilbar ist... Java Basics - Anfänger-Themen 17
M For-Schleife durch zwei versch. Variablen begrenzen Java Basics - Anfänger-Themen 27
W JLabel, Farbe durch Listener ändern Java Basics - Anfänger-Themen 6
T Extrahiertes Objekt durch Getter bekommen Java Basics - Anfänger-Themen 2
R Eine Schleife durch eine Methode schließen? Java Basics - Anfänger-Themen 4
N Operatoren Suchen nach einer bestimmten Eingabe (durch Scanner) Java Basics - Anfänger-Themen 7
S For-Schleife durch "ESC" verlassen? Java Basics - Anfänger-Themen 2
C char in String suchen und durch anderen String ersetzen Java Basics - Anfänger-Themen 2
T static String Variable wird nur beim ersten aufruf durch eine Funktion geändert. Java Basics - Anfänger-Themen 16
V Durch 0 teilen Java Basics - Anfänger-Themen 2
V Durch Methode Objekt löschen Java Basics - Anfänger-Themen 2
D Klasse durch eine Schleife wiederholen Java Basics - Anfänger-Themen 1
J Wie lege ich eine durch Random ausgesuchte Zahl in ein Array? Java Basics - Anfänger-Themen 3
S button kommt durch bild Java Basics - Anfänger-Themen 13
M Ein Bild durch Objekterzeugung zeichnen Java Basics - Anfänger-Themen 5
W Objektname durch Tastaturbefehl eingeben Java Basics - Anfänger-Themen 7
K ArrayList durch ArrayList ersetzen Java Basics - Anfänger-Themen 5
G Objektübergabe durch Parameter Java Basics - Anfänger-Themen 3
P Erste Schritte durch MenuBar verschiedene Fenster öffnen Java Basics - Anfänger-Themen 2
T Jlabel durch Text in 2 anderen Jlabels sichtbar machen Java Basics - Anfänger-Themen 4
T Threads Durch threads gestartete Prozesse killen Java Basics - Anfänger-Themen 2
M ArrayList durch OutputStream in Datei Java Basics - Anfänger-Themen 9
K arraygröße durch variablen Konstruktor? Java Basics - Anfänger-Themen 7
F Erste Schritte Hausaufgaben-Prob. - Iterative Prog. Zahlen aufsummieren, wenn durch k>0 teilbar. Java Basics - Anfänger-Themen 5
T Input/Output Programm beenden durch Eingabe Java Basics - Anfänger-Themen 1
K Tiefen- und Breitensuche beim Baum durch Stack und Warteschlange Java Basics - Anfänger-Themen 1
Ponychan95 Erste Schritte Switch fällt immer bis zum default durch Java Basics - Anfänger-Themen 4
J Warum wird Array durch Methode ohne Rückgabewert verändert? Java Basics - Anfänger-Themen 5
N Durch Objekte iterieren? Java Basics - Anfänger-Themen 3
J Durch 2-Dimensionales Array "bewegen" will nicht so recht hinhauen Java Basics - Anfänger-Themen 2
B Durch eine Liste von Strings laufen Java Basics - Anfänger-Themen 6
D javacode durch Html ausfuehren Java Basics - Anfänger-Themen 13
K Durch ArrayList laufen Java Basics - Anfänger-Themen 8
X Erste Schritte Lernen durch Videoreihe Java Basics - Anfänger-Themen 35
M Möglich? Methode aufrufen deren Bezeichner zur Laufzeit durch einen überg. String festgelegt wird Java Basics - Anfänger-Themen 3
T Best Practice JUnit: Wie Klassen durch Stubs/Mockups ersetzen Java Basics - Anfänger-Themen 7
H Text durch Checkbox erscheinen lassen Java Basics - Anfänger-Themen 2
J Datensätze aus Txt Datei auslesen - Datensätze durch stöbern Java Basics - Anfänger-Themen 5

Ähnliche Java Themen


Oben