java 显示倒计时_JLabel显示倒计时,java

我同意您应该考虑按照Anh Pham使用“Java”计时器,但实际上,有几个Timer类可用,并且为了您的目的,Anh建议的Swing Timer而不是java.util.Timer将适合您的目的最好.

至于你的问题,它只不过是一个简单的引用问题.为类赋予标签一个公共方法,比如setCountDownLabelText(String text),然后从包含计时器的类中调用该方法.您需要在另一个类中使用计时器JLabel引用GUI类.

例如:

import java.awt.BorderLayout;

import java.awt.CardLayout;

import java.awt.Color;

import java.awt.Dimension;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.*;

public class Welcome extends JPanel {

private static final String INTRO = "intro";

private static final String USED_BEFORE = "used before";

private CardLayout cardLayout = new CardLayout();

private JLabel countDownLabel = new JLabel("", SwingConstants.CENTER);

public Welcome() {

JPanel introSouthPanel = new JPanel();

introSouthPanel.add(new JLabel("Status:"));

introSouthPanel.add(countDownLabel);

JPanel introPanel = new JPanel();

introPanel.setPreferredSize(new Dimension(400, 300));

introPanel.setLayout(new BorderLayout());

introPanel.add(new JLabel("WELCOME", SwingConstants.CENTER), BorderLayout.CENTER);

introPanel.add(introSouthPanel, BorderLayout.SOUTH);

JPanel usedBeforePanel = new JPanel(new BorderLayout());

usedBeforePanel.setBackground(Color.pink);

usedBeforePanel.add(new JLabel("Used Before", SwingConstants.CENTER));

setLayout(cardLayout);

add(introPanel, INTRO);

add(usedBeforePanel, USED_BEFORE);

new HurdlerTimer(this).start();

}

private static void createAndShowUI() {

JFrame frame = new JFrame("Welcome");

frame.getContentPane().add(new Welcome());

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.pack();

frame.setLocationRelativeTo(null);

frame.setVisible(true);

}

public static void main(String[] args) {

java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {

createAndShowUI();

}

});

}

public void setCountDownLabelText(String text) {

countDownLabel.setText(text);

}

public void showNextPanel() {

cardLayout.next(this);

}

}

class HurdlerTimer {

private static final int TIMER_PERIOD = 1000;

protected static final int MAX_COUNT = 10;

private Welcome welcome; // holds a reference to the Welcome class

private int count;

public HurdlerTimer(Welcome welcome) {

this.welcome = welcome; // initializes the reference to the Welcome class.

String text = "(" + (MAX_COUNT - count) + ") seconds left";

welcome.setCountDownLabelText(text);

}

public void start() {

new Timer(TIMER_PERIOD, new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

if (count < MAX_COUNT) {

count++;

String text = "(" + (MAX_COUNT - count) + ") seconds left";

welcome.setCountDownLabelText(text); // uses the reference to Welcome

} else {

((Timer) e.getSource()).stop();

welcome.showNextPanel();

}

}

}).start();

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值