0

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

我做了一些研究,每次我看到提到计时器类(我觉得它能够完成我想要做的事情)时,人们都建议不要使用它。我想不出使用计时器类来在屏幕上滑动我的栏的替代方法。

4

1 回答 1

0

希望这段代码对您有所帮助。它完全符合您的要求。

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
     }
}
于 2017-03-15T14:56:58.720 回答