Ändern der Hintergrundfarbe eines Absatzes in JTextPane (Java Swing)
-
10-07-2019 - |
Frage
Ist es möglich, die Hintergrundfarbe eines Absatzes in Java Swing zu ändern? Ich versuchte es mit dem setParagraphAttributes Verfahren (Code unten) gesetzt, aber scheint nicht zu funktionieren.
StyledDocument doc = textPanel.getStyledDocument();
Style style = textPanel.addStyle("Hightlight background", null);
StyleConstants.setBackground(style, Color.red);
Style logicalStyle = textPanel.getLogicalStyle();
doc.setParagraphAttributes(textPanel.getSelectionStart(), 1, textPanel.getStyle("Hightlight background"), true);
textPanel.setLogicalStyle(logicalStyle);
Lösung
UPDATE: Ich habe gerade herausgefunden über eine Klasse namens Highlighter.I glaubt nicht, sollten Sie den setBackground Stil werden. Verwenden Sie die DefaultHighlighter Klasse statt.
Highlighter h = textPanel.getHighlighter();
h.addHighlight(1, 10, new DefaultHighlighter.DefaultHighlightPainter(
Color.red));
Die ersten beiden Parameter des addHighlight Verfahren sind nichts anderes als der Startindex und endet Index des Textes Sie hervorheben möchten. Sie können diese Methode mehr nennen timesto diskontinuierliche Textzeilen zu markieren.
ALTE ANTWORT:
Ich habe keine Ahnung, warum die setParagraphAttributes Methode scheint nicht zu funktionieren. Aber dies zu tun scheint zu funktionieren.
doc.insertString(0, "Hello World", textPanel.getStyle("Hightlight background"));
Vielleicht können Sie jetzt einen Hack dieses Problem umgehen ...
Andere Tipps
ich benutze:
SimpleAttributeSet background = new SimpleAttributeSet();
StyleConstants.setBackground(background, Color.RED);
Dann können Sie vorhandene Attribute ändern mit:
doc.setParagraphAttributes(0, doc.getLength(), background, false);
oder fügen Sie Attribute mit dem Text:
doc.insertString(doc.getLength(), "\nEnd of text", background );
Einfache Möglichkeit, die Hintergrundfarbe des ausgewählten Textes oder Absatzes zu ändern.
//choose color from JColorchooser
Color color = colorChooser.getColor();
//starting position of selected Text
int start = textPane.getSelectedStart();
// end position of the selected Text
int end = textPane.getSelectionEnd();
// style document of text pane where we change the background of the text
StyledDocument style = textPane.getStyledDocument();
// this old attribute set of selected Text;
AttributeSet oldSet = style.getCharacterElement(end-1).getAttributes();
// style context for creating new attribute set.
StyleContext sc = StyleContext.getDefaultStyleContext();
// new attribute set with new background color
AttributeSet s = sc.addAttribute(oldSet, StyleConstants.Background, color);
// set the Attribute set in the selected text
style.setCharacterAttributes(start, end- start, s, true);