我是如何误用javax.swing.Timer的?

我是如何误用javax.swing.Timer的?,java,swing,timer,Java,Swing,Timer,在这里,我创建了一个游戏,你掷骰子,一次画一个虫子。这是我的建议 列出您需要的卷、部件和数量 1-身体需要一个 2-头需要一个;必须先有个身体 3-眼睛需要两只,必须先有头 4-天线需要两个;必须先有头 五条腿需要六条腿;必须先有身体 6-尾巴需要一个;必须先有身体 您必须单击身体部位所在位置附近的屏幕,使其显示出来。然后我们 我可以给整件事计时 我用面板来控制我的计时器,但我不知道出了什么问题 主程序 package dice; import javax.swing.*; import ja

在这里,我创建了一个游戏,你掷骰子,一次画一个虫子。这是我的建议 列出您需要的卷、部件和数量

1-身体需要一个 2-头需要一个;必须先有个身体 3-眼睛需要两只,必须先有头 4-天线需要两个;必须先有头 五条腿需要六条腿;必须先有身体 6-尾巴需要一个;必须先有身体 您必须单击身体部位所在位置附近的屏幕,使其显示出来。然后我们 我可以给整件事计时

我用面板来控制我的计时器,但我不知道出了什么问题

主程序

package dice;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.Timer;

public class Yahtzee extends JFrame implements ActionListener 
{
  Die[] d; // array to hold the 5 dice
  FourOfAKind[] f;
  JPanel buttonPanel; // panel for the timer
  JPanel dicePanel; // panel to hold the dice
  JPanel bugPanel;
  ScoreRow[] theScores;

  protected Object bug;

   public static void main(String[] args) {
    Yahtzee y = new Yahtzee();
   }

    public Yahtzee() 
    {
    setDefaultCloseOperation(EXIT_ON_CLOSE);

    setLayout(new FlowLayout());
    setLayout(new BorderLayout());

    dicePanel = new JPanel();
    dicePanel.setLayout(new GridLayout(5, 1));
    dicePanel.setLayout(new FlowLayout());
    dicePanel.setSize(new Dimension(50, 50));

    add(dicePanel, BorderLayout.CENTER);
    d = new Die[1];
    for (int i = 0; i < 1; i++) {
        d[i] = new Die(this);
        dicePanel.add(d[i]);
    }

    bugPanel = new JPanel();
    bugPanel.setLayout(new GridLayout(5, 5));
    bugPanel.setLayout(new FlowLayout());
    bugPanel.setSize(new Dimension(50, 50));

    add(bugPanel, BorderLayout.SOUTH);
    f = new FourOfAKind[1];
    for (int w = 0; w < 1; w++) {
        f[w] = new FourOfAKind(this);
        bugPanel.add(f[w]);
    }
    setSize(new Dimension(715, 705));
    setVisible(true);
}

public void actionPerformed(ActionEvent e)
{
    repaint();

}

public void setChoice(int choice) 
{
    f[0].setChoice(choice);
}

public void drawBug() 
{
    f[0].setChoice(d[0].getChoice());
    f[0].drawBug();
}

    }
我注释掉了没有编译的计时器


我期待在我画完我的bug后,我会点击面板并停止计时器,看看我画bug需要多长时间

你根本不需要计时器。如果您不更新UI中的任何内容,那么您就不需要它

你可以用其他方式记录时间。一种方法是,无论何时开始跟踪时间,只要使用System.currentTimeMiilis即可。设置一个全局变量long startTime,并在希望时钟启动时进行设置

long startTime;
...
startTime = System.currentTimeMillis();
当你想让时钟停下来的时候,再停一次,然后减去差

long endTime = System.currentTimeMillis();
long elapsedMillis = endTime - startTime;
long elapsedSeconds = elapsedMillis / 1000;

有什么问题?你期望什么样的行为?相反会发生什么?我希望在我完成绘制错误后,我会单击面板并停止计时器,看看绘制错误需要多长时间。你不能启动计时器,然后构建一个新的计时器对象,然后停止计时器。你正在用一个新的计时器对象替换你的计时器对象…哦,好吧,如果你不介意给我看的话,那它是怎么工作的?哦,我应该用什么方法来放置它?谁知道呢。你是唯一知道你的程序应该如何工作的人。当你开始绘画时,设定开始时间。当你停下来的时候,就知道结束时间了。那很简单。如果你不能理解,那么你就不理解你自己的程序,如果它是你的,那么请问我,如果它是你的,这是什么意思?也许这是不符合逻辑的。但要理解挫折感。首先,你的问题并不清楚。第二,我对如何记录时间的解释非常直截了当。第三,因为你的问题很不清楚,除了你,没人知道该把代码放在哪里