加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 让JLabel消失

发布时间:2020-12-15 05:16:39 所属栏目:Java 来源:网络整理
导读:我正在编写一个执行某项任务的应用程序,并在成功完成任务后通知用户.告知用户我正在使用jlabel.我希望这个jlabel在一段时间后显示消息和后退.我使用netbeans作为我的IDE. 这是我班级的架构. 摘要,GUI代码 abstract class Admin extends JFrame{ protected st
我正在编写一个执行某项任务的应用程序,并在成功完成任务后通知用户.告知用户我正在使用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();

}

用于实现抽象函数和提供其他功能的类.

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);
 }

}

使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);
        }
     }
  }
}

但标签并没有消失.我在这做错了什么?谢谢 :)

附:我设置了JLabel opaque true.那是问题吗?我想最初显示带有背景颜色的标签,然后逐渐消失.

解决方法

我同意Johannes的观点,即从不同的Thread更新UI可能不会很好.有一些机制,如SwingWorker和SwingUtilities.invokeLater,可以解决您的错误线程问题.

但是,我看到的更大的问题是,你正在与你的JLabel争论谁. JLabel是一个普通的组件,每当它的容器被刷新时,它就会以其通常的颜色重新绘制.这是“谁最后画,赢了”的案例.

另类建议:为什么不简单地摆弄标签的颜色属性?如果使前景色接近背景色,则会看到它褪色.当你改变它的颜色时,标签会重新绘制自己,或者你可以使用update()或repaint()强制重绘,我会忘记它.

编辑

我想我看到了这个不起作用的真正原因.您正在设置标签的图形上下文的颜色.这没效果!任何涂抹其自身部分的组件都会在绘制任何东西之前立即设置颜色,即将其刷子浸入墨水中.当然,它为绘制字符字形而设置的颜色是原始标签颜色.只有标签绘画代码在绘图前愚蠢地忘记设置颜色时,您的方法才有效.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读