Использование таймера для отображения строк в массиве строк - PullRequest
0 голосов
/ 02 января 2011

Я пытаюсь создать jLabel, который переключает текстовые сообщения через таймер.В настоящее время я пытался использовать циклы for в слушателе действий, но безуспешно.

import javax.swing.JPanel;
import javax.swing.Timer;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JLabel;
import java.awt.Rectangle;

public class TimerX extends JPanel{

 private static final long serialVersionUID = 1L;
 private JLabel jLabelNumber = null;
 private Timer timer = new Timer(100, null);
 private String [] messages = new String [4];{
  messages [0] = "HI";
  messages [1] = "How";
  messages [2] = "Are";
  messages [3] = "You";
 }


 public TimerX() {
  super();
  initialize();
 }


 private void initialize() {
  jLabelNumber = new JLabel();
  jLabelNumber.setBounds(new Rectangle(99, 85, 38, 16));
  this.setSize(300, 200);
  this.setLayout(null);
  this.add(jLabelNumber, null);
  ActionListener updater = new ActionListener(){
  public void actionPerformed(ActionEvent event) {
   for(int i = 0; i<messages.length;i++)
        jLabelNumber.setText(messages[i]);
     }
  };
  timer.addActionListener(updater);
  timer.start(); 
 }

}

Код отображает только последнюю строку в массиве.Справка ТТ

1 Ответ

2 голосов
/ 02 января 2011

Каждый раз, когда запускается ваш обновитель ActionListener, он просматривает все сообщения, устанавливая текст вашей метки для каждого сообщения. В конце вашего обновления, последнее сообщение отображается в ярлыке. Это происходит так быстро, что вы просто не видите первых трех установленных сообщений, пока они не были перезаписаны.

Вам необходим ActionListener, который может запомнить, какое сообщение должно отображаться следующим.

ActionListener updater = new ActionListener() {
  public void actionPerformed(ActionEvent evt) {
    jLabelNumber.setText(messages[i]);

    i++;
    if (i >= messages.length) {
      i = 0;
    }
  }

  private int i = 0;
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...