请大家帮我看下下面我写的代码,看看有什么错误啊?为什么总是实现不了按下“1”键显示“hello”,按下“2”键显示“goodbye”,谢谢import java.awt.*;
import java.awt.event.*;
import javax.swing.JTextArea;
import javax.swing.JFrame;public class test extends JFrame implements KeyListener{
    JTextArea text_Area;
    
    test(String title){
        super(title);
        
        int width = 200;
        int height = 300;
        Point center = GraphicsEnvironment.getLocalGraphicsEnvironment ().getCenterPoint ();
        setBounds(center.x - width/2, center.y - height/2, width, height);
        
        setLayout(new GridLayout(2, 1, 0, 0));
        
        JPanel text_Panel = new JPanel();
        add(text_Panel);
        text_Area = new JTextArea();
        text_Area.setEditable (false);
        text_Panel.add (text_Area);
        
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
    }
    
    public void keyTyped(KeyEvent e){
        
    }
    
    public void keyReleased(KeyEvent e){
        
    }
    
    public void keyPressed(KeyEvent e){
        switch(e.getKeyCode ()){
            case KeyEvent.VK_1:
                text_Area.setText ("Hello");
                break;
            case KeyEvent.VK_2:
                text_Area.setText ("goodbye");
                break;
        }
    }
    
    public static void main(String[] args){
        test window = new test("Test");
        window.addKeyListener (window);
    }
}

解决方案 »

  1.   

    JFrame好像不能监听KeyListener事件吧.?
    JFrame一得到焦点马上会失去焦点,焦点就交给了内部面板了.!
      

  2.   

    帮你改了下代码..吧监听换成对TextArea,监听成功...!
    代码通过编译.!
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.JTextArea;
    import javax.swing.JFrame;
    import javax.swing.JPanel;public class test extends JFrame /*implements KeyListener*/{
        JTextArea text_Area;
        
        test(String title){
            super(title);
            
            int width = 200;
            int height = 300;
            Point center = GraphicsEnvironment.getLocalGraphicsEnvironment ().getCenterPoint ();
            setBounds(center.x - width/2, center.y - height/2, width, height);
            
            setLayout(new GridLayout(2, 1, 0, 0));
            
            JPanel text_Panel = new JPanel();
            add(text_Panel);
            text_Area = new JTextArea();
            text_Area.setEditable(false);
            text_Panel.add (text_Area);
            
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            setVisible(true);
            System.out.println ("cs");
            System.out.println ((char)KeyEvent.VK_1);
            text_Area.addKeyListener(new KeyAdapter(){
             public void keyPressed(KeyEvent e){
             System.out.println ("C");
             switch(e.getKeyCode()) {
             case KeyEvent.VK_1:
             text_Area.setText ("Hello");
             System.out.println ("H");
             break;
             case KeyEvent.VK_2:
             text_Area.setText ("GoodBye");
             System.out.println ("8");
             break;
             }
             }
            });
            System.out.println ("123123132");
        }
    public static void main(String[] args){
            test window = new test("Test");
           
        }
    }
      

  3.   

    JFrame不能加KeyListener啊?原来是这样!谢谢!
    不过还有一个问题,我在这个窗口的class中加了
    JPanel button_Panel = new JPanel();
    button_Panel.setLayout (new GridLayout(1, 2, 0, 10));
    add(button_Panel);
    JButton hello_Button = new JButton("Hello");
    button_Panel.add (hello_Button);
    hello_Button.addActionListener (new ComTest(ComTest.hello_button, this));
    JButton goodbye_Button = new JButton("Goodbye");
    button_Panel.add (goodbye_Button);
    goodbye_Button.addActionListener (new ComTest(ComTest.goodbye_button, this));//ComTest.class
    import java.awt.*;
    import java.awt.event.*;public class ComTest implements ActionListener{
        static final int hello_button = 1;
        static final int goodbye_button = 2;
        int curButton;
        test window;
        
        ComTest(int curButton, test window){
            this.curButton = curButton;
            this.window = window;
        }
        
        public void actionPerformed(ActionEvent e){
            switch(curButton){
                case hello_button:
                    window.text_Area.setText ("Hello");
                    break;
                case goodbye_button:
                    window.text_Area.setText ("Goodbye");
                    break;
            }
        }
    }为什么创建出窗口后,在没有单击两个button前,可以实现按“1”显示“hello”,按“2”显示“goodbye”的功能,可是当点击过两个button后,再按“1”或“2”键就没有反映了呢?