Java Swing+;计时器?在JPanel上移动一条线

Java Swing+;计时器?在JPanel上移动一条线,java,swing,animation,timer,java-2d,Java,Swing,Animation,Timer,Java 2d,我想做的很简单。我有一个JLayeredPane,里面有两个面板。面板2(更高的Z索引)有一个透明的背景,只显示一个从Y=0到Y=max的Line2D元素。我需要X值每隔这么多毫秒递增一次,然后重新绘制线。我已经做好了一切准备,只是我不知道如何通过计时来进行酒吧的移动 我做了一些研究,每次我看到有人提到timer类(我觉得它可以完成我想做的事情),人们都建议不要使用它。为了在屏幕上滑动我的工具栏,我想不出除了使用timer类之外的其他方法。希望这段代码对您有所帮助。这正是你想要的 import

我想做的很简单。我有一个JLayeredPane,里面有两个面板。面板2(更高的Z索引)有一个透明的背景,只显示一个从Y=0到Y=max的Line2D元素。我需要X值每隔这么多毫秒递增一次,然后重新绘制线。我已经做好了一切准备,只是我不知道如何通过计时来进行酒吧的移动


我做了一些研究,每次我看到有人提到timer类(我觉得它可以完成我想做的事情),人们都建议不要使用它。为了在屏幕上滑动我的工具栏,我想不出除了使用timer类之外的其他方法。

希望这段代码对您有所帮助。这正是你想要的

import javax.swing.JFrame;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Random;
import java.util.Arrays;
import java.awt.EventQueue;
import javax.swing.JFrame;

public class FloorPlaner extends JFrame {
     public int x=0;

     public FloorPlaner(){ 
          super("FloorPlaner");

          requestFocus(); 

          setContentPane(new DrawingPane());

          setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

          setSize(400, 400);

          setResizable(true); 

          setVisible(true); 

          while (true) { 
              x++;
              repaint();
              try {
              Thread.sleep(40); //25 FPS
              } catch(InterruptedException bug) {
              Thread.currentThread().interrupt();
              System.out.println(bug);
              }
          }
     }


     class DrawingPane extends JPanel { //Where you actually draw on
        public void paintComponent(Graphics g) { //Drawing method
           g.drawLine(x,0,x,400);
        }   
     }
     public static void main(String args[]) {
            new FloorPlaner(); //Start it
     }
}

你的问题有点离题,因为你说“人们建议不要使用它”,但没有为这句话提供支持。谁建议不要使用计时器?他们的理由是什么?我会说试着用定时器来做这个。如果它不起作用,请返回您的代码。您是指
java.util.Timer
还是
javax.swing.Timer
(例如)?后者很好,前者需要一些额外的工作来确保GUI更新在EDT上完成。请链接到您参考的此信息的最佳示例。你的问题现在让人困惑。谢谢大家的评论,我会查看swing的计时器,一旦我有了一些代码就回来。我试图重新创建建议不要使用计时器的搜索,但找不到。我会回来与链接,如果我得到他们!