按钮点击更新时间

时间:2015-09-09 06:27:33

标签: java swing

我想拥有它,所以当我点击按钮时,时间会更新。如果我想要的话,我能否对我如何实现这一目标有所提示或帮助。

在过去的几天里,我一直在努力做到这一点,所以任何帮助都将不胜感激。

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.*;
import javax.swing.*;
import static javax.swing.BoxLayout.X_AXIS;
import static javax.swing.BoxLayout.Y_AXIS;

public class CountdownNBA2K16 extends JFrame implements ActionListener{

        JLabel displayDate ;
        JLabel displayDateS ;
        JLabel displayDateM ;
        JLabel displayDateH ;
        JLabel displayDateD ;

        JPanel Mili = new JPanel();
        JPanel Sec = new JPanel();
        JPanel minute = new JPanel();
        JPanel hours = new JPanel();
        JPanel day = new JPanel();
        JPanel cd = new JPanel();
        JPanel combine = new JPanel();

        JButton button = new JButton("update time");

        Calendar releaseDate;
        Calendar todayDate;

        long diff;
        long diffSec;
        long days;
        long secDays;
        long secs;
        long min;
        long hour;

        int SECONDS_IN_A_DAY = 24 * 60 * 60;

        String ms;
        String s;
        String m;
        String h;
        String d;

    public CountdownNBA2K16() {
        super("COUNTDOWN TO NBA2K16");//sets title of app

        setLayout(new FlowLayout());

                button.addActionListener(this);

                releaseDate = Calendar.getInstance();
                releaseDate.set(Calendar.DAY_OF_MONTH,25);
                releaseDate.set(Calendar.MONTH,8);
                releaseDate.set(Calendar.YEAR,2015);

                todayDate = Calendar.getInstance();
                diff = releaseDate.getTimeInMillis() - todayDate.getTimeInMillis();
                diffSec = diff/1000;

                days = diffSec / SECONDS_IN_A_DAY;
                secDays = diffSec % SECONDS_IN_A_DAY;
                secs =  secDays % 60;
                min = (secDays%60) %60;
                hour = (secDays/3600);

                s = String.valueOf(secs);
                displayDateS = new JLabel("seconds:"+s + "");

                m = String.valueOf(min);
                displayDateM = new JLabel("minutes:"+m +"");

                h = String.valueOf(hour);
                displayDateH = new JLabel("hours:"+h+"");

                d = String.valueOf(days);
                displayDateD = new JLabel("days:"+d+"");

                Sec.add(displayDateS);
                minute.add(displayDateM);
                hours.add(displayDateH);
                day.add(displayDateD);

                cd.add(day);
                cd.add(hours);
                cd.add(minute);
                cd.add(Sec);
                cd.setLayout( new BoxLayout(cd ,X_AXIS));

                combine.add(button);
                combine.add(cd);
                combine.setLayout( new BoxLayout(combine ,Y_AXIS));

                add(combine);

                pack();

                setSize(300,300);
                setResizable(false);//doesnt let user resize the gui
        setLocationRelativeTo(null);//sets location relative to nothing
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//makes the applictaion close when the gui is closed

    }
        @Override
    public void actionPerformed(ActionEvent e) {

            displayDateS.getText();
            displayDateM.getText();
            displayDateH.getText();
            displayDateD.getText();    
        }

    public static void main(String[] args) {

       SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new CountdownNBA2K16().setVisible(true);
            }
        });
    }

}

2 个答案:

答案 0 :(得分:1)

首先使用Java 8的Time API或Joda-Time来计算持续时间。

将持续时间计算的逻辑分离为单独的方法,这样您就可以从构造函数和actionPerformed方法中调用它。

像...一样的东西。

protected void updateDuration() {
    System.out.println(LocalDateTime.now());
    Duration d = Duration.between(releaseDate.atStartOfDay(), LocalDateTime.now());
    System.out.println(d.toMillis());
    long days = d.toDays();
    d = d.minusDays(days);
    long hours = d.toHours();
    d = d.minusHours(hours);
    long mins = d.toMinutes();
    d = d.minusMinutes(mins);
    long seconds = d.toMillis() / 1000;

    displayDateS.setText("Seconds: " + seconds);
    displayDateM.setText("Minutes: " + mins);
    displayDateH.setText("Hours: " + hours);
    displayDateD.setText("Days: " + days);
}
例如

(只需确保在调用之前已经创建了标签)

您可能还想查看How to use Swing Timers以自动更新输出。

答案 1 :(得分:0)

打个比方。 因为我仍然无法发表评论,这就是我回答你的原因。 在actionPerformed方法中,只需将标签文本设置为您想要的内容。

public class CountdownNBA2K16 extends JFrame implements ActionListener {

    JLabel displayTime;
    JButton button = new JButton("Update time");

    public CountdownNBA2K16() {
        super("Time");
        setLayout(new FlowLayout());
        button.addActionListener(this);
        displayTime = new JLabel("Just to see the updates ..." + System.currentTimeMillis());
        setSize(300, 300);
        add(displayTime);
        add(button);
        pack();
        setResizable(false);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

    @Override
    public void actionPerformed(ActionEvent e) {
        displayTime.setText("Just to see the updates ..." + System.currentTimeMillis());
    }

    public static void main(String[] args) {

        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new CountdownNBA2K16().setVisible(true);
            }
        });
    }

}