可以直接捕获键盘事件的。
public class ...... implements KeyListener{
......
jList1.addKeyListener(this);.....
public void keyPressed(KeyEvent e) {
   if(e.getKeyCode()==KeyEvent.VK_ENTER){
        JOptionPane.showMessageDialog(this,"You selected: "+jList1.getSelectedValue().toString());
      }
}
public void keyReleased(KeyEvent e) {
}
public void keyTyped(KeyEvent e) {
}

解决方案 »

  1.   

    其实很简单,楼主太懒了!
    看看 JAVA API 不就行了1
      

  2.   

    >如何取得键盘响应事件的焦点
    我想这是不需要的
    应为只有获得焦点的控件才能接受键盘事件
    如果你的 JList 被反白了 那么他就是获得了焦点
    这时只有这个 JList 才能响应键盘事件 不管其他还有多少控件能够接受键盘事件
      

  3.   

    是这个意思吗?
    if(e.getSource()==jList1 && e.getKeyCode()==KeyEvent.VK_ENTER){
      

  4.   

    没必要吧
    难道你让整个类 实现 KeyListener ?
      

  5.   

    jList.addKeyListener(new java.awt.event.KeyAdapter() {
          public void keyPressed(KeyEvent e) {
            if(e.getKeyCode()==KeyEvent.VK_ENTER){
              ......
            }
          }
        });不就 OK 了?
      

  6.   

    各位可能误会了我的意思,我可能也没有说清楚:我在一个程序中使用了JTextField和JList,都实现了键盘事件,我做的是帮助文件的索引功能:在JTextField中输入文本,在JList中自动匹配行,然后按回车,此时响应的应该是JTextField的键盘事件,但是JTextField相应了键盘事件后屏幕焦点停留在JTextField中,此时若再用鼠标点击JList的某行,然后按回车键,则消息无法响应,因为没有焦点,请问各位这种情况如何处理啊,如果还有什么不明白的,建议大家看看IE得帮助系统(帮助->目录和索引),一起探讨,谢谢!
      

  7.   

    >在JTextField中输入文本,在JList中自动匹配行,然后按回车,此时响应的应该是JTextField的键盘事件
    到这里是没有问题的>此时若再用鼠标点击JList的某行
    这时 焦点 应该就回到 JList 上了呀
      

  8.   

    但是光标依然在JTextField中啊,说明焦点没有改变啊,我试过了,不行
      

  9.   

    按常规来说 只要鼠标点过的组件是能够活的焦点的话
    那么在鼠标点过之后 他必将获得焦点 除非 他无法获得焦点 如 JLabel
      

  10.   

    但是本问题就是这样啊,就算点击JList的某行,光标一直在JTextField中
      

  11.   

    你的 JDK 是什么版本的?
      

  12.   

    为了实现在JTextField中输入信息后JList自动跳转,我是这样做的:各位高人再看看,谢谢!    indexTextField.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
              indexTextField_actionPerformed(e); 
            }
          });      indexTextField.addKeyListener(new KeyAdapter() {
            public void keyReleased(KeyEvent e) {
              indexTextField_keyReleased(e);  
            }
          });      showButton.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent evt) {
                showButtonActionPerformed(evt);
             }
          });    private void indexTextField_actionPerformed(ActionEvent e) {
          int index;
        
          index = HelpUtil.getPosition(allNode, indexTextField.getText());
          if(index >= 0 && index < allNode.size()) {
            indexList.setSelectedIndex(index);
            indexList.ensureIndexIsVisible(index);
            indexList.updateUI();        //将焦点传到button
            showButtonActionPerformed(e);
          }
        }    private void indexTextField_keyReleased(KeyEvent e) {
          int index;
          int position;
          
          index = HelpUtil.getPosition(allNode, indexTextField.getText());
          if(index >= 0 && index < allNode.size()) {
            indexList.setSelectedIndex(index);
            indexList.ensureIndexIsVisible(index);
            indexList.updateUI();
          }
        }   private void showButtonActionPerformed(ActionEvent evt) {
          
          if (indexList.isSelectionEmpty()){
            System.out.println("None has been selected!");
          }else{
            try{              }catch(Exception e) {        }
          }
        }
      

  13.   

    //将焦点传到button
    下面的那句话肯定是不行的,不能这么用吧:)因为参数e的含义变了你把方法的内容直接放过来:
         if (indexList.isSelectionEmpty()){
            System.out.println("None has been selected!");
          }else{
            try{              }catch(Exception e) {        }
          }
      

  14.   

    正如 geyf 所说的
    showButtonActionPerformed(e);
    不能这样使用如果想要 将焦点传到button 的话
    要用这一句
      this.showButton.grabFocus();还有  既然 indexTextField.addActionListener 了
    那又何必再 indexTextField.addKeyListener 呢?
      

  15.   

    如果你愿意 可以把
          int index;
          int position;
          
          index = HelpUtil.getPosition(allNode, indexTextField.getText());
          if(index >= 0 && index < allNode.size()) {
            indexList.setSelectedIndex(index);
            indexList.ensureIndexIsVisible(index);
            indexList.updateUI();
          }
    这部分代码 写在另一个函数里面
    然后分别在
    indexTextField_actionPerformed 和 indexTextField_keyReleased 中调用这样看起来根好一些
      

  16.   

    我明白了,我分别在JTextField的actionPerformed()和JList中的mouseClicked()事件中加入indexList.grabFocus();  问题解决,谢谢各位