使用Timer在字符串数组中显示字符串

时间:2011-01-02 17:12:11

标签: java arrays string timer

我正在尝试创建一个通过Timer切换文本消息的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(); 
 }

}

代码仅显示数组中的最后一个String。帮助T.T

1 个答案:

答案 0 :(得分:2)

每次更新程序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;
};