工件显示 JTextPane 背景颜色的自定义颜色的使用

Artifact shows on usage of custom color for JTextPane Background Color

使用定制颜色后:

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

对于 JTextPane 背景,我可以看到 JTextPane 的背景与来自 Jlabel 的部分背景一起显示,其中包括 JTextPane

现场图片:

因此 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);

我想我遇到了类似的问题。您至少需要将 JTextPane 的容器设为不透明且不透明。否则 Swing 会非常错误地计算背景。我认为您可能会将其报告为错误。

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 class link.