【发布时间】:2013-08-08 03:50:58
【问题描述】:
在花几分钟时间调整我的桌面时钟时,我发现了一个我似乎无法在没有帮助的情况下解决的问题...我阅读了一些有类似问题的帖子,但解决方案对我不起作用。
时钟(以典型的 Java 形式,带有动作监听器和日历)工作得很好。 预期的调整:将 Frame、ContentPane 和 Label 背景设置为透明,以便仅显示时间/文本。
发生的情况是这样的:当标签背景是透明的(或者在 Opaque 为 true 时通过设置 Alpha 直到它足够不透明),底层之前的显示保持不变。
为了帮助解决这个问题,我将以下代码放在一起 - 时间和日期日历的东西/等被排除在外。这段代码只是我尝试过的许多版本中的一个版本,有/没有不透明,调用的位置......等等。
不同的是使用动作监听器 - 如果动作监听器被评论/删除,标签的显示正常。取消注释 Action Listener 并出现问题。
查看图片...感谢您的帮助...谢谢!
fyi - 下面:代码没有导入和 cmets...
黑色背景时钟截图
问题截图:
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();
}
}
【问题讨论】:
标签: java swing opacity jlabel transparent