标签和面板透明度问题
Issue on label and panel's transparency
这是我的框架:
如您所见,我调用了一些组件(JLabel、JPanel、JTable、JScrollPane)setBackgroundColor(new Color(r, g, b, a))
。
在框架的每次更新中,这些组件都会显示框架其他组件的新“阴影”。
如何消除这些“影子”?
At each update of the frame, these components show new "shadows" of other components of the frame
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 了解更多信息和可重复使用的 class 可以为您完成这幅画。
这是我的框架:
如您所见,我调用了一些组件(JLabel、JPanel、JTable、JScrollPane)setBackgroundColor(new Color(r, g, b, a))
。
在框架的每次更新中,这些组件都会显示框架其他组件的新“阴影”。
如何消除这些“影子”?
At each update of the frame, these components show new "shadows" of other components of the frame
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 了解更多信息和可重复使用的 class 可以为您完成这幅画。