Java JPanel透明度问题
我有一个深灰色的Java JPanel透明度问题,java,swing,transparency,jlabel,Java,Swing,Transparency,Jlabel,我有一个深灰色的JPanel,上面有一个JLabel。我将新颜色(0,0,0,5f)(tranparent)设置为JLabel的背景,并使用按钮多次更改文本。问题是,每次文本更改时,前一个文本仍保留在新文本后面。我将文本从“123456789”改为“1234567”、“12345”和“123”。以下是截图: 我如何摆脱这个“阴影” 我有一个深灰色的JPanel,上面有一个JLabel。我设置了新颜色(0,0,0,5f)(tranparent) Swing不支持透明背景 Swing希望组件可以是
JPanel
,上面有一个JLabel
。我将新颜色(0,0,0,5f)
(tranparent)设置为JLabel
的背景,并使用按钮多次更改文本。问题是,每次文本更改时,前一个文本仍保留在新文本后面。我将文本从“123456789”改为“1234567”、“12345”和“123”。以下是截图:
我如何摆脱这个“阴影”
我有一个深灰色的JPanel,上面有一个JLabel。我设置了新颜色(0,0,0,5f)(tranparent)
Swing不支持透明背景
Swing希望组件可以是:
setOpaque(…)
方法用于控制组件的不透明属性
在任何一种情况下,这都可以确保移除任何绘制工件,并且可以正确完成自定义绘制
如果要使用tranparency,则需要自己进行自定义绘制,以确保清除背景
面板的自定义油漆应为:
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
对于每个使用透明度的组件,都需要类似的代码
或者,您可以查看可用于任何组件的自定义类,这些组件将为您完成上述工作。此相关功能还使
JPanel
半透明。尝试一下,也许它可以解决您的问题:
在行动中
public void actionPerformed(ActionEvent e) {
final JLabel tmpLabel = new JLabel(value[++i]); //change text
label.setFont(new Font("Times New Roman", 1, 36));
label.setForeground(new Color(255, 255, 255));
label.setBackground(new Color(0, 0, 0, .5f));
label.setHorizontalAlignment(SwingConstants.CENTER);
label.setOpaque(true);
label.setBounds(10, 10, 270, 70);
label = tmpLabel; //replace the entire label with a new label
}
运行一点代码就好了。不要使用空布局,我给你的解决方案很好用。如果你想使用一个空布局,那么它还有一行代码。空布局总是额外的工作,所以请学习如何使用布局管理器并节省时间。