这个代码为什么不可以实现按键盘3然后退出啊 
public class PosFrame extends JFrame

private JButton jButton1; 
private JButton jButton2; 
private JButton jButton3=new JButton("退出 (ESC)"); 
  Container con=this.getContentPane(); public PosFrame()
  {
     this.jButton3.setBackground(new Color(203,231,255));
     this.jButton3.addActionListener(new ActionListener() 
     {
       public void actionPerformed(ActionEvent e)
       {
         System.exit(0);  
       }     
     }); this.addKeyListener(new KeyAdapter()
      {
      public void keyTyped(KeyEvent e)
      {
      if(e.getKeyChar()=='3') ////按键3
       System.exit(0);
      }
   
   } );
   
   con.add(jButton3);
   this.setVisible(true);
   this.pack();
  }
  
  
  public static void main(String args[])
  {
   new PosFrame();
  }
}

解决方案 »

  1.   

    e.getKeyChar()=='3' 这句话应该出问题了,应该用KeyEvent里的常数
      

  2.   

    this.addKeyListener(new KeyAdapter()
          {
          public void keyTyped(KeyEvent e)
          {
          if(e.getKeyChar()=='3') ////按键3
           System.exit(0);
          }
       
       } );=========================>this.addKeyListener(new KeyAdapter()
          {
          public void keyTyped(KeyEvent e)
          {
              if (e.getKeyCode() == KeyEvent.VK_3) 
              {   
                 System.exit(0);
              }
          }
       
       } );
      

  3.   

    更改成下面这样就可以了:this.addKeyListener(new KeyAdapter() {
          public void keyTyped(KeyEvent e) {
            char ch=e.getKeyChar( );   //注意这一行
            if (ch == '3') {
              System.exit(0);
            }
          }
        });
      

  4.   

    上面的方法都不行啊, this.addKeyListener(new KeyAdapter()
    {
           public void keyTyped(KeyEvent e)
           {
           
                if(e.getKeyChar()==27) ////按键ESC ,这里非要写ASCII码才可以的
               System.exit(0);
           }
         
           } );
      

  5.   

    我的方法可以啊!
    改为KeyEvent里的常数不就得了。this.addKeyListener(new KeyAdapter() {
          public void keyTyped(KeyEvent e) {
            char ch=e.getKeyChar();   //注意这一行
            if (ch == e.VK_ESCAPE) {
              System.exit(0);
            }
          }
        });
      

  6.   

    组件要接收键盘事件必须先得到输入焦点,你的程序启动之后焦点在jButton3上面,所以你在Frame上面加的键盘事件监听器就接收不到键盘事件了,改成下面这样吧import java.awt.*;
    import java.awt.event.*;import javax.swing.*;public class PosFrame extends JFrame
    {
    private JButton jButton1; private JButton jButton2; private JButton jButton3 = new JButton("退出 (ESC)"); Container con = this.getContentPane(); public PosFrame()
    {
    this.jButton3.setBackground(new Color(203, 231, 255)); AbstractAction exitAction = new AbstractAction() {
    public void actionPerformed(ActionEvent e)
    {
    System.exit(0);
    }
    };
    this.jButton3.addActionListener(exitAction);
    this.jButton3.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
    KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "ExitApp");
    this.jButton3.getActionMap().put("ExitApp", exitAction); con.add(jButton3);
    this.setVisible(true);
    this.pack();
    } public static void main(String args[])
    {
    new PosFrame();
    }
    }
      

  7.   

    在PosFrame()中加一句setFocusable(true);就可以了
      

  8.   

    同意 gtlang78() 的方法。
      

  9.   

    AbstractAction exitAction = new AbstractAction() {
    public void actionPerformed(ActionEvent e)
    {
    System.exit(0);
    }
    };
    this.jButton3.addActionListener(exitAction);
    this.jButton3.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
    KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "ExitApp");
    this.jButton3.getActionMap().put("ExitApp", exitAction);
    看不懂啊
    可以给我解释一下吗?
      

  10.   

    CC,碰到高手了
    强~!
    不过也有点咕哝玄虚了
    this.addKeyListener
    而不是this.jButton3.addKeyListener
    按3呐