我想在键盘上按一个按键,然后使得label里面的内容改成刚刚按的键,现在按字母的话就能成功,但如果按的是shift Ctrl 这些键就挂了,想问问有没有方法让我按这类键的时候也能正常显示该键所代表的内容呢?

解决方案 »

  1.   

    部分代码如下
    public void changeSettings(JLabel label1){
    final JLabel label = label1;
            label1.setFocusable(true);
            label1.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
            label1.addMouseListener(new MouseAdapter(){
                    public void mouseClicked(MouseEvent e){
                        label.requestFocusInWindow(); 
                    }
                });
            label1.addKeyListener(new KeyAdapter(){
                    public void keyTyped(KeyEvent e){
                        if(Character.isISOControl(e.getKeyChar())){
                            label.setText(KeyEvent.getKeyText(e.getKeyChar()));                        
                        } 
                        else if(Character.isWhitespace(e.getKeyChar())){
                         label.setText("space");
                        }
                        else if(KeyEvent.VK_HOME == e.getKeyCode()){
                         label.setText("Home");
                        }
                        else if(KeyEvent.VK_END == e.getKeyCode()){
                         label.setText("End");
                        }
                        else if(KeyEvent.VK_PAGE_UP == e.getKeyCode()){
                         label.setText("PgUp");
                        }
                        else if(KeyEvent.VK_PAGE_DOWN == e.getKeyCode()){
                         label.setText("PgDn");
                        }
                        else if(KeyEvent.VK_UP == e.getKeyCode()){
                         label.setText("up");
                        }
                        else if(KeyEvent.VK_DOWN == e.getKeyCode()){
                         label.setText("down");
                        }
                        else if(KeyEvent.VK_LEFT == e.getKeyCode()){
                         label.setText("left");
                        }
                        else if(KeyEvent.VK_RIGHT == e.getKeyCode()){
                         label.setText("right");
                        }
                        else if(KeyEvent.VK_TAB == e.getKeyCode()){
                         label.setText("Tab");
                        }
                        else if(KeyEvent.VK_CONTROL == e.getKeyCode()){
                         label.setText("Ctrl");
                        }
                        else if(KeyEvent.VK_SHIFT == e.getKeyCode()){
                         label.setText("Shift");
                        }
                        else if(KeyEvent.VK_CAPS_LOCK == e.getKeyCode()){
                         label.setText("CapsLK");
                        }
                        else {
                            label.setText(""+e.getKeyChar());
                        }
                    }
                });
      

  2.   

    public Object getSource()最初发生 Event 的对象。 返回:
    最初发生 Event 的对象。