我用键盘监听面板,代码如下:import java.awt.event.*;
import java.awt.*;
import javax.swing.*;public class KeyTest {
    public static void main(String args[]){
        JFrame f = new myFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }
}
class myFrame extends JFrame{
    private final int DEFAULT_WIDTH = 400;
    private final int DEFAULT_HEIGHT = 400;
    public myFrame(){
        setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
        myPanel p = new myPanel();
        p.requestFocus();
        setLayout(new BorderLayout());
        add(p, BorderLayout.CENTER);
    }
}
class myPanel extends JPanel{
    public myPanel(){
        this.addKeyListener(new myKeyListener());
    }
    private class myKeyListener implements KeyListener{        public void keyTyped(KeyEvent e) {
            if(e.getKeyCode() == KeyEvent.VK_UP){
                System.out.println("----------------");
            }
        }        public void keyPressed(KeyEvent e) {
            throw new UnsupportedOperationException("Not supported yet.");
        }        public void keyReleased(KeyEvent e) {
            throw new UnsupportedOperationException("Not supported yet.");
        }
    }
}当我按向上键时却得不到--------------的响应,好久都没相通,哪位能指出并改正,不胜感激
期待您的回复

解决方案 »

  1.   

    最好把代码挪到keyReleased里面
      

  2.   

    虽然今年才刚学Java,看不懂,但顶一下!!
      

  3.   

    首先JPanel应当捕捉不到键盘的输入事件,所以如果你只是测试的话可以将其还为JTextArea。另外在keyTyped()中应当不会捕捉VK_UP事件,因为VK_UP是一个不可打印的字符,所以可以考虑将其放入到keyPressed()中去。
    import java.awt.event.*;
    import java.awt.*;
    import javax.swing.*;public class KeyTest {
    public static void main(String args[]) {
    JFrame f = new myFrame();
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setVisible(true);
    }
    }class myFrame extends JFrame {
    private final int DEFAULT_WIDTH = 400; private final int DEFAULT_HEIGHT = 400; public myFrame() {
    setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
    myPanel p = new myPanel();
    p.requestFocus();
    setLayout(new BorderLayout());
    add(p, BorderLayout.CENTER);
    }
    }class myPanel extends JTextArea {
    public myPanel() {
    this.addKeyListener(new myKeyListener());
    } private class myKeyListener implements KeyListener { public void keyTyped(KeyEvent e) {
    } public void keyPressed(KeyEvent e) {
    if (e.getKeyCode() == KeyEvent.VK_UP) {
    System.out.println("----------------");
    }
    // throw new UnsupportedOperationException("Not supported yet.");
    } public void keyReleased(KeyEvent e) {
    // throw new UnsupportedOperationException("Not supported yet.");
    }
    }
    }
      

  4.   

    楼上的没有解决问题,即使放在keyPressed中,依旧没有响应
      

  5.   

    class myPanel extends JPanel{改了这个没有?class myPanel extends JTextArea {
      

  6.   

    我做的东西是推箱子,就想在面板上触发事件,
    所以要extends JPanel,但是没有触发事件,
    哪位高手躬亲示范一下,不胜感激
      

  7.   

    import java.awt.event.*;
    import java.awt.*;
    import javax.swing.*;public class KeyTest {
        public static void main(String args[]){
            JFrame f = new myFrame();
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.setVisible(true);
        }
    }
    class myFrame extends JFrame{
        private final int DEFAULT_WIDTH = 400;
        private final int DEFAULT_HEIGHT = 400;
        public myFrame(){
            setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
            myPanel p = new myPanel();
            p.requestFocus();
            getContentPane().setLayout(new BorderLayout());
            getContentPane().add(p, BorderLayout.CENTER);
        }
    }
    class myPanel extends JPanel implements   KeyListener   {
        public myPanel(){
            addKeyListener(this);
        }
     
         public   boolean   isFocusTraversable()   {
         return   true;   
         }
            public void keyTyped(KeyEvent e) {
            
            }        public void keyPressed(KeyEvent e) {
             System.out.println(e.getKeyChar()+"----------------"+e.getKeyCode());
             if(e.getKeyCode() == KeyEvent.VK_UP){
                    System.out.println("U pressed UP");
                }
            
             //throw new UnsupportedOperationException("Not supported yet.");
            }        public void keyReleased(KeyEvent e) {
                //throw new UnsupportedOperationException("Not supported yet.");
            }
        
    }