2012-05-05 3 views
2

JPanel에서 키 수신기를 구현했습니다. 다른 클래스에서 가져온 이미지를 가져 와서 표시합니다. NA 키 리스너는 해당 클래스로 전달되어 많은 이미지 중 하나를 가져 와서 한 방향으로 2 픽셀 이동합니다. 내 문제는 repaint()를 호출 할 때 오래된 이미지가 사라지지 않는다는 것입니다. 그래서 이미지 라인을 얻습니다. 문제는 내가 이미지와 JPanel 클래스로 클래스를 결합하여 하나의 바이 파이널에 완벽하게 적용되었다는 것입니다.
나는 이것에 대한 연구를했고 이중 버퍼링을 발견했다. 이 작업을 수행해야한다면 왜 하나의 큰 클래스 대 다른 클래스로 결합 될 때 작동할까요? 다음은 JPanel 클래스의 코드입니다. 아무도 나를 도울 수 있습니까? 대답이 이중 버퍼링이면 누군가 나에게 설명 할 수 있습니다. 나는 이론을 얻지 만 코드는 얻지 못한다.이미지를 다시 칠하지 않고 그냥 곱하면

import java.awt.Graphics; 
import javax.swing.JPanel; 
import java.awt.Image; 
import java.awt.Graphics2D; 
import java.awt.event.KeyAdapter; 
import java.awt.event.KeyEvent; 
    public class picPanel extends JPanel 
    { 
    walker w; 
    JPanel panel; 

    public picPanel() 
    { 
    w=new walker(); 
    addKeyListener(new TAdapter()); 
    setFocusable(true); 
    System.out.println(w.getX()); 
    System.out.println(w.getY()); 
    if(w.getImg()==null) 
     System.out.println("is emty"); 

    repaint(); 
    //test(); 

    } 

    public void paintComponent(Graphics g) 
    { 
    System.out.println("Hello"); 
    //Graphics2D g2d = (Graphics2D)g; 

    Image m = w.getImg(); 
    g.drawImage(m,w.getX(),w.getY(),this); 

    } 

    private class TAdapter extends KeyAdapter 
    { 
    public void keyPressed(KeyEvent e) 
    { 
    w.keyPressed(e); 
    System.out.println("Hello"); 
    repaint(); 

    } 
    } 
} 
+0

'Image m = w.getImg();'앞에'g.clearRect (0, 0, getWidth(), getHeight());를 추가하려고 했습니까? 희망이 당신이 원하는 것입니다 :-) –

답변

3

그냥 paintComponent 방법에 super.paintComponent를 호출합니다. 코드에 대한

일부 추가 발언이

  1. 스윙은 다른 사람이 코드를 읽을 쉽게하려면 KeyBindings iso KeyListeners
  2. 작동하도록 설계되었습니다의 Java naming/code conventions을 존중하십시오, 예를 들어, 클래스는 대문자로 시작하고 소문자로 된 변수
  3. 메소드를 재정의 할 때 @Override 태그를 추가하는 것이 좋습니다. 컴파일러는 서명이 일치하는지 검사 할뿐만 아니라 추가 한 메소드를 빠르게 확인하기 위해 코드를 읽어야하는 다른 사용자가 더 쉽게 적용 할 수 있습니다.
+0

감사합니다. 그것은 효과가 있었다. 앞으로 내 첫 번째 게시물이었던 코드를 더 잘 게시 할 것입니다. – user1376339

관련 문제