gpt4 book ai didi

java - JLabel 的背景变化会改变组件

转载 作者:行者123 更新时间:2023-12-01 07:42:23 30 4
gpt4 key购买 nike

我使用的代码是:

public class Test extends JFrame implements ActionListener {

private static final Color TRANSP_WHITE =
new Color(new Float(1), new Float(1), new Float(1), new Float(0.5));
private static final Color TRANSP_RED =
new Color(new Float(1), new Float(0), new Float(0), new Float(0.1));
private static final Color[] COLORS =
new Color[]{TRANSP_RED, TRANSP_WHITE};
private int index = 0;
private JLabel label;
private JButton button;

public Test() {
super();

setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
label = new JLabel("hello world");
label.setOpaque(true);
label.setBackground(TRANSP_WHITE);

getContentPane().add(label);

button = new JButton("Click Me");
button.addActionListener(this);

getContentPane().add(button);

pack();
setVisible(true);
}

@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(button)) {
label.setBackground(COLORS[index % (COLORS.length)]);
index++;
}
}

public static void main(String[] args) {
new Test();
}
}

当我单击按钮更改拉巴莱斯颜色时,GUI 如下所示:

之前: alt text后: alt text

有什么想法吗?

最佳答案

您为 JLabel 提供了半透明的背景,但您已指定它是不透明的。这意味着 Swing 在为 JLabel 提供用于绘图的 Graphics 对象之前不会绘制其下的组件。提供的 Graphics 包含垃圾,它希望 JLabel 在绘制其背景时覆盖这些垃圾。然而,当它绘制背景时,它是半透明的,因此垃圾仍然存在。

要解决此问题,您需要创建 JLabel 的扩展,该扩展不是不透明的,但具有重写的 PaintComponent 方法,该方法将绘制您想要的背景。

编辑:这是一个示例:

public class TranslucentLabel extends JLabel {
public TranslucentLabel(String text) {
super(text);
setOpaque(false);
}

@Override
protected void paintComponent(Graphics graphics) {
graphics.setColor(getBackground());
graphics.fillRect(0, 0, getWidth(), getHeight());
super.paintComponent(graphics);
}
}

关于java - JLabel 的背景变化会改变组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2487671/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com