2009-10-29 126 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

請注意,使用特定背景顏色設置段落元素屬性(正確)將僅影響該段落的字符。它不會影響該段落右側(或左側)的空間。然而,可以爲JTextComponent的Highlighter提供一個自定義的'Highlighter.HighlightPainter'來做到這一點。 –

回答

3

UPDATE: 我只是發現了一類名爲Highlighter.I不認爲你應該使用的setBackground風格。改爲使用DefaultHighlighter類。

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

addHighlight方法的前兩個參數不過是要突出顯示的文本的起始索引和結束索引。您可以多次調用此方法突出顯示不連續的文本行。

OLD答:

我不知道爲什麼似乎沒有了setParagraphAttributes方法工作。但這樣做似乎有效。

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

也許你可以工作一個黑客解決這個現在...

+0

感謝您的回覆。上面的代碼可以工作,但它只會改變背景顏色,如果文本存在。我想要改變背景顏色,即使文本不存在。 (像CSS中的背景顏色屬性) – Sudar

+0

您指定您正在改變CSS背景顏色的標籤。你會在jtextpane中做什麼?問題是,你必須爲你劃定一段文字並設定顏色不是?您可以指定字符(或者預先指定的像素區域),也可以指定整個窗格。 或使用JEditorPane,我認爲CSS在JEditorPane中工作... – Jaskirat

+0

順便說一句,剛剛嘗試過CSS,甚至在CSS中,你不能在段落中沒有任何文本的bgcolor。不知道究竟你的意思是...... 我想這 ' <風格類型= 「文/ CSS」> p {背景色: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);