【发布时间】:2019-03-12 17:16:44
【问题描述】:
我在制作游戏时遇到问题。我正在尝试使用计时器淡化 JLabel。到目前为止,我已经能够将 JLabel 设置为透明,并且我已经能够制作一个工作定时器。但不知何故,我无法将它们结合在一起。我可以将 JLabel 的背景设置为
l.setBackground(new Color(0, 0, 0, 200));
(当然需要 JLabel 来改变颜色) 它有效。 JLabel 是透明的。 但我无法将其放入计时器中以使颜色变淡:
public static void fadeLabel(JLabel lab, int steps, int target) {
class fade extends Thread {
public void run() {
Timer t = new Timer(10, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println(lab.getBackground().getAlpha());
lab.setBackground(new
Color(lab.getBackground().getRed(),
lab.getBackground().getGreen(),
lab.getBackground().getBlue(),
lab.getBackground().getAlpha() + steps));
if (lab.getBackground().getAlpha() == target) {
((Timer) e.getSource()).stop();
}
}
});
t.start();
}
}
new Thread(new fade()).start();
}
相反,它只是从黑色变为透明。中间什么都没有。它还会引发错误java.lang.IllegalArgumentException: Color parameter outside of expected range: Alpha。但是,我已将步长设置为 -5(在这种情况下,它淡出的速率,因为它是负数),如果您还记得,我将 alpha 设置为可被 5 整除的值,我也有一个检查器何时到达目标,以便在到达该目标时停止计时器。有什么我做错了吗? JLabel 的背景更新太快而无法显示?任何帮助都会很棒。
编辑:
我已经修复了java.lang.IllegalArgumentException: Color parameter outside of expected range: Alpha。但是关于 JLabel 不褪色的另一个问题仍然存在,我不知道如何修复它。
【问题讨论】:
-
您需要提供我可以下载和运行的代码。
-
@Abra 我将提供尽可能多或尽可能少的代码。请问您需要什么?
-
一个小而完整的程序,使用您已经发布的代码。一个带有
main方法的 java 类,用于构建您的 Swing GUI 并启动您的标签褪色代码。 -
您是否希望计时器触发 10 次回调?
标签: java swing transparency jlabel