我有一个深灰色,上面JPanel
有一个JLabel
。我将new Color(0, 0, 0, .5f)
(透明)设置为背景,JLabel
并使用按钮多次更改文本。问题是,每次更改文本时,以前的文本仍然落后于新文本。我将文本从“123456789”更改为“1234567”、“12345”和“123”。这是屏幕截图:
如何摆脱这个“阴影”?
我有一个深灰色,上面JPanel
有一个JLabel
。我将new Color(0, 0, 0, .5f)
(透明)设置为背景,JLabel
并使用按钮多次更改文本。问题是,每次更改文本时,以前的文本仍然落后于新文本。我将文本从“123456789”更改为“1234567”、“12345”和“123”。这是屏幕截图:
如何摆脱这个“阴影”?
我有一个带有 JLabel 的深灰色 JPanel。我设置了 new Color(0, 0, 0, .5f) (透明)
Swing 不支持透明背景。
Swing 期望一个组件是:
该setOpaque(...)
方法用于控制组件的 opaque 属性。
在任何一种情况下,这都可以确保删除任何绘画工件,并且可以正确完成自定义绘画。
如果要使用透明度,则需要自己进行自定义绘画以确保清除背景。
面板的自定义绘画将是:
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
半透明。
试试这个,也许它会解决你的问题:在 actionPeroformed..
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
}