2016-07-01 16 views
1

아무런 오류나 sth가 없으며 투명한 화면 (배경 복사 가능)과 그려진 타원형이 있지만 화살표 키를 입력 할 때마다 키보드가 작동하지 않습니다. KeyListener를 추가하고 클래스를 JFrame으로 확장했지만 여전히 아무것도 수행하지 않습니다. 나는 초보자 용 물건이라는 것을 알고 있지만, 나는 초보자이며, 나를 괴롭 히고있다 : /. 또한 repaint()도 사용했습니다. 그래도 배경을 다시 렌더링합니까? 사전에 도움을 주셔서 감사합니다!JFrame과 같은 단순한 페인트와 유사한 프로그램을 키 바인딩과 함께 사용할 수 없습니다.

package JavaMain; 

import java.awt.Graphics; 
import java.awt.event.KeyAdapter; 
import java.awt.event.KeyEvent; 

import javax.swing.JFrame; 

public class javamain extends JFrame { 
int x, y; 
private static final long serialVersionUID = 1L; 
public class AL extends KeyAdapter { 

    private int keycode; 
    @SuppressWarnings("static-access") 
    public void keypress(KeyEvent event) { 
     keycode = event.getKeyCode(); 
     if (keycode == event.VK_LEFT) { 
      x -= 10; 
     } 
     if (keycode == event.VK_RIGHT) { 
      x += 10; 
     } 
     if (keycode == event.VK_UP) { 
      y -= 10; 
     } 
     if (keycode == event.VK_DOWN) { 
      y += 10; 
     } 
    } 

    public void keyrelease(KeyEvent e) { 
    } 
} 

public javamain() { 
    addKeyListener(new AL()); 
    setTitle("Statistic"); 
    setSize(600, 800); 
    setResizable(false); 
    setVisible(true); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    x = 200; 
    y = 200; 
} 

public void paint(Graphics g) { 
    g.fillOval(x, y, 20, 20); 
    repaint(); 
} 

public static void main(String[] args) { 
    new javamain(); 
} 
} 
+0

이 질문의 서식을 확인해보십시오. 제목은 당신이 묻는 것에 대해 조금 길기 때문에 질문은 하나의 긴 텍스트 덩어리입니다. IDE를 사용합니까? 그들은 디버깅 및 코드 형식으로 많은 도움을줍니다. –

답변

0

오류는 KeyListener에서 발생합니다.

AL 클래스가 올바른 메소드 이름을 사용하지 않습니다.

내가 알고있는 한 keyPressed 및 keyReleased해야합니다.

private class AL extends KeyAdapter { 

    public void keyPressed(KeyEvent event) { 

     int keycode = event.getKeyCode(); 

     if (keycode == KeyEvent.VK_LEFT) { 
      x -= 10; 
     } 
     if (keycode == KeyEvent.VK_RIGHT) { 
      x += 10; 
     } 
     if (keycode == KeyEvent.VK_UP) { 
      y -= 10; 
     } 
     if (keycode == KeyEvent.VK_DOWN) { 
      y += 10; 
     } 
    } 

    public void keyReleased(KeyEvent e) { 

    } 
} 

다른 코드를 변경하지 않으면 작동하는 것 같습니다.

+0

감사합니다. 또한, 다시 렌더링 화면은 어떻습니까? 나는 다시 칠한다. , 그것은 여전히 ​​배경을 렌더링합니까? –