2011-04-26 7 views
1

필요한 모든 메소드를 구현하고 "implements KeyListener"를 추가하고 addKeyListener 및 setFocus (true)를 추가했지만 keyresponses를 얻지 못했습니다. JFrame에는 내가 만든 캔버스 클래스가 포함되어 있습니다. 다음은 창 클래스의 생성자입니다.Keylistener를 JFrame에 추가하는 방법

setBounds(0,0, width, height); 
    setIgnoreRepaint(true); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setLocationRelativeTo(null); 
    add(MainCanvas.Instance()); 
    this.getContentPane().addKeyListener(this); 
    pack(); 
    setVisible(true); 

    if (thread == null) 
    { 
     thread = new Thread(this); 
    } 

    thread.start(); 
+0

키 수신기를 콘텐츠 창 대신 MainCanvas.Instance()에 추가하면 어떻게됩니까? – MeBigFatGuy

+2

1)'Canvas'를 의미하는 경우'JComponent' 나'JPanel'을 위해 그것을 대체하십시오. Swing과 AWT를 혼용하지 마십시오 (현재 수행중인 작업이나 Java 7을 사용하지 않는 경우). 2) 더 빨리 도움을 받으려면 [SSCCE] (http://pscode.org/sscce.html)를 게시하십시오. 3)'setBounds (int, int, int, int)'에 대한 호출은 권할 수 없으며'pack()'을 더 이상 호출하지 않음으로써 중복 될 수있다. –

답변

1

JFrame 대신 Canvas에 KeyListener를 추가해야합니다. 기본 레이아웃 (BorderLayout)을 사용하여 JFrame에 모든 구성 요소를 추가하면 (예 : add(MainCanvas.getInstance()) 구성 요소가 JFrame보기를 차지하고 모든 키 입력이 JFrame이 아닌 Canvas로 전송됩니다. JFrame 대신 MainCanvas에 KeyListener를 추가하십시오.

+0

캔버스에 추가하려고했지만 여전히 작동하지 않았습니다. BufferStrategy와 생성자를 설정 한 후 add notifiy 메서드에 추가했습니다. (모든 올바른 구현으로). – Jjack

2

포커스 구성 요소에만 키 이벤트가 전송됩니다. CanvasrequestFocus()으로 전화해야합니다.

+0

그리고 JPanel 하위 클래스 인 경우 포커스 가능 속성이 true로 설정되어 있는지 확인하십시오. –

관련 문제