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