2009-10-29 4 views
4

Возможно ли изменить цвет фона абзаца в Java Swing? Я попытался установить его, используя метод setParagraphAttributes (код ниже), но, похоже, не работает.Изменение цвета фона абзаца в JTextPane (Java Swing)

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

Обратите внимание, что установка атрибутов элемента элемента (правильно) с определенным цветом фона влияет только на символы этого абзаца. Это не повлияет на пространство справа (или слева) абзаца. Однако пользовательский «Highlighter.HighlightPainter» может быть предоставлен в «Highlighter» JTextComponent', чтобы это можно было сделать. –

ответ

3

UPDATE: Я только что узнал о классе называемые Highlighter.I не думаю, что вы должны использовать стиль setbackground. Вместо этого используйте класс DefaultHighlighter.

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

Первые два параметра метода addHighlight нет ничего, кроме начального индекса и заканчивая индексом текста, который вы хотите выделить. Вы можете вызвать этот метод несколько timesto выделить прерывистые строки текста.

OLD ОТВЕТ:

Я понятия не имею, почему метод setParagraphAttributes не кажется, работает. Но делать это, похоже, сработает.

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

Может быть, вы можете работать хак вокруг этого сейчас ...

+0

Спасибо за ответ. Вышеприведенный код работает, но он меняет только цвет фона, если текст присутствует. Я хочу, чтобы цвет фона был изменен, даже если текст отсутствует. (Как свойство цвета фона в CSS) – Sudar

+0

Вы указываете тег, который вы изменяете цвет фона в css. Что бы вы сделали в jtextpane? Вопрос в том, что вы должны определить, что демаркирует абзац для вас и установить цвет нет? Вы можете либо указать символы (или предварительно обозначенные области пикселей, если хотите), либо всю панель. Или используйте JEditorPane, я думаю, что CSS работает в JEditorPane ... – Jaskirat

+0

BTW просто попробовал css и даже в css, у вас нет bgcolor без текста в параграфе. Не знаю, что именно вы имеете в виду ... Я попробовал этот ' <стиль типа = "текст/CSS"> р {фонового цвета: RGB (255.0.255);}

Это параграф.

Ниже пара оленьей кожи содержит какой-либо текст, поэтому его не подсвечивается ...

' – Jaskirat

3

Я использую:

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

Затем вы можете изменить существующие атрибуты с помощью:

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

Или добавить атрибуты с текстом:

doc.insertString(doc.getLength(), "\nEnd of text", background); 
+0

Я не хочу, чтобы весь текст панель должна быть окрашена.Я хочу, чтобы только один абзац был окрашен. Я пробовал ваш подход, и он, похоже, не работает. – Sudar

+0

Конечно. Все, что вам нужно сделать, это изменить значения начала, длины. Это прочитало API, чтобы понять, как работают параметры для каждого метода. – camickr

0

Простой способ изменить цвет фона выбранного текста или абзаца.

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