2012-03-15 25 views
1

我有一个问题,我已经在Java定时器的代码,它在执行时会显示它自己的JFrame标签上倒数计时器,我想要做的是什么,而不必移动显示另一个JFrame窗体标签已在此计时器代码给其他类。如何在单独的J Frame Form标签上显示Java Timer?

我希望你能帮助我解决这个感谢很多人。

这是Timer类代码:

import java.awt.EventQueue; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.Timer; 

public class TimerExample extends JFrame { 

    final JLabel label; 
    Timer countdownTimer; 
    int timeRemaining = 10; 

    public TimerExample() { 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setSize(200, 200); 
     label = new JLabel(String.valueOf(timeRemaining), JLabel.CENTER); 
     getContentPane().add(label); 

     countdownTimer = new Timer(1000, new CountdownTimerListener()); 
     setVisible(true); 
     countdownTimer.start(); 
    } 

    class CountdownTimerListener implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
     if (--timeRemaining > 0) { 
      label.setText(String.valueOf(timeRemaining)); 
     } else { 
      label.setText("Time's up!"); 
      countdownTimer.stop(); 
     } 
     } 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      new TimerExample(); 
     } 
     }); 
    } 

} 

感谢

+0

你能提供更多关于你的问题的细节吗?你究竟想要做什么,为什么?你会有一个主窗口,你希望启动另一个窗口(通常是一个对话框),显示你的倒计时器吗?此外,通常在这些情况下,您首先发布代码尝试解决此问题,然后显示任何错误消息或异常并描述任何行为问题。这样我们就可以确切知道你可能做错了什么,以及如何更好地帮助你。 – 2012-03-15 13:53:29

+0

这段代码甚至不会编译;该构造函数包含的代码似乎假定这个类扩展了'JFrame',但正如它所写的那样。什么是你的问题,确切地说 - 如何使这不依赖于'JFrame'?看起来你已经在一半了。 – 2012-03-15 13:55:14

回答

4

这,

以下是我TestTimer类,它接受一个JLabel作为输入

public class TestTimer { 
    private JLabel label; 
    Timer countdownTimer; 
    int timeRemaining = 10; 

    public TestTimer(JLabel passedLabel) { 
     countdownTimer = new Timer(1000, new CountdownTimerListener()); 
     this.label = passedLabel; 
     countdownTimer.start(); 
    } 

     class CountdownTimerListener implements ActionListener { 
      public void actionPerformed(ActionEvent e) { 
      if (--timeRemaining > 0) { 
       label.setText(String.valueOf(timeRemaining)); 
       } else { 
       label.setText("Time's up!"); 
       countdownTimer.stop(); 
       } 
      } 
     } 
    } 

这里是实际延长一个JFrame,并显示在它的标签另一主类,

public class TimerJFrame extends JFrame{  
    private static final long serialVersionUID = 1L; 
    private JLabel label; 

    public TimerJFrame() { 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setSize(200, 200); 
     label = new JLabel("10", JLabel.CENTER); 
     getContentPane().add(label); 
     new TestTimer(label); 
     setVisible(true); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      new TimerJFrame(); 
     } 
     }); 
    } 
} 

第二代码通过一个创建的JLabel到第一类和第一类使用它来显示计时器。

+0

非常感谢拉胡尔它帮助了很多。 – Walid 2012-03-15 14:32:18

+0

尝试此操作并将其添加到JFrame。TImer不起作用,数字仍然是10 – 2016-03-13 05:37:15

2

您需要按照下面的步骤,

  1. 修改TimerExample构造函数接受的JLabel。并使用passwd的JLabel
  2. 通行证从其他JFrame类的JLabel初始化TimerExample类的JLabel。
  3. 删除主要方法,因为它不会被要求。

这里卜第一步骤中,构造将接受来自其它类的预定义的JLabel并使用它们来显示计时器。

+0

我有一个登录窗口,主窗口和TimerExample类,当我点击登录窗口中输入主窗口中会显示和多数民众赞成在我想要的计时器出现 – Walid 2012-03-15 14:07:23

+0

我尝试设置一个标签在主窗口=到计时器类中的标签,但它似乎没有在某个阶段工作程序冻结: – Walid 2012-03-15 14:08:34

+0

从我的主窗口传递JLabel到TimerExample类,以便TimerExample类将更新您传递的标签。 – 2012-03-15 14:10:52

相关问题