如何在编辑java中的列中的最后一个单元格后返回列中的第一个单元格?

时间:2013-09-24 15:03:25

标签: java swing jtable keylistener focuslistener

我创建了一个包含5列的表。第2列和第3列中的所有单元格都是可编辑的。 第2列有一个默认的JTextField编辑器,只能取数字(0,1,2,3,...,9)。 当第一次加载应用程序时,第2列中的第一个单元格会自动被选中,表格将获得如下焦点。

public void initFocus(){
    SwingUtilities.invokeLater(new Runnable() 
    {
        public void run() {
           itemsTable.changeSelection(0,2,false,false);
           itemsTable.requestFocusInWindow();
        }
    });
}

我想要实现的目标如下:

  1. 通过按数字(0到9)将单元格编辑为新值。
  2. 按Enter键,列中的下一个单元格可供编辑。
  3. 如果用户使用列中的最后一个单元格并对其进行编辑并按Enter键,则该列中的第一个单元格可以再次进行编辑。
  4. 我在表格中尝试了此操作,但结果不正常: 有没有人知道如何实现这些目标?一个简单的表的例子将不胜感激。 提前谢谢

    itemsTableModel = new DefaultTableModel(){
                @Override
                public boolean isCellEditable(int row, int column) {
                    return column == 2 || column==3;
                }
            };
    itemsTableModel.setColumnIdentifiers(new Object[]{"Product", "ItemCode","QTY","Date", "ProductId"});
    
    itemsTable = new JTable(itemsTableModel){
           public void changeSelection(int row, int column, boolean toggle, boolean extend)
           {
                    super.changeSelection(row, column, toggle, extend);
                    if(column==2 && row != -1)
                    {
    
                        if (editCellAt(row, column))
                        {
                            Component editor = getEditorComponent();
                            editor.requestFocusInWindow();
                            ((JTextComponent)editor).selectAll();
                        }
    
                        if(isEditing() && row == itemsTable.getRowCount()-1) 
                        {
                            super.changeSelection(0, 2, toggle, extend);
                            Component component = itemsTable.getCellEditor(0,2).getTableCellEditorComponent(itemsTable,getValueAt(row, column),true,row,column);
                            component.requestFocusInWindow();
                            ((WebTextField)component).selectAll();
                        }
                     }
           }
      };
    itemsTable.setDefaultRenderer(Object.class, retrieveItemsTableCellRenderer());
    itemsTable.setCellSelectionEnabled(true);
    

0 个答案:

没有答案