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()强制重绘,我会忘记它. 编辑 我想我看到了这个不起作用的真正原因.您正在设置标签的图形上下文的颜色.这没效果!任何涂抹其自身部分的组件都会在绘制任何东西之前立即设置颜色,即将其刷子浸入墨水中.当然,它为绘制字符字形而设置的颜色是原始标签颜色.只有标签绘画代码在绘图前愚蠢地忘记设置颜色时,您的方法才有效. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |