0
我试图创建一个面板上的移动线(在面板上从一个点移动到另一个线的Java)的Java 2D动画。我希望它有可能。这是我使用的代码。面板未显示2D动画
private void movingline(int length) throws InterruptedException {
for(int i = 0; i + length < width; i++){
for(int j = 0; j + length < height; j++){
eraseline();
drawLine(Color.cyan, i, j, i+length, j+length);
erase = true;
}
}
}
private void eraseline() {
if(erase){
fillCanvas(Color.BLUE);
}
}
在运行代码时,面板不显示。
下面是绘制线条的代码。
public void drawLine(Color c, int x1, int y1, int x2, int y2) {
int pix = c.getRGB();
int dx = x2 - x1;
int dy = y2 - y1;
canvas.setRGB(x1, y1, pix);
if (dx != 0) {
float m = (float) dy/(float) dx;
float b = y1 - m*x1;
dx = (x2 > x1) ? 1 : -1;
while (x1 != x2) {
x1 += dx;
y1 = Math.round(m*x1 + b);
canvas.setRGB(x1, y1, pix);
}
}
repaint();
}
在运行代码时,面板不会显示移动的线条。任何帮助将非常感激。
我没有完全得到你。 moveline()函数是从类的构造函数调用的。 – razor35 2010-07-25 06:41:24
存在问题:你的类的构造函数很可能被'main()'调用,而这是主线程。绘图必须发生在事件派发线程中,当您拥有Swing(或AWT)组件时,该线程由Java内部启动。为了正确工作,您的绘图应该在面板的'paint()'方法中完成。但是,你不能(或者至少不应该)直接调用'paint()'。所有你可以从外面做的是设置一些变量来控制它的工作方式。 – 2010-07-25 14:46:24
用示例代码和一些解释更新了我的答案。 – 2010-07-25 15:43:58