我创建了一个扩展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不会在页面上移动,我也不知道如何修复它。
提前致谢!
答案 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(...)
以告诉它重绘自己。