2014-04-03 6 views
0

이와 비슷한 제목으로 몇 가지 질문을 검색했지만 (예 : 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 
    } 

} 
+0

@camickr이 제안했듯이 키 수신기를 다음과 같이 바꾸는 방법은 [here] (http://stackoverflow.com/questions/22741215/how-to-use-key-bindings-instead-of-key-listeners)를 참조하십시오. 키 바인딩. – user1803551

답변

2

KeyListener를 사용하지 마십시오. 스윙은 Key Bindings과 함께 사용하도록 설계되었습니다.

패널에 포커스가 없으며 KeyEvent에 응답하지 않는 것이 문제 일 수 있습니다. 자세한 내용 및 키 바인딩을 사용하는 솔루션은 Motion Using the Keyboard을 참조하십시오.

또 다른 가능한 문제는 패널의 getPreferredSize() 메서드를 재정 의하여 적절한 Dimension을 반환하지 않으므로 크기가 0이므로 Swing에서 아무 것도 칠할 생각이 없다는 것입니다.

+0

조언 해 주셔서 감사합니다. 방금 몇 가지 키 바인딩 튜토리얼을 시도했지만 키 바인딩을 사용하는 방법에 대해 혼란스러워합니다. 내 삼각형이 구성 요소 인 아래쪽 화살표 키 입력에 대해 component.getInputMap.put()과 같은 메서드를 사용하는 방법을 설명 할 수 있습니까? – imulsion

+0

@imulsion, 나는 복잡한 복잡성을 가지고있는 몇 가지 작업 예제로 블로그 링크를 제공했다. – camickr

+0

블로그에는 실제 예제가 있지만 JComponents와 대조되는 그래픽은 포함되어 있지 않습니다. – imulsion