java - 如何暂停 Java Swing 定时器?

标签 java swing timer

我想在某个时候停止 Timer,然后从暂停的地方恢复它。方法 stop()start() 将不起作用。

是否有暂停Timer然后再恢复的功能?我想它不存在。

有没有人知道如何实现正确的 Timer 暂停?

最佳答案

javax.swing.Timer.setDelay(int);

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.util.*;
import javax.swing.*;

public class DelayedPaint {

    private CenterPanel center;
    private JFrame frame;
    private JPanel panel;

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

            @Override
            public void run() {
                new DelayedPaint().createAndShowGUI();
            }
        });
    }

    void createAndShowGUI() {
        frame = new JFrame("Delayed Paint");
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setSize(400, 400);
        panel = new JPanel(new BorderLayout());
        frame.setContentPane(panel);
        NorthPanel north = new NorthPanel();
        panel.add(north, BorderLayout.NORTH);
        center = new CenterPanel();
        panel.add(center, BorderLayout.CENTER);
        frame.setVisible(true);
        north.startTimer();
    }

    class NorthPanel extends JPanel {

        private JLabel lb;

        public NorthPanel() {
            lb = new JLabel("Good morning");
            add(lb);
        }

        public void startTimer() {
            ActionListener taskPerformer = new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent evt) {
                    setLayout(new FlowLayout(FlowLayout.LEFT));
                    lb.setText("Left");
//    timer.stop(); // Not needed if setRepeats(false).
                    center.startTimer();
                }
            };
            javax.swing.Timer timer = new javax.swing.Timer(2000, taskPerformer);
            timer.setRepeats(false);
            timer.start();
        }
    }

    class CenterPanel extends JPanel {

        private int icnt;
        private Font boldFont = new Font("Dialog", Font.BOLD, 15);
        private Properties centerProps;
        private javax.swing.Timer timer;

        public CenterPanel() {
            centerProps = new Properties();
            centerProps.setProperty("circle", "false");
            centerProps.setProperty("lastString", "0");
        }

        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2 = (Graphics2D) g;
            if (Boolean.valueOf(centerProps.getProperty("circle"))) {
                Dimension dim = frame.getSize();
                g2.draw(new Arc2D.Double(50, 25, dim.height - 100, dim.width - 100, 0, 360, Arc2D.OPEN));
            }
            int j = Integer.parseInt(centerProps.getProperty("lastString"));
            if (j > 0) {
                g2.setFont(boldFont);
                for (int i = 1; i <= j; i++) {
                    g2.drawString("" + (char) (i + 48), i * 10, 50);
                }
            }
        }

        public void startTimer() {
            ActionListener taskPerformer = new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent evt) {
                    repaint(); // in paintComponent(...) icnt is already icnt+1.
                    icnt++;
                    if (icnt == 1) {
                        centerProps.setProperty("circle", "true");
                        timer.setDelay(500);
                    } else if (icnt <= 10) {
                        centerProps.setProperty("lastString", String.valueOf(icnt - 1));
                        if (icnt == 10) {
                            timer.stop();
                        }
                    }
                }
            };
            timer = new javax.swing.Timer(2000, taskPerformer);
            timer.start();
        }
    }
}

关于java - 如何暂停 Java Swing 定时器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8193627/

相关文章:

java swing : custom everything - subclass jcomponent or jpanel or . ..?

timer - 是否有一种优雅的方式将消息发布到 AWS SQS,并且可见性延迟超过 15 分钟?

sockets - 电子邮件中的倒计时器图像 GIF

java - 实现一个如果所有参数都在范围内则返回 true 的方法

Java SE 6 : Why does Nimbus L&F cut for 4 pixels in JTextField?

java - 清理重复设置和清理 Java(JDBC) 代码

java - 在 JTable 上使用游标调整单个行高

iphone - 如何停止定时器触发的运行循环?

java - 使用 java 解析 xml 字符串和修剪特定标签空间的最佳方法

java - 轻量级 RESTful Java 框架