启用JLabel闪烁3次,然后保持不可见/消失

时间:2013-07-08 10:12:02

标签: java swing timer jlabel

我打算编写控制JLabel闪烁三次的java代码,然后在第三次闪烁后启用其中的文本保持透明/“消失”。

从下面的代码中可以看出,我已经能够编写一个连续闪烁的JLabel,但是想创建一个只闪烁三次的JLabel,然后使其中的文本保持透明。

public class BlinkLabel extends JLabel {

      private static final long serialVersionUID = 1L;

      private static final int BLINKING_RATE = 1000; // in ms

      private boolean blinkingOn = true;

      public Timer timer;

      public BlinkLabel(String text) {
        super(text);            
        timer = new Timer( BLINKING_RATE , new TimerListenerTwo());
        timer.setInitialDelay(0);
        timer.start();

      }

      public void setBlinking(boolean flag) {
        this.blinkingOn = flag;
      }

      public boolean getBlinking(boolean flag) {
        return this.blinkingOn;
      }

      public class TimerListenerTwo implements ActionListener{
            int counter = 1;

            public TimerListenerTwo() {

            }

            public void actionPerformed(ActionEvent evt){
                if(counter == 3){//3 = YOUR MAX
                    timer.stop();
                }
                counter++;
            }
       }
}

我按以下方式调用上述函数:

BlinkLabel label = new BlinkLabel("");
label.setText("Blink blink");

如何编辑上面的代码以使JLabel闪烁三次并使文本消失。

非常感谢任何想法/建议。

6 个答案:

答案 0 :(得分:3)

尝试使用counter并在counter上增加blink,如果计数器为3则 清除标签的文字setText("")

修改

class TimerListener implements ActionListener{
    int counter = 1;

    public void actionPerformed(ActionEvent evt){
        if(counter == 3){//3 = YOUR MAX
            timer.stop();
        }
        counter++;
    }
}

答案 1 :(得分:3)

非常简单,在JFrame或JDialog中创建一个子类。

class LbBlink implements ActionListener {  
        private javax.swing.JLabel label;
        private java.awt.Color cor1 = java.awt.Color.red;
        private java.awt.Color cor2 = java.awt.Color.gray;
        private int count;

        public LbBlink(javax.swing.JLabel label){
            this.label = label;
        }
        @Override
        public void actionPerformed(ActionEvent e) {
            if(count % 2 == 0)
                label.setForeground(cor1);
            else
                label.setForeground(cor2);
            count++;
        }  
    }

在你的班级中声明一个变量。

private Timer timerLB;

之后,在你的类构造中设置变量。

timerLB = new Timer(1000, new "Your Class".LbBlink("Your jLabel"));

最后,在您的应用程序中,开始闪烁

timerLB.start();

停止:

timerLB.stop();

答案 2 :(得分:2)

意思是代码行

  public void setBlinking(boolean flag) {
    this.blinkingOn = flag;
  }

  public boolean getBlinking(boolean flag) {
    return this.blinkingOn;
  }
  • 对(已经可见的)Swing GUI的每次更改都将在Swing Action ActionListener内完成

  • 那里(可能)没有理由继承JLabel,为JLabel创建局部变量,Swing Timer

  • 我想念代码Timer.setRepeats(boolean)

答案 3 :(得分:1)

计数闪烁,当它足够时,请在计时器上拨打stop

答案 4 :(得分:0)

不需要计时器。只需使用THREAD即可完成。

import java.awt.Color;
import javax.swing.*;

class Sample {
   int i;
   private JFrame f;
   private JLabel l;

Sample() throws InterruptedException {
    f = new JFrame("test");
    f.setSize(400, 400);
    l = new JLabel("Testing");
    f.add(l);
    f.setVisible(true);

    for (i = 0; i < 6; i++) {
        if (i % 2 == 0) {
            l.setForeground(Color.red);
        } else {
            l.setForeground(Color.BLUE);
        }
        Thread.sleep(500);
    }
    l.setEnabled(false);

}

public static void main(String a[]) throws InterruptedException {
    new Sample();
}

}

答案 5 :(得分:0)

有人建议使用displayHelpMessage(参考: https://blog.ajduke.in/2014/03/31/java-how-to-schedule-a-task-to-run-in-an-interval/

因此,我使用它并开发了Java代码,该代码在下面的JLabel(messageLabel)上闪烁3次给定文本。希望这能帮助那里的人。

top-nav-section a:link, a:hover, a:active{} 
/*is getting overridden by */
nav-2-section a:link, a:hover, a:active{}.