【发布时间】:2012-11-11 02:08:51
【问题描述】:
我需要覆盖 JTable 上的输入键功能。目前,默认行为是在用户按下“Enter”键时将行选择向下移动一行。我想禁用它并让它根据他们的选择做一些不同的事情。问题是它似乎在进入我的接受行选择的 keylistener 之前向下移动 - 因此这会打开另一个窗口,其中选择了错误的行。
这是我目前的代码...:
public class MyJTable extends JTable {
public MyJTable(){
setRowSelectionAllowed(true);
addListeners()
}
public void addListeners(){
addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {}
@Override
public void keyPressed(KeyEvent e) {}
@Override
public void keyReleased(KeyEvent e) {
int key = e.getKeyCode();
if (key == KeyEvent.VK_ENTER) {
openChannel();
}
}
});
}
public void openChannel(){
for (int selectedRow : getSelectedRows()){
//Code to open channel based on row selected
}
}
}
【问题讨论】:
-
KeyListener不可行,Swing 组件使用KeyBindings。于是就有了remove方法,将KeyBindings从JTable中移除,然后添加自己的。 -
不相关:JSomething 应该被使用 - 如果您可以通过配置达到相同的效果,请不要子类化。
-
感谢您的回答,效果很好。 @Kleopatra,我明白,但是这个 JTable 需要扩展,这个例子只是一些测试代码,所以你可以看到问题所在。但我要牢记这一点,以备将来之用。
标签: java swing jtable keylistener key-bindings