Java Swing Restart Timer After Operation

后端 未结 1 1610
遇见更好的自我
遇见更好的自我 2021-01-27 08:22

I need my timer to restart or at least add another delay after a certain line of code is performed.

private static class ButtonHandler implements ActionListener         


        
相关标签:
1条回答
  • 2021-01-27 09:01

    I was going to post this into your previous question, but it seems you've some progress, well done.

    Okay, so, this example gives you three buttons to choose from. When you click one, it records what you choose, disables the buttons and starts a Timer which waits 1 second.

    The Timer's ActionListener then checks to see what you choose and updates the output, then starts another Timer which waits 1 second, which then re-enables the buttons...

    enter image description here

    import java.awt.BorderLayout;
    import java.awt.EventQueue;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.Timer;
    import javax.swing.UIManager;
    import javax.swing.UnsupportedLookAndFeelException;
    
    public class Chocies {
    
        public static void main(String[] args) {
            new Chocies();
        }
    
        public Chocies() {
            EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                    try {
                        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    }
    
                    JFrame frame = new JFrame("Testing");
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.setLayout(new BorderLayout());
                    frame.add(new TestPane());
                    frame.pack();
                    frame.setLocationRelativeTo(null);
                    frame.setVisible(true);
                }
            });
        }
    
        public class TestPane extends JPanel {
    
            private JButton choice1;
            private JButton choice2;
            private JButton choice3;
    
            private JLabel output;
    
            private JButton choice;
    
            public TestPane() {
                setLayout(new BorderLayout());
                choice1 = new JButton("Door 1");
                choice2 = new JButton("Door 2");
                choice3 = new JButton("Door 3");
                JPanel panel = new JPanel();
                panel.add(choice1);
                panel.add(choice2);
                panel.add(choice3);
    
                output = new JLabel("Pick a door");
                output.setHorizontalAlignment(JLabel.CENTER);
    
                add(output, BorderLayout.NORTH);
                add(panel);
    
                ButtonHandler handler = new ButtonHandler();
                choice1.addActionListener(handler);
                choice2.addActionListener(handler);
                choice3.addActionListener(handler);
            }
    
            public class ButtonHandler implements ActionListener {
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    output.setText("Wait for it...");
                    choice = (JButton) e.getSource();
                    choice1.setEnabled(false);
                    choice2.setEnabled(false);
                    choice3.setEnabled(false);
                    Timer timer = new Timer(1000, new TimerHandler());
                    timer.setRepeats(false);
                    timer.start();
                }
    
            }
    
            public class TimerHandler implements ActionListener {
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    if (choice1 == choice) {
                        output.setText("Door 1 selected");
                    } else if (choice2 == choice) {
                        output.setText("Door 2 selected");
                    } else if (choice3 == choice) {
                        output.setText("Door 3 selected");
                    }
    
                    Timer timer = new Timer(1000, new ActionListener() {
                        @Override
                        public void actionPerformed(ActionEvent e) {
                            choice1.setEnabled(true);
                            choice2.setEnabled(true);
                            choice3.setEnabled(true);
                        }
                    });
                    timer.setRepeats(false);
                    timer.start();
                }
    
            }
    
        }
    
    }
    
    0 讨论(0)
提交回复
热议问题