0

我创建了一个有 5 列的表。第 2 列和第 3 列中的所有单元格都是可编辑的。第 2 列有一个默认的 JTextField 编辑器,并且应该只采用 number(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,则该列中的第一个单元格可以再次进行编辑。

我已经在表格中尝试过,但结果不正确: 有没有人知道如何实现这些目标?一个简单的表的例子将不胜感激。提前致谢

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);
4

0 回答 0