自定义矩形类不起作用

时间:2015-10-24 20:13:56

标签: java class graphics jpanel extends

我创建了一个扩展Rectangle(TransformRect)的类。我希望它在JPanel上随机产生自己,然后随机移动。到目前为止,我的班级产生了自己,但不会随意移动。当我在TranformPanel中绘制TransformRect对象时,它似乎在实际生成之前运行所有代码。它在睡眠循环中运行(尝试,捕获),然后实际使用随机坐标和运动方法的使用产生自身。我不知道如何解决这个问题。

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();
        } 
    }
}  

TranformPanel

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()); 
    }
} 

EDIT- Camickr:我知道它只画了一个TransformRect。问题是翻译方法(this.translate(10,10))不起作用。 TransformRect不会在页面上移动,我也不知道如何修复它。

提前致谢!

1 个答案:

答案 0 :(得分:0)

您的TransformPanel仅绘制一个TransformRect。

如果要绘制多个矩形,则需要保留所有矩形的列表并迭代列表中的每个矩形。

查看Custom Painting Approaches中的for (final Iterator<String> iter = errors.keys(); iter.hasNext();) { final String key = iter.next(); try { final Object value = errors.get(key); final JSONArray error = (JSONArray) value; System.out.println(key); System.out.println(error.get(0).toString()); } catch (final JSONException e) { // Something went wrong! } } 示例。它有一个DrawOnComponent方法,允许您添加一个矩形来绘制。

此外,每当您翻译矩形位置时,您需要在TransformPanel上调用addRectangle(...)以告诉它重绘自己。