我正在编写一个执行某项任务的应用程序,并在成功完成任务后通知用户.告知用户我正在使用jlabel.我希望这个jlabel在一段时间后显示消息和后退.我使用netbeans作为我的IDE.
这是我班级的架构.
摘要,GUI代码
abstract class Admin extends JFrame{
protected static jlabel lbl_message= new jlabel("some text");
// other functions and variables
abstarct protected void performButtonClickAction();
}
Run Code Online (Sandbox Code Playgroud)
用于实现抽象函数和提供其他功能的类.
final class AdminActionPerformer extends Admin{
final public void performButtonClickAction(){
// code for doin the task
if(task is successful){
new Thread(new Fader(Admin.lbl_message)).start();
}
}
public static void main(String[] args) {
new AdminActionPerformer().setVisible(true);
}
}
Run Code Online (Sandbox Code Playgroud)
使Jlabel后退的线程
class Fader implements Runnable{
javax.swing.JLabel label;
Color c;
Fader(javax.swing.JLabel label){
this.label=label;
c=label.getBackground();
}
public void run() {
int alpha=label.getGraphics().getColor().getAlpha()-5;
while(alpha>0){
System.out.println(alpha);
alpha-=25;
label.getGraphics().setColor(new Color(c.getRed(), c.getGreen(), c.getBlue(), alpha));
label.repaint();
try {
Thread.sleep(50);
} catch (InterruptedException ex) {
Logger.getLogger(Fader.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但标签并没有消失.我在这做错了什么?谢谢 :)
PS我设置了JLabel opaque true.那是问题吗?我想最初显示带有背景颜色的标签,然后逐渐消失.
如果你正在做很多效果,你可以使用像Trident这样的摇摆动画库.这是淡出标签的方法.
JLabel label = ....;
Timeline timeline = new Timeline(label);
timeline.addPropertyToInterpolate("background", label.getBackground(),
new Color(label.getBackground().getRGB(), true));
timeline.addPropertyToInterpolate("foreground", label.getForeground(),
new Color(label.getForeground().getRGB(), true));
timeline.play();
Run Code Online (Sandbox Code Playgroud)
编辑:更新以更改前景/背景颜色,这是标签上的属性.但是,对于生产代码,我会将标签包装在一个容器中,该容器可以将alpha应用于它的子项,然后您可以以组件中立的方式淡入/淡出组件.其中一个动画套件中有一个组件,但我现在找不到它......
归档时间: |
|
查看次数: |
7237 次 |
最近记录: |