Java JLabel在呈现HTML时忽略前景色的alpha值

时间:2012-09-30 17:15:48

标签: java html jlabel alpha

当我使用具有alpha值的前景色的JLabel时,如下所示:

JLabel label = new JLabel( "This is non HTML text with correct alpha color" );
label.setForeground( new Color( 1.0f, 1.0f, 1.0f, 0.5f) );

标签正确显示0.5-alpha,因此50%灰色。

但是当我将文本更改为HTML(以便更好地控制文本呈现)时,就像这样:

JLabel label = new JLabel( "<html><p>This is HTML text with incorrect alpha color</p></html>" );
label.setForeground( new Color( 1.0f, 1.0f, 1.0f, 0.5f) );

然后标签是100%白色。看来,在渲染HTML时,前景色的alpha值只是被忽略了。

我在Windows 7 64位下使用Java 1.6.0_26(32位)。

这是一个错误还是一个已知的限制,或者这里有什么问题吗?

2 个答案:

答案 0 :(得分:2)

您不能将HTML代码和setForeground样式混合在一起。

请参阅oracle的JLabel html text ignores setFont和如何使用JLabels(1)教程。

只需使用HTML或JLabel样式。

答案 1 :(得分:1)

为了对我自己的问题给出一个可能的答案,我找到了一种通过HTML渲染实现alpha透明度的方法。只需覆盖JLabel的“paintComponent”方法,并将AlphaComposite与给定的Graphics2D实例一起使用:

@Override
protected void paintComponent( Graphics g )
{
    Composite alphaComposite = AlphaComposite.getInstance( AlphaComposite.SRC_OVER, 0.5f );

    Graphics2D g2d = (Graphics2D)g.create();
    g2d.setComposite( alphaComposite );

    super.paintComponent( g2d );
}