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

发布于 2024-10-09 21:07:13 字数 1126 浏览 0 评论 0原文

我正在尝试创建一个通过计时器切换短信的 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(); 
 }

}

该代码仅显示数组中的最后一个字符串。帮助TT

I am trying to create a jLabel that switches text messages via Timer. Currently, I have tried using for loops in the action listener but to no success.

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(); 
 }

}

The code only displays the the last String in the array. Help T.T

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

浅笑轻吟梦一曲 2024-10-16 21:07:13

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

Every time your updater ActionListener runs, it loops through all of the messages, setting your label text to each message. At the end of your updater, the last message is showing in the label. It happens so fast, you just don't see the first three messages being set, before they are overwritten.

You need an ActionListener that can remember what message it should display next.

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

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

  private int i = 0;
};
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文