2014-02-09 4 views
1

JFrame 내부에서 jpanel을 이동하려하고 있는데, 움직이지 않는 것처럼 보입니다. paint() 메서드에서 위치를 설정할 수는 있지만 다시 그리기에서는 업데이트되지 않습니다. 도와주세요! 진지하게, 당신이 어떤 paint 방법 내의 모든 구성 요소의 상태를 수정해서는 안하지 마십시오 사실, -JFrame에서 JPanel을 이동하십시오.

public void paint(Graphics g) { 
    g.drawImage(playerImg, x, 50, null); 
    this.setLocation(x, 50); 
} 

public void update() { 
    this.repaint(); 
} 


public void keyPressed(KeyEvent key) { 
    if(key.getKeyCode() == KeyEvent.VK_UP) { 
     x = x + 50; 
     System.out.println("e"); 
     update(); 
    } 
} 
+0

1) 문제를 묻는 것처럼 페인트 방법으로 위치를 설정하지 마십시오. 2) JPanel 또는 JComponent의 paintComponent보다는 페인트를 오버 라이딩해야합니다. 3) JPanel을 이동 하시겠습니까? JLabel 또는 이미지를 이동하는 것이 더 일반적입니다. 4) 스윙 프로그램은'update()'메소드를 호출하면 안된다. 5) 절대 위치 지정이 작동하려면 컨테이너가'null' 레이아웃을 사용해야합니다. 레이아웃은 위험한 레이아웃입니다. –

+0

1) 구성 요소의 위치를 ​​설정하려는 이유가 무엇입니까? 2) 더 빨리 도움을 받으려면 [MCTaRE] (http://stackoverflow.com/help/mcve) (최소한의 완전한 테스트를 거쳐 읽기 쉬운 예)를 게시하십시오. –

답변

3

"나는 페인트() 메소드의 위치에 설정할 수 있습니다"여기 내 코드입니다 super.paint을 호출하지 않아 페인트 체인이 손상되어 다른 문제가 끝나지 않게됩니다.

대신 부모 컨테이너 레이아웃 관리자를 null으로 설정하면 구성 요소가 사라지는 것을 알 수 있습니다. 이는 레이아웃 관리자가 구성 요소의 크기와 위치를 설정하는 책임이 있으므로 구성 요소를 제어해야합니다.

paint을 재정의하는 대신 paintComponent을 무시하고 super.paintComponent을 호출해야합니다. 자세한 내용은 Performing Custom Painting을 참조하십시오.

+0

super.paintComponent()를 추가하고 JFrame의 레이아웃을 FlowLayout()으로 설정했지만 레이아웃이 null 또는 Flow 인 경우에도 내 JPanel의 이미지가 보이지 않습니다. – LoafOfCat

+0

그것은'JPanel'이 크기 힌트를 제공하지 않기 때문입니다. 그리고'paint.Component' 안에서'super.paintComponent'를 호출하고'paint'가 아닌지 확인하십시오. 레이아웃 관리자를 제거하면 위치뿐 아니라 구성 요소의 크기도 책임을집니다. – MadProgrammer

관련 문제