当前位置: 首页 > 面试题库 >

JLabel显示倒计时,Java

阎修明
2023-03-14
问题内容

我在一堂课(名为“欢迎”)中有一个“状态”
JLabel,而在另一堂课(名为Timer)中有一个计时器。现在,第一个显示“状态”一词,第二个应该进行倒计时。我想要的样子,但不知道如何显示10、9、8、7
… 0(然后转到下一个窗口)。到目前为止,我的尝试:

// class Welcome

setLayout(new BorderLayout());
JPanel area = new JPanel();
JLabel status = new JLabel("status");
area.setBackground(Color.darkGray);
Font font2 = new Font("SansSerif", Font.BOLD, 25);
status.setFont(font2);
status.setForeground(Color.green);      
area.add(status, BorderLayout.EAST); // can I put it in the bottom-right corner?
this.add(area);

和计时器:

 public class Timer implements Runnable {

//  public void runThread() {
//      new Thread(this).start();
//  }

public void setText(final String text) {
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            setText(text); // link to status here I guess
        }
    });
}

public void run() {
    for (int i = 10; i > 0; i--) {
        // set the label
        final String text = "(" + i + ") seconds left";
        setText(text);

//          // sleep for 1 second
//          try {
//              Thread.currentThread();
//              Thread.sleep(1000);
//          } catch (Exception ex) {
//          }
    }
    // go to the next window
    UsedBefore window2 = new UsedBefore();
    window2.setVisible(true);
}

public static void main(String[] args) {
    // TODO Auto-generated method stub
    // runThread();
}

} // end class

问题答案:

我同意您应该考虑按照Anh Pham使用“ Java”计时器,但是实际上,有几个可用的Timer类,并且出于您的目的,Swing
Timer不是Anh建议的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();
   }

}


 类似资料:
  • 本文向大家介绍js倒计时显示实例,包括了js倒计时显示实例的使用技巧和注意事项,需要的朋友参考一下 话不多说,请看实例代码 以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持呐喊教程!

  • 我试图创建一个倒计时计时器,努力让它显示小时、分钟、秒。 努力使分钟和小时正确显示。 除此之外,我还需要计时器在午夜开始计时17小时。按照3600*17(17小时)的思路思考,然后去掉剩余的持续时间?

  • 本文向大家介绍android倒计时控件示例,包括了android倒计时控件示例的使用技巧和注意事项,需要的朋友参考一下 本文为大家分享了android倒计时控件,供大家参考,具体代码如下 希望本文所述对大家学习Android软件编程有所帮助。

  • 问题内容: Java可以显示png,jpg和其他图片格式,但是我必须通过获取文件路径在JLable中显示bmp文件。 ImageIcon支持典型图像。 在我正在工作的项目中,我无法打开bmp文件并以jpg格式存储同一文件,因为我不允许在运行时存储某些内容。我只能将图像保存在内存中。但是我不知道该怎么做。 我怎样才能显示在 ? 谢谢 问题答案: 我发现一些用Java 1.5编写的类,但是您可以轻松更

  • 介绍 用于实时展示倒计时数值,支持毫秒精度。 引入 import { createApp } from 'vue'; import { CountDown } from 'vant'; const app = createApp(); app.use(CountDown); 代码演示 基础用法 time 属性表示倒计时总时长,单位为毫秒。 <van-count-down :time="time

  • CountDown 倒计时 平台差异说明 App H5 微信小程序 支付宝小程序 百度小程序 头条小程序 QQ小程序 √ √ √ √ √ √ √ 基本使用 通过timestamp参数设置倒计时间,单位为秒 <template> <u-count-down :timestamp="timestamp"></u-count-down> </template> <script> export de