Java定时器问题

标签 java swing timer actionlistener

我有一个模拟咖啡自动售货机的小程序。我正在尝试让文本“准备好”显示 5 秒。但它似乎不起作用。谁能告诉我我的计时器出了什么问题吗?

类 qn1 是 JApplet 的类。 init() 将被调用来实例化变量。

我向这两个按钮添加了 Action 监听器,这样当我单击它们时它们就会使用react。

    import java.awt.*;
    import java.awt.event.*;

    import javax.swing.*;
    import javax.swing.event.*;

    public class qn1 extends JApplet implements ActionListener {

        private static int FULL = 4;
        private int coffees = FULL;
        private JPanel p;
        private JButton jbtw, jbtb;
        private Dispenser dis;
        private JLabel jlbl;
        private Timer timer;

        public void init() {
            setLayout(new BorderLayout(5, 5));
            setSize(400, 500);

            p = new JPanel(new GridLayout(1, 2));
            jbtw = new JButton("White");
            jbtb = new JButton("Black");
            jbtw.addActionListener(this);
            jbtb.addActionListener(this);
            p.add(jbtw);
            p.add(jbtb);

            add(p, BorderLayout.NORTH);

            dis = new Dispenser();
            add(dis, BorderLayout.CENTER);

            jlbl = new JLabel("Select", SwingConstants.CENTER);
            add(jlbl, BorderLayout.SOUTH);

            timer = new Timer(50, this);
        }

        public void actionPerformed(ActionEvent e) {
            if (e.getSource().equals(jbtb) | e.getSource().equals(jbtw)) {
                if (coffees - 1 >= 0) {
                    coffees--;
                    jlbl.setText("Ready " + coffees);               
                }

                timer.setInitialDelay(5000);
                timer.start();  

                if (coffees == 0) {
                    jlbl.setText("Empty");
                } else {
                    jlbl.setText("Select" + coffees);
                }
            }
        }
    }

    class Dispenser extends JPanel {
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawLine(0, 0, 25, 50);
            g.drawLine(25, 50, 55, 50);
            g.drawLine(55, 50, 80, 0);
        }
    }

最佳答案

您的计时器被调用,但如果源不是您的按钮之一,则您不会执行任何操作:

    if (e.getSource().equals(jbtb) | e.getSource().equals(jbtw)) {

要回答您的评论,您可能需要类似的内容:

    public void actionPerformed(ActionEvent e) {
        if (e.getSource().equals(jbtb) | e.getSource().equals(jbtw)) {
            timer.setInitialDelay(5000);
            timer.start();  

            if (coffees == 0) {
                jlbl.setText("Empty");
            } else {
                jlbl.setText("Select " + coffees);
            }
        }
        else {
            if (coffees - 1 >= 0) {
                coffees--;
                jlbl.setText("Ready " + coffees);               
            }
        }
    }

关于Java定时器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8283818/

相关文章:

Java 8 流 API : how to use GroupingBy to have the same object in multiple groups?

java - Spring 与 EJB。 Spring可以替代EJB吗?

java - 单击 "X"按钮时 JFrame 不会关闭

java - 从 JOptionPane 创建对话框并处理 OK_CANCEL_OPTION

java - 在 JTable 中显示图像

javascript - 如何在没有任何性能问题的情况下渲染计时器

java - Scala:使用 ArrayList 时出现错误的类型不匹配错误

java.net.socket 实现

javascript - JS 定时器手动设置时间

php - 简单的Javascript MYSQL校验函数