JTextPane - Text andersfarbig unterstreichen

Status
Nicht offen für weitere Antworten.

diggaa1984

Top Contributor
hallo,

vorsorglich schonmal eine Frage :D

Für meinen Editor würde ich gerne wie in Eclipse fehlerhafte Syntax rot unterstreichen lassen .. das sich diese Farbe nun von der Farbe des Syntaxhighlighting unterscheiden kann, wäre es keine Lösung die fehlerhafte Stelle durch ein "underline"-Attribut zu erweitern.

In Eclipse gibts ja die schicke wellenlinie. Ich könnte mir vorstellen das es mit einem weiteren Layer gehen würde, den ich über das TextPane lege, aber dann müsste ich abhängig von Offset des Fehlers und Schriftart/-größe die Position bestimmen, an welcher die Linie anfängt und aufhört - richtig? Das klingt schon ein wenig unangenehm.

Gibt es vielleicht noch andere Lösungen, die ich nicht kenne? Bei Vorhandensein des Fehlers habe ich zumindest das Start- und EndOffset zur Verfügung. Ich möchte aber nicht den Text in dem TextPane einfärben, das fände ich als Nutzer irretierend und ich könnte auch keine Farbe direkt vorschreiben, da der Nutzer fürs Syntaxhighlighting aus der kompletten Palette des JColorChoosers wählen darf. Somit laufe ich Gefahr, das Fehlerfarbe und Nutzersetting sich zu sehr ähneln
 

Ebenius

Top Contributor
Vorab: Ich hab sowas noch nie gemacht. Ein JLayeredPane ist aber sicher nicht die richtige Lösung. Die JTextPane benutzt die [c]javax.swing.text.View[/c]-Klasse und deren Derivate. Die Views werden über eine [c]javax.swing.text.ViewFactory[/c] erzeugt, diese wiederum wird vom EditorKit geholt. Dein EditorKit muss also eine ViewFactory haben die für die Fehlerelemente eine andere View erzeugt... Nehme ich an. ;-)

Auf die Lösung bin ich selber sehr gespannt. Bisher hab ich das nicht gebraucht, ist aber bestimmt ein schöner Sport.

Diesen Artikel kennst Du sicher (hilft aber höchstens bedingt): Customizing a Text Editor

Ebenius
 

diggaa1984

Top Contributor
oje eine welt bricht zusammen .. ebenius weiss nich weiter .. wie soll ich das dann packen ^^ .. naja in diesen regionen (view-factory etc.) hab ich gar nicht gedacht. Mal schauen vielleicht führt mich der pfad ja an ne sinnvolle stelle :D
 

Ebenius

Top Contributor
Jetzt ist's zu spät. Also, ist gar nicht sooo schwer.

Java:
/* (@)JEditorFun.java */

/* Copyright 2009 Sebastian Haufe

 * Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       [url]http://www.apache.org/licenses/LICENSE-2.0[/url]

 * Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License. */

package com.ebenius.swing;

import java.awt.*;

import javax.swing.*;
import javax.swing.text.*;

/**
 * Test for customized text markup.
 * 
 * @author Sebastian Haufe
 */
public class JEditorFun {

  static class MyEditorKit extends StyledEditorKit {

    @Override
    public Document createDefaultDocument() {
      return new DefaultStyledDocument();
    }

    @Override
    public ViewFactory getViewFactory() {
      final ViewFactory viewFactory = super.getViewFactory();
      return new ViewFactory() {

        public View create(Element elem) {
          final String kind = elem.getName();
          if (AbstractDocument.ContentElementName.equals(kind)) {
            final AttributeSet atts = elem.getAttributes();
            if (atts.containsAttribute("error", "underlined")) {
              return new LabelView(elem) {

                @Override
                public void paint(Graphics g, Shape a) {
                  super.paint(g, a);
                  Rectangle alloc =
                        (a instanceof Rectangle) ? (Rectangle) a : a
                              .getBounds();
                  g.setColor(Color.PINK);
                  g.drawLine(alloc.x, alloc.y + alloc.height - 2, alloc.x
                        + alloc.width, alloc.y + alloc.height - 2);
                }
              };
            }
          }
          return viewFactory.create(elem);
        }
      };
    }
  }

