可以直接捕获键盘事件的。
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) {
}
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) {
}
看看 JAVA API 不就行了1
我想这是不需要的
应为只有获得焦点的控件才能接受键盘事件
如果你的 JList 被反白了 那么他就是获得了焦点
这时只有这个 JList 才能响应键盘事件 不管其他还有多少控件能够接受键盘事件
if(e.getSource()==jList1 && e.getKeyCode()==KeyEvent.VK_ENTER){
难道你让整个类 实现 KeyListener ?
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_ENTER){
......
}
}
});不就 OK 了?
到这里是没有问题的>此时若再用鼠标点击JList的某行
这时 焦点 应该就回到 JList 上了呀
那么在鼠标点过之后 他必将获得焦点 除非 他无法获得焦点 如 JLabel
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) { }
}
}
下面的那句话肯定是不行的,不能这么用吧:)因为参数e的含义变了你把方法的内容直接放过来:
if (indexList.isSelectionEmpty()){
System.out.println("None has been selected!");
}else{
try{ }catch(Exception e) { }
}
showButtonActionPerformed(e);
不能这样使用如果想要 将焦点传到button 的话
要用这一句
this.showButton.grabFocus();还有 既然 indexTextField.addActionListener 了
那又何必再 indexTextField.addKeyListener 呢?
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 中调用这样看起来根好一些