2016-08-12 90 views
0

定製顏色的使用率使用定製顏色之後:工件示出了對的JTextPane背景顏色

Color bg = new Color(0f,0f,0f,0.5f); 

用於JTextPane背景我可以看到的JTextPane這一背景中示出與來自Jlabel包括背景的部分其中有JTextPane

圖片發生的事情的:

Image of problem

所以JTextPane背景的底部是確定的,但最上面的一個,這是一個文本背後是有一些問題。

我該如何解決?我爲JTextPane使用簡單透明背景的自定義顏色而犯了錯誤嗎?

代碼爲這部分程序:

t = new JTextPane(); 
SimpleAttributeSet style = new SimpleAttributeSet(); 
StyleConstants.setAlignment(style , StyleConstants.ALIGN_CENTER); 
StyleConstants.setForeground(style , Color.white); 
StyleConstants.setFontFamily(style, "Times new Roman"); 
StyleConstants.setFontSize(style, 20); 
StyleConstants.setBold(style, true); 
t.setParagraphAttributes(style,true); 
t.setText(" " + text.getT1().get(0).toUpperCase()); 
t.setOpaque(true); 
Color bg = new Color(0f,0f,0f,0.5f); 
t.setBackground(bg); 
t.setEditable(false); 
t.setBounds(250, 400, 300, 50); 
animation.add(t); 

回答

5

Swing不能正確支持透明背景。 Swing期望組件完全不透明或不基於setOpaque(....)屬性。

當使用透明背景時,您需要確保在繪製透明組件的背景之前先繪製父容器的背景。

查看Background With Transparency以瞭解關於此過程的更多信息。

您可以自定義組件,並用這樣的代碼做你自己的繪畫:

JPanel panel = new JPanel() 
{ 
    protected void paintComponent(Graphics g) 
    { 
     g.setColor(getBackground()); 
     g.fillRect(0, 0, getWidth(), getHeight()); 
     super.paintComponent(g); 
    } 
}; 

panel.setOpaque(false); // background of parent will be painted first 
panel.setBackground(new Color(255, 0, 0, 20)); 
frame.add(panel); 

或者更簡單的方法是使用上面的鏈接提供的AlphaContainer類。

0

我想我有一個類似的問題。您需要至少將JTextPane的容器製作成不透明的不透明。否則Swing非常錯誤地計算背景。您可能會將此報告爲我認爲的錯誤。