Java Label Timer and Saving

孤者浪人 提交于 2019-12-17 17:23:24

问题


Let me explain what I am trying to do.

I have two classes extending JFrame, the StartJFrame and TestingJFrame. In the main method, I start up a StartJFrame. It has a single button, start. When that is pressed, I have it set up to hide that frame and start up the TestingJFrame. Right now I don't have anything in the TestingJFrame.

In that screen, I want to have a label in the bottom right corner that is a timer, starting on 45 seconds and counting down to 0. I also need to have some code run every 10th of a second, and collect some data. There will be two buttons in the TestingJFrame, Yes and No. When one of them is pressed, it should stop the timer and save the information.

The data is basically just doubles. I am only going to be collecting data once per run of the program. I have a UserData class that holds some information about the test subject, and a list of doubles, it is added to every 10th of a second. I have a general idea how to save the data in java.

My question is, how should I set up the timer, so that it will count down from 45 seconds, and when it reaches 0 or the user presses the yes or no button it will call a function to save the data? I think I can handle the saving data part.

Sorry if this is really easy, I'm new to Java (from c#) and Swing has been confusing me a bit.


回答1:


The first part (show the count down and stopping the timer) is relatively easy...

public class TimerTest01 {

    public static void main(String[] args) {
        new TimerTest01();
    }

    public TimerTest01() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (Exception ex) {
                }

                JFrame frame = new JFrame("Test");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);

            }
        });
    }

    public class TestPane extends JPanel {

        private JLabel label;
        private Timer timer;
        private long startTime;

        public TestPane() {
            setLayout(new GridLayout(0, 1));
            label = new JLabel("...");
            label.setHorizontalAlignment(JLabel.CENTER);
            final JButton btn = new JButton("Start");
            btn.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    if (timer.isRunning()) {
                        timer.stop();
                        btn.setText("Start");
                    } else {
                        startTime = System.currentTimeMillis();
                        timer.restart();
                        btn.setText("Stop");
                    }
                    repaint();
                }
            });
            add(label);
            add(btn);

            timer = new Timer(250, new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    long endTime = (startTime + 45000);
                    long timeLeft = endTime - System.currentTimeMillis();
                    if (timeLeft < 0) {
                        timer.stop();
                        label.setText("Expired");
                        btn.setText("Start");
                    } else {
                        label.setText(Long.toString(timeLeft / 1000));
                    }
                    repaint();
                }
            });
        }
    }
}

Take a look at Swing Timer for more info

The second part of you question is to vague to reliably provide you with an answer. Where is the data coming from? How is collected??




回答2:


You can use javax.swing.Timer to setup your timer. You can have a look at the official tutorial too.



来源:https://stackoverflow.com/questions/14678750/java-label-timer-and-saving

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!