本帖最后由 cyclovebritpop 于 2011-05-07 13:43:00 编辑

解决方案 »

  1.   

    label要先设置可以得到焦点才可以。
    label.setFocusable(true)
      

  2.   

    是这样吗?可是还是不行啊 //改变按键设置
    public void changeSettings(final JLabel label){
    label.addMouseListener(new MouseAdapter(){
    public void mouseClicked(MouseEvent ex){
    label.setForeground(Color.white);
    label.setFocusable(true);
    label.addKeyListener(new KeyAdapter(){
    public void keyTyped(KeyEvent e){
    label.setText(String.valueOf(e.getKeyChar()));
    }
    });
    }
    });
    }
      

  3.   

    java swing技术好长时间没有看过了,学习下
      

  4.   

    Java code
        //改变按键设置
        public void changeSettings(final JLabel label){
            label.addMouseListener(new MouseAdapter(){
                public void mouseClicked(MouseEvent ex){
                    label.setForeground(Color.white);
                    label.setFocusable(true);
                    label.addKeyListener(new KeyAdapter(){
                        public void keyTyped(KeyEvent e){
                            label.setText(String.valueOf(e.getKeyChar()));
                        }
                    });
                }
            });
        }
    我觉得你不能将其(我标注出来的这里)定义为final,被定义为fianl的类不能再被继承,被定义为final 的方法不能被重写,被定义final 的变量经赋值后不能被改写,你这里将label定义为final的就以为着在运行过程中该label一旦调用构造方法初始化后就不能再被更改了,所以你再在后面做什么都不可能了,
      

  5.   

    应该使用 
    label.addKeyListener(new KeyAdapter(){
        public void keyTyped(KeyEvent e){
            label.setText(""+e.getKeyChar());
        }
    });
      

  6.   

    还是不行
    我之前试过只有一个label的时候就是可以的,现在不止一个label,然后就没有效果了。
      

  7.   

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;public class Example {
        public static void main(final String[] args){
            EventQueue.invokeLater(new Runnable(){
                    @Override public void run(){
                        JFrame frame = new JFrame("Example");
                        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                        frame.setLocationRelativeTo(null);
                        
                        frame.getContentPane().add(makeJLabel("Center"));
                       frame.getContentPane().add(makeJLabel("SOUTH"),BorderLayout.SOUTH);
                        frame.getContentPane().add(makeJLabel("NORTH"),BorderLayout.NORTH);
                        frame.getContentPane().add(makeJLabel("WEST"),BorderLayout.WEST);
                        frame.getContentPane().add(makeJLabel("EAST"),BorderLayout.EAST);
                        
                        frame.pack();
                        frame.setVisible(true);
                    }
                });
        }    static JLabel makeJLabel(String text){
            final JLabel label = new JLabel(text);
            label.setFocusable(true);
            label.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
            label.addMouseListener(new MouseAdapter(){
                    public void mousePressed(MouseEvent e){
                        label.requestFocusInWindow(); 
                    }
                });
            label.addKeyListener(new KeyAdapter(){
                    public void keyTyped(KeyEvent e){
                        //final JLabel label = (JLabel)e.getComponent();
                        label.setText(""+e.getKeyChar());
                    }
                });
            label.addFocusListener(new FocusListener(){
                    public void focusGained(FocusEvent e){
                        label.setBorder(BorderFactory.createLineBorder(Color.BLUE,5));
                    }
                    public void focusLost(FocusEvent e){
                        label.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
                    }
                });
            return label;
        }
    }
      

  8.   

    鼠标点击JLabel不会切换焦点、使用TAB才行。
    按TAB切换焦点到JLabel上就可以了。
      

  9.   

    回复12楼:
    如果我想在键盘上按的不止是字母,还有其他的键应该怎么办?
    比如说我按回车键,能让它显示Enter么
      

  10.   

                    public void keyTyped(KeyEvent e){
                        if(Character.isISOControl(e.getKeyChar())){
                            label.setText(KeyEvent.getKeyText(e.getKeyChar()));                        
                        } else {
                            label.setText(""+e.getKeyChar());
                        }
                    }
    虽然能工作,可我也不能理解KeyEvent的getKeyText方法。