Панель не показана для 2D анимации
Я пытался создать 2D-анимацию в Java движущейся линии на панели (линия, перемещающаяся из одной точки в другую на панели). Я надеюсь, что это возможно. Вот код, который я использовал.
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();
}
При запуске кода панель не отображается с движущейся линией. Любая помощь приветствуется.
1 ответ
Я думаю, что самая большая проблема в том, что вы пытаетесь изменить внешний вид графического интерфейса из (я предполагаю) потока, который не является потоком диспетчеризации событий.
Решение состоит в том, чтобы обернуть деятельность (в частности, призывы к eraseLine
а также drawLine
) в Runnable
и вызвать этот Runnable, используя SwingUtilities.invokeAndWait()
,
РЕДАКТИРОВАТЬ: графические компоненты Java на самом деле не позволяют вам управлять холстом самостоятельно. Только компоненты сами делают какие-либо рисунки, и только тогда, когда их призывают рисовать сами. Непосредственное рисование на холсте, даже если вы можете заставить его работать, будет плохо работать, потому что вы будете мешать тому, что делает компонент.
Вместо того чтобы вдаваться в подробности, я пошел и реализовал, как мне кажется, "правильный" способ сделать это.
Кодирование комментируется там, где это необходимо, надеюсь, оно даст вам некоторые идеи. Для получения дополнительной информации читайте официальные учебные пособия по Swing и графике.