自定义矩形 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()
以告诉它重新绘制自身。
我创建了一个扩展 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()
以告诉它重新绘制自身。