在java画布上经过的时间

在java画布上经过的时间,java,user-interface,canvas,timer,jlabel,Java,User Interface,Canvas,Timer,Jlabel,因此,我试图添加一个Jlabel来显示我的程序上的时间,但我不知道该放在哪里以及如何添加。我尝试使用我找到的其中一个代码,我的程序就挂起了。希望你能帮助我: 这是我代码的要点,我有两个单独的java文件用于我的GUI public class MyFrame extends JFrame implements Serializable,ActionListener{ Canvas canvas; CanvasManager manager; public MyFram

因此,我试图添加一个Jlabel来显示我的程序上的时间,但我不知道该放在哪里以及如何添加。我尝试使用我找到的其中一个代码,我的程序就挂起了。希望你能帮助我:

这是我代码的要点,我有两个单独的java文件用于我的GUI

public class MyFrame extends JFrame implements Serializable,ActionListener{ 
    Canvas canvas;
    CanvasManager manager;

    public MyFrame() {
        canvas = new Canvas();
        canvas.setSize(600,700);
        this.add(canvas);
        canvas.setBackground(Color.green);

        this.pack();
        this.setVisible(true);
        this.setResizable(false);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        manager = new CanvasManager(canvas);
        manager.start();
  }
这是我绘制图像的画布:

public class CanvasManager extends Thread implements MouseListener, Serializable{
    private final int FRAME_DELAY = 200; // 20ms. implies 50fps (1000/20) = 50

    private BufferedImage img;
    private boolean toggle = true;
    private int width = 600;
    private int height = 700;

    private Canvas canvas;
    private long start;

    public CanvasManager(Canvas canvas) {
       this.canvas = canvas;
       this.canvas.setSize(width, height);
       this.canvas.addMouseListener(this);
    }

    public void run() {
       start = System.currentTimeMillis();
       canvas.createBufferStrategy(2);
       BufferStrategy strategy = canvas.getBufferStrategy();
       Graphics g = null;
       while (true) {
          g = strategy.getDrawGraphics();
          paint(g);
          strategy.show();
          syncFramerate();
       }
    }

我有一个用于绘制函数的线程,因为我的程序需要不断重新绘制画布。

解决方案是向扩展框架的类添加一个Jlabel

JLabel lbl = new JLabel("Text"); // instance variable
this.add(lbl); // this should go in constructor
然后,随着时间的推移,您将更新JLabel中的文本

lbl.setText("Time");
然后在游戏循环中,您将启动计时器/摆动计时器,并在触发时间动作时更改JLabel的文本

Timer timer = new Timer(1000, new ActionListener() { //Change parameters to your needs.
            @Override
            public void actionPerformed(ActionEvent e) {
               //setText of JLabel here every second/
            }
        });
然后打电话

timer.start();
当你想开始计算经过的时间,我假设你想在程序开始时计算。。如果计时器还没有启动,我就在gameLoop中调用这个方法

以下是API:


一个解决方案是向扩展框架的类添加Jlabel

JLabel lbl = new JLabel("Text"); // instance variable
this.add(lbl); // this should go in constructor
然后,随着时间的推移,您将更新JLabel中的文本

lbl.setText("Time");
然后在游戏循环中,您将启动计时器/摆动计时器,并在触发时间动作时更改JLabel的文本

Timer timer = new Timer(1000, new ActionListener() { //Change parameters to your needs.
            @Override
            public void actionPerformed(ActionEvent e) {
               //setText of JLabel here every second/
            }
        });
然后打电话

timer.start();
当你想开始计算经过的时间,我假设你想在程序开始时计算。。如果计时器还没有启动,我就在gameLoop中调用这个方法

以下是API:


您好,我已经有了一个动作监听器,我是否应该在其中添加计时器?@XaelYvette如果是,那么您的答案是肯定的。将actionlistener添加到timerNo,这是我的菜单,我会创建timer对象吗?我应该在画布文件中创建timer对象还是在jframe下创建timer对象?您好,我已经有了一个action listener,我应该在其中添加timer吗?@XaelYvette如果是,那么您的答案是肯定的。将actionlistener添加到timerNo,这是我的菜单栏。我应该创建timer对象吗?我应该在画布文件中创建timer对象还是在jframe下创建?