2

次のように、アルファ値を持つ前景色で 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 のレンダリング中に、前景色のアルファ値が無視されているようです。

Windows 7 64 ビットで Java 1.6.0_26 (32 ビット) を使用しています。

これはバグまたは既知の制限ですか、それとも何か問題がありますか?

4

2 に答える 2

2

HTML コードと setForeground スタイルを一緒に混在させることはできません。

JLabel html text ignores setFontおよび Oracle の JLabels( 1 ) チュートリアルの使用方法を参照してください。

HTML または JLabel スタイルを使用するだけです。

于 2012-09-30T17:27:42.160 に答える
1

私自身の質問に可能な答えを与えるために、HTMLレンダリングでアルファ透過を行う方法を見つけました。JLabelの「paintComponent」メソッドをオーバーライドし、指定されたGraphics2DインスタンスでAlphaCompositeを使用するだけです。

@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 );
}
于 2012-09-30T21:14:33.427 に答える