2014-09-25 5 views
0

이 프로그램에서 컴파일 및 실행에 성공했습니다. 그러나 일부 문자를 입력하면 프레임에 그 문자가 표시되지 않습니다. 왜 ? 오류는 무엇입니까?이 프로그램의 KeyAdapter 부분에 오류가 있습니다.

import java.awt.*; 
import java.awt.event.*; 
import java.applet.*; 

class frameadapter extends WindowAdapter 
{ 
    newframe newthis; 

    public frameadapter(newframe n) 
    { 
     newthis=n; 
    } 
    public void windowClosing(WindowEvent we) 
    { 
     newthis.setVisible(false); 
     System.exit(0); 
    } 

} 


class keyadapter extends KeyAdapter 
{ 
    newframe keythis; 
    public keyadapter(newframe n1) 
    { 
     keythis=n1; 
    } 

    public void KeyTyped(KeyEvent ke) 
    { 
     keythis.keymsg+=ke.getKeyChar(); 
     System.out.println(keythis.keymsg); 
     keythis.repaint(); 
    } 
} 




public class newframe extends Frame implements MouseListener 
{ 
    int mouseX; 
    int mouseY; 
    String keymsg="This is a Test"; 
    String msg=""; 
    public newframe() 
    { 
     addKeyListener(new keyadapter(this)); 
     addWindowListener(new frameadapter(this)); 
     addMouseListener(this); 
     this.setSize(600,600); 
     this.setVisible(true); 
    } 

    public void paint(Graphics g) 
    { 
     g.drawString(keymsg,100,100); 
     g.drawString(msg, 500, 200); 
    } 


    public void mouseClicked(MouseEvent e) { 
     mouseX=this.getX(); 
     mouseY=this.getY(); 
     msg="MOUSE CLICKED AT"; 
     repaint(); 
    } 


    public void mousePressed(MouseEvent e) { 
     mouseX=this.getX(); 
     mouseY=this.getY(); 
     msg="MOUSE PRESSED AT"; 
     repaint(); 
    } 

    public void mouseReleased(MouseEvent e) { 
     mouseX=this.getX(); 
     mouseY=this.getY(); 
     msg="MOUSE RELEASED AT"; 
     this.setForeground(Color.WHITE); 
     this.setBackground(Color.BLACK); 
     repaint(); 
    } 

    public void mouseEntered(MouseEvent e) { 
     mouseX=this.getX(); 
     mouseY=this.getY(); 
     msg="MOUSE ENTERED AT"; 
     repaint(); 
    } 


    public void mouseExited(MouseEvent e) { 
     mouseX=this.getX(); 
     mouseY=this.getY(); 
     msg="MOUSE EXITED AT"; 
     repaint(); 
    } 

    public static void main(String args[])  
    { 
     newframe n=new newframe(); 
    } 
} 

오류는 Keyadapter 클래스에 있습니다.하지만 해결 방법을 찾을 수 없습니다. 그것은에 등록 된 구성 요소가 포커스를 가질 수 및 키보드 포커스를

  • Frame을 가진 키 이벤트의 관점에서, 포커스 아니라,이 것이 불가능 그것에 만, 기본있게 때

  • 답변

    2
    1. KeyListener 만 키 이벤트에 응답 AWT는 날짜의 일반적에서 15+ 년으로, 창문으로 JFrame을 사용, 이렇게 몇 가지 절실히 필요가 없다면

    , 내가 대신 Frame을 사용하여에 추천 것입니다 ... 키 이벤트 알림을받을 더 이상 사용되지 않습니다. 자세한 내용은 Creating a GUI With JFC/Swing을 참조하십시오.

    JPanel으로 시작하고 대신 paintComponent 메서드를 재정 의하여 사용자 정의 페인팅을 수행하십시오. 자세한 내용은 Performing Custom Painting을보십시오.

    key bindings API을 사용하여 패널에 대한 인증 키 작업을 수행하십시오. 이렇게하면 패널에서 키 이벤트 알림을 수신하는 데 필요한 포커스 레벨을 정의 할 수 있습니다.

    +0

    맞습니다. 어떻게 잊어 버렸습니까? 고마워 Madprogrammer 톤. – user3414734