如何使用 jlabel 创建 运行 文本?
How to create running text with jlabel?
假设我有一个带有文本的 jlabel。我希望文本每秒都在向左变化,就像广告牌上的 运行 文本一样。
可能吗?如果是,怎么做?
您应该使用 javax.swing.Timer
来安排 JLabel
更新。请参阅下面的简化代码段:
JFrame frame = new JFrame("Test");
frame.setSize(300, 300);
JLabel label = new JLabel("This is text!!!");
frame.add(label);
frame.setVisible(true);
final int labelWidth = 300;
final AtomicInteger labelPadding = new AtomicInteger();
Timer timer = new Timer(20, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
label.setBorder(new EmptyBorder(0, labelPadding.getAndIncrement() % labelWidth, 0, 0));
}
});
timer.start();
请注意,AtomicInteger
不是必需的,但您需要一些 final
持有者才能在内部 class 或 lambda 中使用它。
假设我有一个带有文本的 jlabel。我希望文本每秒都在向左变化,就像广告牌上的 运行 文本一样。
可能吗?如果是,怎么做?
您应该使用 javax.swing.Timer
来安排 JLabel
更新。请参阅下面的简化代码段:
JFrame frame = new JFrame("Test");
frame.setSize(300, 300);
JLabel label = new JLabel("This is text!!!");
frame.add(label);
frame.setVisible(true);
final int labelWidth = 300;
final AtomicInteger labelPadding = new AtomicInteger();
Timer timer = new Timer(20, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
label.setBorder(new EmptyBorder(0, labelPadding.getAndIncrement() % labelWidth, 0, 0));
}
});
timer.start();
请注意,AtomicInteger
不是必需的,但您需要一些 final
持有者才能在内部 class 或 lambda 中使用它。