标签和面板透明度问题

时间:2017-05-20 16:17:41

标签: java swing frame jlabel opacity

Here there is my frame

如您所见,有一些组件(JLabel,JPanel,JTable,JScrollPane),我称之为metod C++ header。 在每次更新帧时,这些组件都会显示帧的其他组件的新“阴影”。

如何消除这些“阴影”?

1 个答案:

答案 0 :(得分:1)

  

每次更新帧时,这些组件都会显示帧的其他组件的新“阴影”

Swing不能正确支持半透明颜色,因为Swing期望组件完全不透明或完全透明。

因此,您需要确保首先绘制父组件以重置背景,然后手动绘制组件的背景:

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

有关详细信息,请参阅Backgrounds With Transparency以及将为您执行此绘制的可重用类。