我在textfield 框里面加上了 textField.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
System.err.println("keyPressed   Key  Code" + e.getKeyCode());
}我本想监听tab事件,但是发现当你按tab得时候根本不激发addKeyListener。也就是说根本不走到这段代码里面去。非常郁闷。本想用focusLost做,但是又有一个问题。用鼠标移走时激发的focusLost和用tab时focusLost 事件所作得功能不一样的。 有什么办法区分开来的吗?谢谢!
下面是源代码!
----------------------------------package my;import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JTextField;public class TabEvent extends JFrame { private JTextField textField; /**
 * Launch the application
 * 
 * @param args
 */
public static void main(String args[]) {
try {
TabEvent frame = new TabEvent();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
} /**
 * Create the frame
 */
public TabEvent() {
super();
getContentPane().setLayout(new FlowLayout());
setBounds(100, 100, 500, 375);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); textField = new JTextField();
textField.addFocusListener(new FocusAdapter() {
public void focusLost(final FocusEvent e) {

}
});
textField.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
System.err.println("keyPressed   Key  Code" + e.getKeyCode());
} /**
 * Invoked when a key has been released.
 */
public void keyTyped(KeyEvent e) { System.err.println("keyTyped Key  Code" + e.getKeyCode());
} public void keyReleased(final KeyEvent e) { System.err.println("keyReleased  Key  Code" + e.getKeyCode()); if (e.getSource().getClass().equals(JTextField.class)
&& e.getKeyCode() == KeyEvent.VK_ENTER) {
System.err.println("Enter key!");
}
if (e.getSource().getClass().equals(JTextField.class)
&& e.getKeyCode() == KeyEvent.VK_TAB) {
System.err.println("TAB key!");
} }
});
textField.setPreferredSize(new Dimension(80, 25));
getContentPane().add(textField);
//
}}

解决方案 »

  1.   

    监听TAB键所触发的事件不是这样写的
         Toolkit toolkit = Toolkit.getDefaultToolkit();
                toolkit.addAWTEventListener(new AWTEventListener() {
                    public void eventDispatched(AWTEvent e) {
                        if (((KeyEvent) e).getKeyCode() == KeyEvent.VK_F1)
                            System.out.println("F1");
                        if (((KeyEvent) e).getKeyCode() == KeyEvent.VK_F2)
                            System.out.println("F2");
                    }
                }, AWTEvent.KEY_EVENT_MASK);
      

  2.   

    那我想监听文本框得tab事件应该怎么写得了?
    因为文本框没有 .addAWTEventListener(new AWTEventListener() 方法!
    请大家帮帮忙  出出主意!
    谢谢
      

  3.   

    if (((KeyEvent) e).getKeyCode() == KeyEvent.VK_TAB)
    现在的人都懒到什么程度了,唉。天天能在CSDN上看到这样的懒人,这样对自己不好。
      

  4.   

    楼上的误解了我的意思!我是要给某个特定的文本框添加监听tab得事件Toolkit toolkit = Toolkit.getDefaultToolkit();
                toolkit.addAWTEventListener(new AWTEventListener() {
                    public void eventDispatched(AWTEvent e) {
                        if (((KeyEvent) e).getKeyCode() == KeyEvent.VK_F1)
                            System.out.println("F1");
                        if (((KeyEvent) e).getKeyCode() == KeyEvent.VK_F2)
                            System.out.println("F2");
                    }
                }, AWTEvent.KEY_EVENT_MASK);
    上面的代码是并不能定为到各某个文本框加。是所有的文本框都具有的这个事件。
    我想问的是怎么样给某个文本框监听
      

  5.   

    补充说明的是 在 tab健并不会激发actionlistener ActionMap addKeyListener。
      

  6.   

    那我想监听文本框得tab事件应该怎么写得了?
    将监听放在STATIC里面,然后在判断的条件里面,哪个文本框里输入了TAB了 不就行了
      static {
            try {
                Toolkit toolkit = Toolkit.getDefaultToolkit();
                toolkit.addAWTEventListener(new AWTEventListener() {
                    public void eventDispatched(AWTEvent e) {
                        if (((KeyEvent) e).getKeyCode() == KeyEvent.VK_F1)
                            System.out.println("F1");
                        if (((KeyEvent) e).getKeyCode() == KeyEvent.VK_F2)
                            System.out.println("F2");
                    }
                }, AWTEvent.KEY_EVENT_MASK);
                Thread thread = new Thread(new Runnable() {
                    public void run() {
                        try {
                            File music = new File(iSystemConstants.muiscfile);
                            Player player = new Player(new FileInputStream(music));
                            player.play();
                        } catch (FileNotFoundException ex) {
                        } catch (JavaLayerException ex) {
                        }                }
                });
                //thread.start();            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            } catch (Exception e) {
                JOptionPane.showMessageDialog(null, e.getMessage(), "ERROR",
                                              JOptionPane.ERROR_MESSAGE);
            }
        }