自定义矩形 Class 无效

Custom Rectangle Class Not Working

我创建了一个扩展 Rectangle(TransformRect) 的 class。我希望它在 JPanel 上随机生成,然后随机移动。到目前为止,我的 class 会自行生成,但不会随机移动。当我在我的 TranformPanel 中绘制我的 TransformRect 对象时,它似乎 运行 在实际上 spawning.It 运行 之前的所有代码通过睡眠循环(try,catch),然后实际上使用随机坐标和 1 使用移动方法。我不知道如何解决这个问题。

TransformRect

import java.awt.Rectangle;
import java.util.Random;
import java.util.concurrent.TimeUnit;
public class TransformRect extends Rectangle{ 
    //instance initializer
    {   
        Random rn = new Random(); 
        this.setBounds(rn.nextInt(450),rn.nextInt(450), 10, 10);   
        System.out.println(this.getBounds());

    }    
    public TransformRect(){ 
        try {  
            TimeUnit.SECONDS.sleep(1);
            this.translate(10, 10); 
            System.out.println(this.getBounds());
        } catch (InterruptedException e) {
            e.printStackTrace();
        } 
    }
}  

变换面板

import javax.swing.*; 
import java.awt.*;
import java.awt.geom.AffineTransform;
import java.util.Random;
import java.util.concurrent.TimeUnit;

public class TranformPanel extends JPanel {
    private double randomx = 0; 
    private double randomy = 0; 
    private int xlist[] = new int[20]; 
    private int ylist[] = new int[20]; 
    public void paintComponent(Graphics g) 
    { 
        super.paintComponent(g); 
        drawTransform(g,randomx,randomy);
    }  
    private void drawTransform(Graphics g,double randomx,double randomy) 
    {    
        Graphics2D g2d = (Graphics2D)g;    
        g2d.draw(new TransformRect()); 
    }
} 

编辑- Camickr:我知道它只绘制一个 TransformRect。问题是翻译方法 (this.translate(10, 10)) 不起作用。 TransformRect 没有在页面上自行移动,我不知道如何修复它。

提前致谢!

你的TransformPanel只每画一个TransformRect。

如果你想绘制多个矩形,那么你需要保留所有矩形的列表并遍历列表来绘制每个矩形。

查看 Custom Painting Approaches 中的 DrawOnComponent 示例。它有一个 addRectangle(...) 方法,允许您添加要绘制的矩形。

此外,无论何时平移矩形位置,您都需要在 TransformPanel 上调用 repaint() 以告诉它重新绘制自身。