3

私は、JLabel を 3 回点滅させ、3 回目の点滅後にその中のテキストを透明のままにして「消える」ように制御する Java コードを書くつもりです。

以下のコードからわかるように、連続的に点滅する JLabel を作成できましたが、3 回だけ点滅する 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 が 3 回点滅し、テキストが消えるようにするにはどうすればよいですか。

どんなアイデア/提案も大歓迎です。

4

6 に答える 6

3

a を使用してon everycounterを増やしてみて、カウンターが 3 の場合は、ラベルのテキストをクリアします。counterblinksetText("")

編集

class TimerListener implements ActionListener{
    int counter = 1;

    public void actionPerformed(ActionEvent evt){
        if(counter == 3){//3 = YOUR MAX
            timer.stop();
        }
        counter++;
    }
}
于 2013-07-08T10:16:59.420 に答える
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)

于 2013-07-08T10:38:43.927 に答える
1

まばたきを数えて、十分な時間になったらタイマーを停止します。

于 2013-07-08T10:19:31.130 に答える
0

誰かが displayHelpMessage の使用を提案しました (参照: https://blog.ajduke.in/2014/03/31/java-how-to-schedule-a-task-to-run-in-an-interval/ )

それで、私はそれを使用して、以下の JLabel(messageLabel) で指定されたテキストを 3 回点滅させる Java コードを開発しました。これが誰かを助けることを願っています。

    static int counter = 0;
    static ScheduledExecutorService service;

    void displayHelpMessage(String message) 
    {
        Runnable runnable = new Runnable() {
            public void run() {
                // task to run goes here
                if (counter++ >= 6) {
                    service.shutdown();
                    counter = 0;
                } else {
                    if (counter % 2 == 1) {
                        messageLabel.setForeground(Color.red);
                    } else {
                        messageLabel.setForeground(Color.black);
                    }
                }
            }
        };
        messageLabel.setText(message);
        service = Executors.newSingleThreadScheduledExecutor();
        service.scheduleAtFixedRate(runnable, 0, 750, TimeUnit.MILLISECONDS);
    }   

// Call examples:       
    displayHelpMessage("How to select panel");        
    displayHelpMessage("Key to use complete create/modify");
于 2016-06-25T03:06:24.760 に答える