使用 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();
}
}
该代码仅显示数组中的最后一个字符串。帮助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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
每次运行更新程序 ActionListener 时,它都会循环遍历所有消息,为每条消息设置标签文本。在更新程序结束时,最后一条消息显示在标签中。它发生得如此之快,您只是看不到前三个消息在被覆盖之前被设置。
您需要一个 ActionListener 来记住接下来应该显示什么消息。
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.