在用户点击之前停止Swing计时器

时间:2011-01-11 16:52:46

标签: 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()方法。

我在这做什么?我假设我必须以无阻塞的方式做任何事情,对吧?

2 个答案:

答案 0 :(得分:1)

在伪代码中,在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.
    }

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

答案 1 :(得分:0)

首先,您的代码未编译:

b.players[p].discardCard(int i);包含语法错误int i

其次,我真的不明白这个问题。在需要时停止计时器,实现启动计时器的监听器(即鼠标监听器)。

或者我可能不明白你的问题?

BTW我刚刚检查过Timer API。它既没有启动也没有停止方法。您必须处理特定任务以控制执行。