让JLabel消失

Nir*_*han 3 java swing

我正在编写一个执行某项任务的应用程序,并在成功完成任务后通知用户.告知用户我正在使用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.那是问题吗?我想最初显示带有背景颜色的标签,然后逐渐消失.

mdm*_*dma 5

如果你正在做很多效果,你可以使用像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应用于它的子项,然后您可以以组件中立的方式淡入/淡出组件.其中一个动画套件中有一个组件,但我现在找不到它......