[英]Listening for KeyEvent in a JTable - how to do it while cell is being edited?
我正在研究一个JFrame,它里面有一个JTable和一些其他元素。 我希望用户能够做的是通过表格(具有设定的行数),然后当焦点位于表格的右下方时,再次点击标签将跳转到另一个组件,在此case一个JTextField。
我使用KeyListener来完成此操作,用户只需在表格中进行选项卡。 我遇到的问题是,如果用户正在编辑单元格,然后按Tab键,TableCellEditor似乎有焦点,我添加到表中的KeyListener不会被调用。 从我在文档中可以看出,CellEditor只能有一个CellEditorListener,它只能有一个ChangeEvent,这对我在这里尝试做的事情不起作用。
有人知道这个的解决方法,还是我没想过的一个技巧?
我使用KeyListener来完成此操作,用户只需在表格中进行选项卡。
不要使用KeyListener。 Swing旨在与Key Bindings一起使用。
有关如何在提供自定义时重用现有选项卡操作的方法,请参阅表选项卡。 由于此方法使用默认选项卡操作,因此它也可以解决您的问题。
尝试这个:
table.setDefaultEditor(Object.class,new TableEditor());
class TableEditor extends DefaultCellEditor{
public TableEditor(){
super(new JTextField());
setClickCountToStart(1);
getComponent().addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e){
if(e.getKeyCode()==KeyEvent.VK_ENTER)
System.out.println("enter");
}
});
}
public Component getTableCellEditorComponent(JTable table,Object value,boolean isSelected,int row,int column){
JTextField com=(JTextField)super.getTableCellEditorComponent(table,value,isSelected,row,WIDTH);
com.setText((String)value);
return com;
}
}
和
table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0),"");
如果需要,删除Enter键的标准反应
要么:
editorComponent.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0),"ent");
editorComponent.getActionMap().put("ent",new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e){
System.out.println("opp");
}
});
在TableEditor构造函数中(而不是“getComponent”工作人员)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.