2016-08-12 2 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 ожидает, что компонент будет полностью непрозрачным или не основан на свойстве 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 неправильно вычисляет фон. Вы можете сообщить об этом как об ошибке, я думаю.

Смежные вопросы