  /**
   * Test main method.
   * 
   * @param args ignored
   * @throws BadLocationException
   */
  public static void main(String[] args) throws BadLocationException {
    final EditorKit kit = new MyEditorKit();

    final JTextPane editor = new JTextPane();
    editor.setEditorKit(kit);
    final StyledDocument document = editor.getStyledDocument();
    final Style style1 = document.addStyle("style1", null);
    final Style style2 = document.addStyle("style2", style1);
    style2.addAttribute("error", "underlined");
    document.insertString(document.getLength(), "ABC", style1);
    document.insertString(document.getLength(), "DEF", style2);
    document.insertString(document.getLength(), "GHI", style1);

    final JPanel contentPane = new JPanel(new BorderLayout(6, 6));
    contentPane.add(editor);

    final JFrame f = new JFrame("Test Frame: JEditorFun"); //$NON-NLS-1$
    f.setContentPane(contentPane);
    f.pack();
    f.setLocationRelativeTo(null);
    f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    f.setVisible(true);
  }
}
Die Kringel musst Du selber reinmalen.

Ebenius
 

diggaa1984

Top Contributor
ok, du machst mir angst :d .. nu hast dein bild wieder gerade gerückt .. bei mir hätts wahrscheinlich n stück länger gedauert :toll:

Die Kringel musst Du selber reinmalen.
ich geb mich auch gern mit einer linie zufrieden, soviel fummelei muss ja nich sein, ist auch nicht gefordert, das mach ich nur weil ich es möchte und komfortabler finde für den nutzer ^^
 

diggaa1984

