java - 停止 Swing 定时器直到用户点击

标签 java swing mouse

我正在写一个纸牌游戏。现在我在处理鼠标时遇到问题。下面是处理抓牌和弃牌游戏流程的计时器。

    final Timer timer = new Timer(1000, null);

    timer.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            b.players[p].drawCard();
            if(p==0) // player zero is the human player
            {
                timer.stop();
                // ...
                b.players[p].discardCard(i);
                timer.start();
            }
            else
                b.players[p].discardCard(0);
            p=(p+1)%4;
            b.repaint();
        }
    });

事情是我想停止计时器,等到用户点击他想要丢弃的卡片,然后再次启动计时器。 b 以基本方式实现 MouseListener:

public void mouseClicked(MouseEvent arg0) 
{
    clickX = arg0.getX();
    clickY = arg0.getY();
}

那里还有 xYtoCardIndex() 方法。

我在这里做什么?我假设我不必以非阻塞方式执行任何操作,对吗?

最佳答案

在伪代码中,在您的 MouseEventListener 中:

public void mouseClicked(MouseEvent arg0) 
{
    clickX = arg0.getX();
    clickY = arg0.getY();

    Card discarded = getCard(clickX,clickY);
    b.players[p].discardCard(discarded);

    // The card has been discarded, I can start my timer again.
    timer.start();
}

在你的 drawCard 函数中:

    public void drawCard() {
        // Stop the timer
        timer.stop();

        // Do the drawing.
    }

这样,当玩家抽到一张牌时,计时器会停止,直到牌被丢弃。

关于java - 停止 Swing 定时器直到用户点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4660187/

相关文章:

objective-c - 如何使用 IOKit 在 macOS 中以编程方式更改鼠标设置

.net - 检测水平鼠标滚轮移动

java - 当我 validate() 时不需要Repaint()

Java SwingWorker 现在更新模型

java - Swing组合演示

javascript - 设置每个 mouse.x 的 CSS 值

java - Hangman 游戏中的 ArrayIndexOutOfBoundsException

java - Hibernate 中的反向继承映射

java - Google电子表格创建一个新的工作表,并允许所有用户拥有链接

java - hadoop textinputformat 每个文件只读一行