java - 使用 Timer 显示字符串数组中的字符串

标签 java arrays string timer

我正在尝试创建一个通过计时器切换短信的 jLabel。目前,我尝试在 Action 监听器中使用 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(); 
 }

}

代码仅显示数组中的最后一个字符串。帮忙T.T

最佳答案

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

关于java - 使用 Timer 显示字符串数组中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4579474/

相关文章:

java - 如何解决jsp到servlet的空间问题?

java - 如何以编程方式读取 jms 队列统计信息

java - 如何在 TokenEndPoint Spring oAuth2 中注入(inject) WebResponseExceptionTranslator

arrays - Bash 扩展通配括号破坏数组初始化

javascript - 使用 javascript 去除不允许选择的字符?

java - Java中如何比较日期?

c# - 从矩阵填充一维数组

arrays - 对数组进行切片或使用 Iterator::skip 哪个更有效?

c - 将命令行语句解析为标记列表

c# - 两个字符串之间的区别 C#