Top Contributor
gut bissel fummelei hab ich schon noch .. wie ich grad merke.
Zwar kann ich erzwingen das ich per remove und insert immer wieder neue views erzeuge für den zu editierenden text .. aber ich hab noch n problem, wenn ich dann neuen text eingebe oder sich alles verschiebt und so weiter und so fort ... teilweise werden die attribute übernommen und son kram ^^ .. muss ich ma in ruhe rumspielen .. aber dank dir is das ja nur detailarbeit :)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Swing JTextPane, Bilder und Text-flow AWT, Swing, JavaFX & SWT 2
E Swing jTextPane Text datei anzeigen AWT, Swing, JavaFX & SWT 7
T Text in JTextPane vertikal (!) zentrieren AWT, Swing, JavaFX & SWT 4
C Swing JTextPane zeigt HTML-Text aus Variable nicht an :( AWT, Swing, JavaFX & SWT 3
A JTextPane: Text hinzufügen AWT, Swing, JavaFX & SWT 9
E Swing JTextPane Inhalt(Text und Bilder) als HTML text bekommen AWT, Swing, JavaFX & SWT 3
S JTextPane - markierten Text Formatieren AWT, Swing, JavaFX & SWT 11
M Makierten Text in JTextPane zentrieren AWT, Swing, JavaFX & SWT 2
D JTextPane Text anklickbar machen bzw. Hyperlink erstellen? AWT, Swing, JavaFX & SWT 5
F Vertikaler Text in einem JTextPane AWT, Swing, JavaFX & SWT 3
D Text in JTextPane vergrößern AWT, Swing, JavaFX & SWT 12
M JTextPane schreibt keinen farbigen Text! AWT, Swing, JavaFX & SWT 7
P JTextPane ALIGN_JUSTIFIED zeigt den Text zentriert an? AWT, Swing, JavaFX & SWT 8
0 Mehrfarbigen Text in JTextPane einfügen AWT, Swing, JavaFX & SWT 2
N JTextPane und Text zu bereits existierenden Text hinzufügen? AWT, Swing, JavaFX & SWT 8
Z JTextPane (text/html): Schrift festlegen AWT, Swing, JavaFX & SWT 5
B Stylen eines JTextPane funktioniert nicht AWT, Swing, JavaFX & SWT 1
T JTextPane ignoriert HTML Zeilenumbruch <br> tag wegen eigenem HTMLEditorKit AWT, Swing, JavaFX & SWT 5
J Swing JTextpane aktuallisiert nicht den setText? AWT, Swing, JavaFX & SWT 9
M Strings im JTextPane vergleichen und mit StyledDocument formatieren AWT, Swing, JavaFX & SWT 3
X JTextPane automatischer Zeilenumbruch IM Wort AWT, Swing, JavaFX & SWT 2
R GUI Element in einer Methode aktualisieren (JTextPane) AWT, Swing, JavaFX & SWT 13
D Swing Breite einer HTML Tabelle in einer JTextPane AWT, Swing, JavaFX & SWT 6
S Swing Warum funktioniert der automatische Zeilenumbruch mit arabischen Zeichen beim JTextPane nicht AWT, Swing, JavaFX & SWT 3
S Swing JtextPane sau langsam AWT, Swing, JavaFX & SWT 15
J Swing JTextPane mit JScrollPane auf JPanel scrollen nicht AWT, Swing, JavaFX & SWT 6
C JTextPane scrollt mit setText() immer nach oben AWT, Swing, JavaFX & SWT 2
S Swing Style Attribute aus JTextPane kopieren AWT, Swing, JavaFX & SWT 1
E JTextPane Focus AWT, Swing, JavaFX & SWT 1
TheJavaKid JTextPane: komplexe Formatierung (links) AWT, Swing, JavaFX & SWT 2
B Swing JTextPane - Einfärbungen auf "default" AWT, Swing, JavaFX & SWT 2
A Swing Einrücken mehrerer Zeilen per Tab in einem JTextPane/JTextArea AWT, Swing, JavaFX & SWT 3
T JtextPane Zeile aktualisieren AWT, Swing, JavaFX & SWT 3
T Hintergrundbild in JTextPane fixieren AWT, Swing, JavaFX & SWT 2
M Swing JTextPane frisst Anführungszeichen AWT, Swing, JavaFX & SWT 2
M Swing JTextPane + Scrollbar = Fragen AWT, Swing, JavaFX & SWT 15
H Swing JTextPane hat unästhetisches Scrollbar AWT, Swing, JavaFX & SWT 3
R Swing Renderproblem bei HTML in einer JTextPane AWT, Swing, JavaFX & SWT 12
N Swing JTextPane zur Anzeige von HTML AWT, Swing, JavaFX & SWT 2
xehpuk Swing Line-wrapping von JTextPane (in JScrollPane) AWT, Swing, JavaFX & SWT 3
Tobse Swing [JTextPane] Farbliche Hervorhebung AWT, Swing, JavaFX & SWT 9
X Swing JTextPane bei Größenänderung Formatierung behalten AWT, Swing, JavaFX & SWT 11
0 JTextPane copy/paste trotz editable(false) ? AWT, Swing, JavaFX & SWT 10
T Swing JTextPane Tastatureingabe abfangen AWT, Swing, JavaFX & SWT 4
B Durchsichtiges JScroll und JTextPane AWT, Swing, JavaFX & SWT 4
xehpuk Swing JTextPane in JScrollPane wird nicht ordentlich neugezeichnet AWT, Swing, JavaFX & SWT 3
S Swing JTextPane append formatprobleme AWT, Swing, JavaFX & SWT 5
C JTextPane / JEditorPane ohne Keywords farbig machen AWT, Swing, JavaFX & SWT 4
C Zeilenumbruch von JTextPane wird nicht erkannt AWT, Swing, JavaFX & SWT 2
S JEditorPane oder JTextPane? AWT, Swing, JavaFX & SWT 2
P Aktuelle Zeile in JTextPane farblich hervorheben AWT, Swing, JavaFX & SWT 3
J JTextPane Background setzen AWT, Swing, JavaFX & SWT 6
M Zugriff paralleler Threads auf selbes JTextPane AWT, Swing, JavaFX & SWT 6
M JTextPane - bewegungsloses Hintergrundsbild (Duplikat) AWT, Swing, JavaFX & SWT 2
B JTextPane formatierten Inhalt speichern AWT, Swing, JavaFX & SWT 2
E JTextPane setText ignoriert \n AWT, Swing, JavaFX & SWT 6
P Swing Sichtbaren teil eines JTextPane herausbekommen (mit JScrollPane) AWT, Swing, JavaFX & SWT 2
T Zeichen zählen JTextPane AWT, Swing, JavaFX & SWT 4
K Swing JTextPane Formatierungen SyntaxHighlighting AWT, Swing, JavaFX & SWT 11
F Mit TAB JTextPane wechseln AWT, Swing, JavaFX & SWT 5
J JSlider auf JTextPane? AWT, Swing, JavaFX & SWT 2
S Buchstabenpositionen in JTextPane erhalten..? AWT, Swing, JavaFX & SWT 5
I JTextPane und Hyperlink (ohne JEditorPane) AWT, Swing, JavaFX & SWT 5
T Swing JTextArea, JTextPane, JEditorPane...Unterschied?! AWT, Swing, JavaFX & SWT 3
A Swing JTextPane sehr langsam AWT, Swing, JavaFX & SWT 6
P Drucken von Jtextpane mit Seitenangabe AWT, Swing, JavaFX & SWT 1
M Swing JTextPane mit JScrollPane soll aussehen wie JLabel AWT, Swing, JavaFX & SWT 3
K Swing jTextPane zeilenumbruch AWT, Swing, JavaFX & SWT 2
Stillmatic JTextPane langsam? AWT, Swing, JavaFX & SWT 5
E Swing JTextPane linewrap AWT, Swing, JavaFX & SWT 4
M Swing [JTextPane] Cursor lässt sich nicht mit Pfeiltasten bewegen AWT, Swing, JavaFX & SWT 3
T Swing xml in JTextPane mit EditorKit, StyledDocument & co. AWT, Swing, JavaFX & SWT 3
M Cursor setzen im JTextPane AWT, Swing, JavaFX & SWT 3
M Formatierungsfehler JTextPane WARUM ?? AWT, Swing, JavaFX & SWT 4
JavaKaffee Array auslesen in jTextPane? AWT, Swing, JavaFX & SWT 9
E JTextPane Bold Italic und Co AWT, Swing, JavaFX & SWT 6
M JTextPane Ende des Feldes AWT, Swing, JavaFX & SWT 4
P Probleme mit JTextpane AWT, Swing, JavaFX & SWT 7
M Größe von JTextPane manuell bei Bedarf anpassen AWT, Swing, JavaFX & SWT 6
bugmenot JTextPane String stimmt nicht mit übergebenem String überein AWT, Swing, JavaFX & SWT 9
C JTextPane <br oder <p> statt \n AWT, Swing, JavaFX & SWT 2
C JTextPane HTML und eigene Tags AWT, Swing, JavaFX & SWT 10
G JTextPane durchsichtig? AWT, Swing, JavaFX & SWT 6
GilbertGrape Fehler bei HTML in JTextPane AWT, Swing, JavaFX & SWT 2
S JTextPane: Probem mit AlignmentAction AWT, Swing, JavaFX & SWT 3
J Problem mit JTextPane & JScrollPane (horizontal) AWT, Swing, JavaFX & SWT 3
B JTextPane und Image importieren in HTML String. AWT, Swing, JavaFX & SWT 2
J JTextPane mit genau 80 Zeichen breite definieren? AWT, Swing, JavaFX & SWT 3
J Html in JTextPane anzeigen? AWT, Swing, JavaFX & SWT 2
Steev JTextPane mit Textformatierung funktioniert nicht AWT, Swing, JavaFX & SWT 5
P HTMLDocument in einem JTextPane. Anhängen von HTML-Code AWT, Swing, JavaFX & SWT 2
F JTextPane aktive Zeile AWT, Swing, JavaFX & SWT 2
G insert & JTextPane AWT, Swing, JavaFX & SWT 4
J JTextPane bekommt keinen Focus! AWT, Swing, JavaFX & SWT 3
S Farben eienr JTextPane dynamisch zuweisen AWT, Swing, JavaFX & SWT 2
R JTextPane scrollen vermeiden AWT, Swing, JavaFX & SWT 2
B Feste Breite einer JTextPane, die HTML anzeigt AWT, Swing, JavaFX & SWT 8
A JScrollPane in JTextPane AWT, Swing, JavaFX & SWT 2
B Swing Logging: Ein/Ausblenden eines scrollenden JTextPane AWT, Swing, JavaFX & SWT 2
F Java JTextPane AWT, Swing, JavaFX & SWT 13

Ähnliche Java Themen

Neue Themen


Oben