이와 비슷한 제목으로 몇 가지 질문을 검색했지만 (예 : how to use jpanel with paint (or repaint)) 코드가 작동하지 않는 이유를 찾을 수 없습니다. 저는 JPanels 초보자를위한 그래픽입니다. 그래서 이런 종류의 일에 대한 첫 번째 시도는 화살표 키로 움직일 수있는 삼각형을 만드는 것입니다. 삼각형을 아무 문제없이 잘 그립니다. 그러나 삼각형을 화살표로 움직이려고하면 움직이지 않았습니다. 누구나 왜 다시 칠하지 않을지 찾아 낼 수 있습니까?JPanel repaint() 작동하지 않음
JPanel의 코드 (당신이 말해 나는 그것을 편집 할 수 있습니다 볼 필요가있는 경우 또한, 프레임 만을하고 패널을 추가 JFrame의 자체에 대한 별도의 클래스가) :
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Drawpanel extends JPanel implements KeyListener{
int[] xcoords = {-20,0,20};//Triangle x coordinates
int[] ycoords = {20,-20,20};//Triangle y coordinates
int x = 100;//X coordinate for drawing the triangle
int y = 100;//Y coordinate for drawing the triangle
Graphics2D g2d;
Polygon tri = new Polygon(xcoords,ycoords,xcoords.length);//triangle
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g2d = (Graphics2D)g;
g2d.translate(x,y);//draw triangle at x and y coordinates
g2d.setColor(new Color(234,22,72));
g2d.fill(tri);
}
public void keyTyped(KeyEvent k){}
public void keyReleased(KeyEvent k){}
public void keyPressed(KeyEvent k)
{
int keycode = k.getKeyCode();
switch(keycode)
{
case KeyEvent.VK_DOWN://if down arrow pressed, decrease ship y coordinate by 10
y -= 10;
case KeyEvent.VK_UP:
y += 10;
case KeyEvent.VK_LEFT:
x -= 10;
case KeyEvent.VK_RIGHT:
x += 10;
}
repaint();//screen doesn't repaint
}
}
@camickr이 제안했듯이 키 수신기를 다음과 같이 바꾸는 방법은 [here] (http://stackoverflow.com/questions/22741215/how-to-use-key-bindings-instead-of-key-listeners)를 참조하십시오. 키 바인딩. – user1803551