ERLEDIGT
JA
JA
ANTWORTEN
7
7
ZUGRIFFE
485
485
EMPFEHLEN
-
Hi,
ich möchte ein Programm schreiben, in dem ich ausgewählte Buchstaben eines Strings einfärben kann. Sowie das hier auf dieser Seite funktioniert:
http://www.ebi.ac.uk/cgi-bin/protein...einColourer.pl
Ich habe auch schon probiert htlm einzubinden, um Zeichen einzufärben. Dabei habe ich herausgefunden das das scheinbar nicht mit einer jTextArea funktioniert. Deshalb habe ich den jEditorPane und auch den jTextPane genommen. Trotzdem funktioniert es nicht.
Hat jemand eine Idee, wie ich mein Vorhaben in die Tat umsetzen kann?
Vielen Dank im Voraus
-
13.09.11 17:23 #2
- Registriert seit
- Jun 2009
- Beiträge
- 870
Du könntest mit RTFEditorKit (javax.swing.text.rtf) arbeiten, den Text analysieren und wenn eine gewisse Zeichenfolge kommt diese mit RTF-Tags einfärben.
An sonsten müsstest du die Renderer-Klasse einer JTextPane/JEditorPane überschreiben, was vermutlich sehr aufwändig wird.Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.Code java:1
System.out.println("Hallo");
___________
Ubuntu Bug #1: Microsoft has a majority market share
Casecon: Projekt leiser Käse
-
13.09.11 17:26 #3
Es geht auf jeden Fall mit HTML und JEditorPane! Beispiel:
Code java:1
JEditorPane editor = new JEditorPane("text/html","<P><FONT COLOR=blue>blue</FONT></P>");
Jeder Fehler, aus dem wir lernen, ist ein Erfolg...
...Aber mach' nicht den Fehler, nicht aus deinen Fehlern zu lernen.
-
13.09.11 19:21 #4
- Registriert seit
- Dec 2009
- Beiträge
- 125
Hey,
sobald man versucht den Style eines Textes zu verändern, haben die hierfür nötigen Komponenten fast immer das Prefix "Rich" im Namen, wie z.B. RichTextBox usw. - Einfach mal googlen, da wirste auf jeden fall fündig.
Gruß
Sebastian
-
Hi,
vielen Dank. Ich habs jetzt doch mit HTML und dem JEditorPane hinbekommen.
Jetzt steh ich vor dem Problem, dass ich ausgewählte Buchstaben aus einem String färben will. Also ich habe eine jTextArea ein jTextField einen jButton und den jEdittorPane. Ich habe einen String definiert, der den Text aus der Area holt z.B. String Text = jTextArea.getText(), als nächstes habe ich das mit dem TextField auch so gemacht z.B. String rot = jTextField.getText().
Jetzt wolte ich replace nutzen also: Text = Text.replace(rot, "<font color=red>" + rot + "</font>") und dann mit dem Klick auf den Button im jEditorPane ausgeben, mit jEditorPane.setText(Text). Das funktioniert auch, solange die Buchstaben, die ich in das TextField reinschreibe im String aneinander liegen oder ich nur einen Buchstaben verwende aber z.B. wenn der String Text = "ASDFGH" heißt und ich möchte nur ADG einfärben funktioniert das nicht mehr. Könnt ihr mir sagen was ich falsch mache?
Ich habs nochmal kopiert, für den Fall, dass mein Text etwas verwirrend ist:
Text = jTextArea.getText();
rot = jTextField.getText();
blau = jTextField1.getText();
Text = Text.replace(rot, "<font color=red>" + rot + "</font>");
Text = Text.replace(blau, "<font color=blue>" + blau + "</font>");
jEditorPane.setText(Text);Geändert von Steppo110 (14.09.11 um 13:30 Uhr)
-
14.09.11 13:29 #6SE Tutorials.de Gastzugang
Dann müsstest du mit replaceAll() und RegEx arbeiten *API > java.util.regex.Pattern ... sehr schöne Übersicht und Erklärung*.
Da das ganze aber ziemlich tricky ist und du die Strings des JTextFields erstmal mit einer weiteren RegEx bearbeiten müsstest wäre das ne ganze Menge Code ... leider ... für einen so simplen Effekt.
Was du vor hast wurde ja am Beispiel wunderbar gezeigt ... jedoch ist sowas weit aus komplexer als es aussieht.
-
Hallo, das geht aber auch ohne HTML.
dein Problem hat doch Ähnlichkeit mit dem Highliten von Keywords, oder?
Hier mal nen Code den ich zum Highliten von Batch-Scripten verwendet habe:
Code java:1 2
doc = new HighlitedBatchDocument(); text = new JTextPane(doc);
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
package batch; import java.awt.Color; import java.awt.EventQueue; import javax.swing.text.AttributeSet; import javax.swing.text.BadLocationException; import javax.swing.text.DefaultStyledDocument; import javax.swing.text.Element; import javax.swing.text.SimpleAttributeSet; import javax.swing.text.StyleConstants; public class HighlitedBatchDocument extends DefaultStyledDocument { private static final String[] keywords = { "pause", "color ", "cls", "if ", "shutdown ", "mode ", "for ", "do ", "set ", "start ", "copy ", "xcopy ", "mkdir ", "md ", "taskkill ", "ren ", "ping ", "title ", "goto ", ":" }; public void highlightText() { // Schutz vor overflow Runnable thread = new Runnable() { public void run() { String text = null; try{ text = getText(0, getLength()); } catch(BadLocationException ex){ } // erstmal wieder alles in schwartz setForeground(0, text.length(), Color.black); int index = text.indexOf("@"); while(index != -1){ // "@" in blau setForeground(index, index+1, Color.magenta); index = text.indexOf("@", index+1); } // andere Schlüsselwörter in Blau for(String keyword : keywords){ index = text.indexOf(keyword); while(index != -1){ setForeground(index, index+keyword.length(), Color.blue); // Rest der Zeile in Schwartz setForeground(index+1+keyword.length(), text.indexOf("\n", index+1+keyword.length()), Color.black); index = text.indexOf(keyword, index+1); } } index = text.indexOf("echo"); while(index != -1){ // "echo" in blau setForeground(index, index+4, Color.blue); // Text von "echo" in orange setForeground(index+5, text.indexOf("\n", index+5), Color.orange); index = text.indexOf("echo", index+1); } index = text.indexOf(" on"); while(index != -1){ // "on" in blau setForeground(index+1, index+3, Color.black); index = text.indexOf(" on", index+1); } index = text.indexOf(" off"); while(index != -1){ // "off" in blau setForeground(index+1, index+4, Color.black); index = text.indexOf(" off", index+1); } index = 0; // Variablen (z.B. %testvar%) in schwartz int firstModulo = 0; while(index != -1 && firstModulo != -1){ if(firstModulo == 0){ firstModulo = text.indexOf("%", index+1); } else{ index = text.indexOf("%", firstModulo+1); setForeground(firstModulo, index+1, Color.black); firstModulo = 0; } } // Variablen (z.B. %%i) in schwartz index = text.indexOf("::"); while(index != -1){ // Kommentare in Hellgrau setForeground(index, text.indexOf("\n", index), Color.gray); index = text.indexOf("::", index+1); } index = text.indexOf(">>"); while(index != -1){ // ">>" in blau setForeground(index, index+2, Color.blue); // Text nach ">>" in schwartz setForeground(index+2, text.indexOf("\n", index+2), Color.black); index = text.indexOf(">>", index+1); } index = text.indexOf("::"); while(index != -1){ // Kommentare in Hellgrau setForeground(index, text.indexOf("\n", index), Color.gray); index = text.indexOf("::", index+1); } }; }; EventQueue.invokeLater(thread); } public void setForeground(int startPosition, int endPosition, Color col) { for(int i = startPosition; i < endPosition; i++){ setForeground(getSimpleAttributeSet(i), i, col); } } private void setForeground(SimpleAttributeSet sas, int pos, Color col) { StyleConstants.setForeground(sas, col); setCharacterAttributes(pos, 1, sas, true); } private SimpleAttributeSet getSimpleAttributeSet(int pos) { Element ele = getCharacterElement(pos); AttributeSet as = ele.getAttributes(); SimpleAttributeSet sas = new SimpleAttributeSet(as); return sas; } }
hoffentlich klappts damit, ist natürlich keine direkte Lösung für dein Problem, aber so siehst du, wie es ohne HTML funktioniert.
Gruß
-
14.09.11 21:36 #8SE Tutorials.de Gastzugang
Gut ... mit nem StyledDocument rumspielen ist mir nicht eingefallen ... ich finde es aber gerade für Swing-Komponenten ne gute Lösung.
Ähnliche Themen
-
letztes Zeichen eines Strings auslesen
Von supercat1510 im Forum PHPAntworten: 8Letzter Beitrag: 10.07.09, 23:29 -
Bestimmte Teile eines Strings auslesen
Von ShOrtYk im Forum PHPAntworten: 6Letzter Beitrag: 01.09.07, 17:01 -
Bestimmte Zeichen am Anfang ein Strings löschen
Von budking im Forum PHPAntworten: 2Letzter Beitrag: 12.10.04, 16:07 -
Erste x Zeichen eines Strings formatieren
Von raspunicum im Forum PHPAntworten: 4Letzter Beitrag: 06.09.04, 16:50 -
bestimmtes Zeichen am ende eines Strings
Von Rodney im Forum PHPAntworten: 2Letzter Beitrag: 29.10.03, 13:05





Zitieren
Login





