gpt4 book ai didi

java - JLabel 保留以前的文本

转载 作者:行者123 更新时间:2023-11-30 04:17:09 25 4
gpt4 key购买 nike

当花了几分钟调整我的桌面时钟时,我发现了一个问题,如果没有帮助,我似乎无法解决......我读了一些有类似问题的帖子,但解决方案对我不起作用。

时钟(采用典型的 java 形式,带有 Action 监听器和日历)工作得很好。 预期的调整:将框架、内容 Pane 和标签背景设置为透明,以便仅显示时间/文本

发生的情况是这样的:当标签背景是透明的(或者直到 Opaque 为 true 时通过设置 Alpha 使其变得足够不透明为止),底层的先前显示将保持不变并且不会清除。

为了帮助解决这个问题,我将以下代码放在一起 - 时间和日期日历内容/等被排除。这段代码只是我尝试过的许多版本之一,有/没有不透明、调用位置等。

真正起作用的是操作监听器的使用 - 如果操作监听器被注释/删除,标签的显示正常。取消注释 Action Listener,就会出现问题。

查看图像...任何帮助表示赞赏...谢谢!

仅供引用 - 下面:代码没有导入和注释...

带有黑色背景的时钟截图
enter image description here

问题截图:
enter image description here

public class Clear extends JFrame {
private JPanel contentPane;
Color ppColor = new Color(255, 255, 0, 0); // r,g,b,a
Color lblColor = new Color(225, 200, 200, 0);
Color lbl2Color = new Color(225, 200, 200, 254);
int delay = 1000;
JLabel lblTime = new JLabel("TESTING");
JLabel lblTime2 = new JLabel("XXXXXX");

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
final Clear frame = new Clear();
frame.setVisible(true);
}
catch (Exception e) {
e.printStackTrace();
}
}
});
}

public Clear() {
setUndecorated(true);
setBackground(ppColor);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(1680, 975, 128, 74);

contentPane = new JPanel();
contentPane.setBackground(ppColor);
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);

lblTime.setOpaque(true);
lblTime.setBackground(lblColor);
lblTime.setBounds(0, 0, 125, 30);
contentPane.add(lblTime);

lblTime2.setOpaque(true);
lblTime2.setBackground(lbl2Color);
lblTime2.setBounds(0, 33, 125, 16);
contentPane.add(lblTime2);

ActionListener myTaskPerformer = new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
lblTime.setText("Does it");
lblTime2.setText("work? ");
}
};
new Timer(delay, myTaskPerformer).start();
}
}

最佳答案

Swing 组件不能很好地处理基于 alpha 的颜色。它们要么完全透明,要么完全不透明。

如果您指定组件为 isOpaque,但使用半透明(alpha)颜色填充它,则重绘管理器不会更新组件后面的区域和图形 code> 上下文将不会被正确清除。请记住,Graphics 上下文是共享资源,因此在组件之前绘制的所有内容仍将被绘制

您可以看看Java Swing Graphical Glitches Dealing with Transparency and Images了解更多详情。

但是。最简单的解决方案是创建一个 TranslucentPane,它是 JPanel 之类的扩展,使其透明(而不是不透明),覆盖它的 paintComponent 方法并从其中绘制半透​​明(alpha)颜色。然后将您的标签添加到此上。

查看Performing Custom PaintingPainting in AWT and Swing了解更多详情

关于java - JLabel 保留以前的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18092049/

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