繁体   English   中英

在JTable中侦听KeyEvent - 如何在编辑单元格时执行此操作?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM