verschiedene Farben in einem Text/Editfeld

Status
Nicht offen für weitere Antworten.

Tukuan

Mitglied
Ich hab nichts gefunden.
Aber was im Editor von Netbeans funktioniert, müsste doch auch hinzubekommen sein:
Ich brauche einen Editor für ne ini Datei.
Nun möchte ich gerne Sektionen, Parameter und Kommentare anders darstellen.
Kann man dieses mit einem JEditorPane machen?
Ich finde nichts wie - setStyle oder so...

Schon mal vielen Dank vorweg... :(
 

tini

Bekanntes Mitglied
ich würde ja mal setFont (für Größe und Style - fett, kursiv, ...) oder setForeground (für Farbe) vorschlagen
 
B

Beni

Gast
Verschiedene Farben /Grössen /etc in einem Dokument erreichst du mit einem StyledDocument.

Du benötigst: DefaultStyledDocument, die Methoden "addStyle", "insertString", und die Methoden der Klasse "javax.swing.text.StyleConstants".
 

Tukuan

Mitglied
und wenn etwas eingegeben wird?
Muss ich dann für jeden KeyPress überprüfen, ob das davor z.B. gerade eine Zahl ist?

Ich kann doch zum Beispiel NetBeans dazu bringen, eine Textzeile im Editor so zu formatieren:

if ( sHallo == "Hallo")
 

tini

Bekanntes Mitglied
:? ups! Da hab ich wohl nicht richtig gelesen. Würde mich deshalb Benis Lösung anschließen!
 

Tukuan

Mitglied
Fühl mich wie ein Anfänger - ach ja bin ja auch einer :oops:
Hört sich nicht schlecht an - mit dem Def.StyledDoc.
Aber nutzte ich das jEditorPanel und wie verknote ich die beiden?
Und was ist wenn man eingaben tätigte? Läuft dann automatisch.

Habt ihr vielleicht ein Beispiel?
 
B

Beni

Gast
Man setzt das Document mit "setDocument" dem EditorPane. Wie man dann aber das Syntaxhighlighting geschickt aufbaut, und auf Veränderungen reagiert, kann ich dir leider nicht sagen.

Roar hat sowas mal gebaut, und vielleicht ist er so freundlich...
 
R

Roar

Gast
du musst einen DocumentListener an dein Document hängen, der auf Veränderungen im Text reagiert. Dort musst du entsprechend intelligent reagieren, den text parsen und die farbattribute mit den von beni genannten methoden setzen für die entsprechenden stellen im text. bei ini dateien soltle das nicht so schwer sein. mal schaun, vielleicht bastel ich ja mal ein beispiel zusammen ;)
 
R

Roar

Gast
hallo,
folgender code funktioniert, ist aber mehr oder weniger bös zusammengeschustert :)
hab ein par dürftige kommentare hinzugefügt.
man könnte das ganze noch intelligenter machen, z.b. regex benutzen, nicht immer die ganze zeile neurendern nicht bei jedem getippten buchstaben neurendern etc.... :roll:
aber ich denke, so ist es eifnacher zu verstehen. und alles andere wäre overkill.

Code:
import java.awt.Color;

import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultStyledDocument;
import javax.swing.text.MutableAttributeSet;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;


public class IniDocument extends DefaultStyledDocument {

	// Die AttributeSets, die unsre Farben und sospeichern.
	private MutableAttributeSet section, text, value, comment;

	public IniDocument() {
		initAttributeSets();
	}

	/**
	 * Hier werden Farben und so gesetzt
	 */
	private void initAttributeSets() {
		section = new SimpleAttributeSet();
		StyleConstants.setForeground(section, new Color(176, 48, 96));
		StyleConstants.setBold(section, true);
		text = new SimpleAttributeSet();
		value = new SimpleAttributeSet();
		StyleConstants.setForeground(value, Color.BLUE);
		comment = new SimpleAttributeSet();
		StyleConstants.setForeground(comment, new Color(63, 127, 95));
	}

	@Override
	public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
		super.insertString(offs, str, a);
		render(offs, str.length());
	}

	@Override
	public void remove(int offs, int len) throws BadLocationException {
		super.remove(offs, len);
		render(offs, len);
	}

	/**
	 * Wird bei jeder Änderung aufgerufen, damit eine Zeile neu dargestellt wird.
	 * @param offs Der Offset der Änderung
	 * @param len Die Länge der Änderung
	 * @throws BadLocationException
	 */
	private void render(int offs, int len) throws BadLocationException {
		String s = getText(0, getLength()); // der text
		int beginning = s.lastIndexOf('\n', offs - 1) + 1;
		int end = s.indexOf('\n', offs + len);
		String process = s.substring(beginning, (end != -1 ? end : s.length())); // der textabschnitt
		String[] lines = process.split("\n"); // alle zeilen die neu gerendert werden sollen
		for(String line: lines) {
			renderLine(beginning, line);
			beginning += line.length() + 1;
		}
	}

	/**
	 * Parst und rendert eine Zeile.
	 * @param offs Der Offset im Dokument
	 * @param line Die Zeile
	 */
	private void renderLine(int offs, String line) {
		AttributeSet nextSet = null;
		char[] ar = line.toCharArray();
		for(int i = 0; i < ar.length; i++) {
			AttributeSet a = text; // das zu verwendende AttributeSet
			if(i != 0) // falls das nicht der erste Buchstabe der Zeile ist...
				a = getCharacterElement(offs + i - 1).getAttributes(); // ... benutze das Set des Vorgängers
			if(nextSet != null) {
				a = nextSet;
				nextSet = null;
			}
			char c = line.charAt(i);
			switch(c) { // such nach Zeichen mit Bedeutung
				case '=':
				case ':':
					if(line.lastIndexOf('=', i - 1) == -1 && line.lastIndexOf(':', i - 1) == -1) {
						nextSet = value;
					}
					break;
				case '[':
					a = section;
					break;
				case ']':
					nextSet = text;
					break;
				case ';':
				case '#':
					a = comment;
			}
			if(i != 0 && line.charAt(i - 1) == ']')
				a = text;
			setCharacterAttributes(offs + i, 1, a, true); // setze attribute
		}
	}
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Icewind Verschiedene Farben in einer JTextArea AWT, Swing, JavaFX & SWT 3
G listener repaint() - verschiedene Darstellung AWT, Swing, JavaFX & SWT 24
E verschiedene Cursor setzen AWT, Swing, JavaFX & SWT 1
I GUI, das verschiedene Panels hat (Von Seite zu Seite navigieren) AWT, Swing, JavaFX & SWT 7
RedEagle JavaFX Verschiedene Bereiche miteinander verknüpfen AWT, Swing, JavaFX & SWT 7
H 3 verschiedene Nachrichten in einer FXML View die Infos kommen aus DB AWT, Swing, JavaFX & SWT 4
E wie fängt man verschiedene Ereignisse ein mit MVC ? AWT, Swing, JavaFX & SWT 42
S JavaFX Optimierung für verschiedene Auflösungen AWT, Swing, JavaFX & SWT 12
Bartertown JTable - Verschiedene Komponenten in einer Spalte unterbringen AWT, Swing, JavaFX & SWT 3
H Verschiedene JPanels aus eigenen Klassen in JFrame einfügen, nur ein Panel sichtbar AWT, Swing, JavaFX & SWT 4
V Swing Nimbus Look And Feel verschiedene Buttons AWT, Swing, JavaFX & SWT 8
W Verschiedene Foreground color in Combo SWT Auswahlliste AWT, Swing, JavaFX & SWT 5
L AWT Window, Dialog und verschiedene Betriebssysteme AWT, Swing, JavaFX & SWT 2
M 3D-Grafik verschiedene Texturen auf einen Würfel mappen AWT, Swing, JavaFX & SWT 15
T Swing verschiedene Auflösungen AWT, Swing, JavaFX & SWT 7
J 3D-Grafik JOGL - Verschiedene Perspektiven darstellen AWT, Swing, JavaFX & SWT 5
R JTree - verschiedene Verzeichnisse AWT, Swing, JavaFX & SWT 3
T AWT verschiedene Oberflächen programmieren AWT, Swing, JavaFX & SWT 5
D verschiedene Zeichenebenen AWT, Swing, JavaFX & SWT 10
M Verschiedene Layouts anzeigen AWT, Swing, JavaFX & SWT 5
Dit_ Verschiedene Icons in einer JTable-Zelle AWT, Swing, JavaFX & SWT 2
H Swing TableCellRenderer für verschiedene Spalten AWT, Swing, JavaFX & SWT 11
N Verschiedene FormLayout in einem Panelbuilder AWT, Swing, JavaFX & SWT 3
D Verschiedene ActionEvents für ein JButton-Array AWT, Swing, JavaFX & SWT 2
M Swing Swing, MVC über verschiedene Panel AWT, Swing, JavaFX & SWT 4
P verschiedene JPanels einblenden je nach auswahl AWT, Swing, JavaFX & SWT 2
L Focus für KeyListener auf verschiedene Panels AWT, Swing, JavaFX & SWT 2
K Verschiedene ComboBoxen in JTable AWT, Swing, JavaFX & SWT 9
D 2 verschiedene Frames mit einem Button schliessen AWT, Swing, JavaFX & SWT 2
D Mit der Maus in verschiedene Modi wechseln AWT, Swing, JavaFX & SWT 15
I JTable: "GLEICHZEITIG" zwei verschiedene TableMode AWT, Swing, JavaFX & SWT 2
F GridLayout: verschiedene Spaltenbreiten AWT, Swing, JavaFX & SWT 2
S verschiedene Menuleisten AWT, Swing, JavaFX & SWT 2
S In einem button Panel 2 verschiedene TiteledBoarder erzeugen AWT, Swing, JavaFX & SWT 5
R Fenster in verschiedene Bereiche teilen - aber wie? AWT, Swing, JavaFX & SWT 4
D Mehrere verschiedene Textfelder auslesen? AWT, Swing, JavaFX & SWT 10
F Verschiedene Vordergrundfarben in einer TextArea AWT, Swing, JavaFX & SWT 4
G JFileChooser in verschiedene Sprachen? AWT, Swing, JavaFX & SWT 6
W JavaFX Farben dynamisch anpassen AWT, Swing, JavaFX & SWT 4
L JavaFX Fehler beim setzen von Farben AWT, Swing, JavaFX & SWT 16
J AWT System Farben / java.awt.SystemColor funktioniert nicht AWT, Swing, JavaFX & SWT 4
M UIManager funktioniert nicht mit Farben AWT, Swing, JavaFX & SWT 9
M Swing UIManager funktioniert nicht mit Farben AWT, Swing, JavaFX & SWT 0
T AWT Farben in einem Bild ändern AWT, Swing, JavaFX & SWT 8
M AWT Farben in Bild ersetzen AWT, Swing, JavaFX & SWT 11
B Bild bearbeiten mit Transparenz (spiegeln, Farben austauschen) AWT, Swing, JavaFX & SWT 8
O keine ähnliche Farben durch Random in Java AWT, Swing, JavaFX & SWT 21
E JTable farben ändern AWT, Swing, JavaFX & SWT 2
T Kontrast zweier Farben vergleichen AWT, Swing, JavaFX & SWT 5
J Auf die im Look and Feel eingestellten Farben zugreifen AWT, Swing, JavaFX & SWT 2
M Swing Zweidimensionales Array mit Farben erzeugen AWT, Swing, JavaFX & SWT 16
A AWT HSB-Farben dynamisch berechnen AWT, Swing, JavaFX & SWT 5
C JTable: Mehrere Farben in einer Zelle darstellen AWT, Swing, JavaFX & SWT 10
T bei einem jtextfield Farben benutzen AWT, Swing, JavaFX & SWT 7
K Farben in JMenues AWT, Swing, JavaFX & SWT 2
K Farben bei JMenus AWT, Swing, JavaFX & SWT 5
D Farben JList AWT, Swing, JavaFX & SWT 4
F Farben in Textpane AWT, Swing, JavaFX & SWT 14
S Farben eienr JTextPane dynamisch zuweisen AWT, Swing, JavaFX & SWT 2
D ComboBox mit Farben aus java.awt.color AWT, Swing, JavaFX & SWT 4
T Die Schrift in verschiedenen Farben blinken zu lassen AWT, Swing, JavaFX & SWT 2
G Knoten im Jtree mit unterscheidlichen Farben darstellen AWT, Swing, JavaFX & SWT 5
C Farben in BufferedImage ändern ? AWT, Swing, JavaFX & SWT 2
V Farben setzen bei einigen Komponenten (JScrollBar, . AWT, Swing, JavaFX & SWT 3
M Farben im TextArea AWT, Swing, JavaFX & SWT 5
T extends JButton übernehmen Farben AWT, Swing, JavaFX & SWT 4
S RGB Farben addieren AWT, Swing, JavaFX & SWT 1
B JList Zeilen in verschiedenen Farben markieren. AWT, Swing, JavaFX & SWT 3
K JTextArea mit verschiedenen Farben betreiben [Chat] AWT, Swing, JavaFX & SWT 3
G JTextArea.append() in verschiedenen Farben AWT, Swing, JavaFX & SWT 2
M Image: Kontrast, Helligkeit und Farben ändern? AWT, Swing, JavaFX & SWT 15
W Editor Syntax Farben AWT, Swing, JavaFX & SWT 2
R Farben ändern AWT, Swing, JavaFX & SWT 2
M Seltsame Exception bei setVisible(true) Methode in einem JFrame AWT, Swing, JavaFX & SWT 2
MartinNeuerlich Kann mir jemand, der einen Mac mit einem m1 oder m2-Chip hat, eine POM geben mit der Javafx-Fullscreen beim Mac mit m-Chip funktioniert? AWT, Swing, JavaFX & SWT 1
W 2 JTables in einem Swing-Fenster? AWT, Swing, JavaFX & SWT 5
J JavaFx PDF in einem Element in einem Fenster anzeigen. AWT, Swing, JavaFX & SWT 11
Mojo7310 Ändern von Text in JLabel mit einem Button AWT, Swing, JavaFX & SWT 11
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
S Swing zu einem Datum Tage addieren/subtrahieren AWT, Swing, JavaFX & SWT 6
E Swing Mausposition auf einem JFrame erkennen AWT, Swing, JavaFX & SWT 5
Jose05 NullPointerException bei Beschreiben eines Labels aus einem Array AWT, Swing, JavaFX & SWT 12
ExceptionOfExpectation Textdarstellung auf einem Canvas mit Hilfe von repaint(); AWT, Swing, JavaFX & SWT 6
2 JavaFX die ChoiceBox leitet den String nicht weiter oder es komm zu einem NullPointer AWT, Swing, JavaFX & SWT 8
L JavaFX javafx.fxml.LoadException bei einem Taschenrechner AWT, Swing, JavaFX & SWT 5
Z GUI Forms - Mehrere Fenster in einem Projekt AWT, Swing, JavaFX & SWT 18
N Nur bei einem Textfiled Nullpointerexception bei getText() AWT, Swing, JavaFX & SWT 1
H JComobox in einem JPopupNeu AWT, Swing, JavaFX & SWT 7
P Button simpler random auf einem JPanel verteilen? AWT, Swing, JavaFX & SWT 3
W Inject bei einem Swing Frontend AWT, Swing, JavaFX & SWT 8
H Daten aus einer XML(x83-Datei) in einem JFrame anzeigen lassen AWT, Swing, JavaFX & SWT 9
Z Swing Drag and Drop mit einem JButton AWT, Swing, JavaFX & SWT 1
Z Mit einem Button einen anderen Button Triggern AWT, Swing, JavaFX & SWT 3
D AWT Wie kann ich ein Frame von einem anderen aus beeinflussen? AWT, Swing, JavaFX & SWT 7
T Setzen von der Schriftgröße bei einem Shell AWT, Swing, JavaFX & SWT 15
A checkbox in einer TableView abhängig von einem anderen Celleninhalt disablen AWT, Swing, JavaFX & SWT 1
J Fenster mit Inhalten aus einem Array Füllen AWT, Swing, JavaFX & SWT 4
D JavaFX Ein Parameter von einem Stage(GUI) zu einem anderen übergeben AWT, Swing, JavaFX & SWT 6
T Bilder bei einem JFrame einfügen AWT, Swing, JavaFX & SWT 4
S JavaFX Variablen in einem FXML File verwenden AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen

Neue Themen


Oben