java swing colors background jtextpane

Cambiar el color de fondo de un párrafo en JTextPane(Java Swing)



colors background (3)

¿Es posible cambiar el color de fondo de un párrafo en Java Swing? Intenté configurarlo usando el método setParagraphAttributes (código a continuación) pero parece que no funciona.

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);


Yo suelo:

SimpleAttributeSet background = new SimpleAttributeSet(); StyleConstants.setBackground(background, Color.RED);

Luego puede cambiar los atributos existentes usando:

doc.setParagraphAttributes(0, doc.getLength(), background, false);

O agrega atributos con texto:

doc.insertString(doc.getLength(), "/nEnd of text", background );


ACTUALIZACIÓN: Acabo de enterarme de una clase llamada Highlighter. No creo que debas usar el estilo setbackground. Use la clase DefaultHighlighter en su lugar.

Highlighter h = textPanel.getHighlighter(); h.addHighlight(1, 10, new DefaultHighlighter.DefaultHighlightPainter( Color.red));

Los dos primeros parámetros del método addHighlight no son más que el índice inicial y el índice final del texto que desea resaltar. Puede llamar a este método varias veces para resaltar líneas discontinuas de texto.

ANTIGUA RESPUESTA:

No tengo idea de por qué el método setParagraphAttributes parece no funcionar. Pero hacer esto parece funcionar.

doc.insertString(0, "Hello World", textPanel.getStyle("Hightlight background"));

Tal vez puedas trabajar un hack alrededor de esto por ahora ...


Forma fácil de cambiar el color de fondo del texto o párrafo seleccionado.

//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);