我正在尝试创建一个通过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
答案 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;
};