【问题标题】:Unable to highlight the next editable cell in Jtable on tabbing to next Row在跳到下一行时无法突出显示 Jtable 中的下一个可编辑单元格
【发布时间】:2019-03-18 18:25:16
【问题描述】:

下面是我的自定义逻辑,用于切换到下一个可编辑单元格。从特定列中选择时自动添加行。

什么效果好:

添加新行时,焦点会自动位于下一列的第一行,这样当我开始键入时,它会从下一行的第一列开始输入。

我需要什么:

突出显示焦点单元格,以便用户知道焦点位于下一行的第一列。目前虽然它在单元格中正确键入,但我们不知道它指向那个单元格。

注意:

我已经这样做了table.cellSelectionEnabled(true);,但仍然无法正常工作。

InputMap im = itemTable.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
KeyStroke tab = KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0);
final Action oldTabAction = itemTable.getActionMap().get(im.get(tab));
Action tabAction = new AbstractAction()
{
    public void actionPerformed(ActionEvent e)
    {
        oldTabAction.actionPerformed( e );
        JTable table = (JTable)e.getSource();
        int rowCount = table.getRowCount();
        int columnCount = table.getColumnCount();
        int row = table.getSelectedRow();
        int column = table.getSelectedColumn();
        FLItemRuleInfo itemRuleInfo = itemTableModel.getItemRuleInfoList().get(row);

        while (! itemTableModel.isCellEditable(row, column) )
        {

            if((itemRuleInfo.getItem()==null || itemRuleInfo.getItem().getItemId()==null || itemRuleInfo.getItem().getItemId().isEmpty())){
                column=1;
                break;
            }
            column += 1;
            if (column == columnCount)
            {
                column = 1;
                row +=1;
            }
           /* if (row == rowCount)
            {
                row = 0;
            }*/
            if (row == table.getSelectedRow()
            &&  column == table.getSelectedColumn())
            {
                break;
            }
        }


        table.changeSelection(row, column, false, false);
        if(column==8 && (row == rowCount-1) && itemRuleInfo.getItem()!=null){
            itemTableModel.addRow(new FLItemRuleInfo());

        }                       

    }
};
itemTable.getActionMap().put(im.get(tab), tabAction);

【问题讨论】:

  • 发布您的minimal reproducible example 以证明问题。那就是使用 DefaultTableModel 和 JTable 和您的自定义操作创建一个简单的示例,这样我们就可以看到所描述的行为。我唯一的评论是也许 changeSelection() 应该是代码中的最后一条语句。
  • 当我更正了我的 getValueAt 方法时,这个问题得到了解决。谢谢
  • This problem got resolved when i corrected my getValueAt method - 您发布的代码甚至不包含“getValueAt(...)”方法。这再次表明,当您提出问题时,您需要始终创建一个帖子 minimal reproducible example,因为在问题解决之前您不知道问题出在哪里,因此发布随机代码对我们没有帮助。
  • 当然,谢谢,以后会努力的。这不是故意的,我什至不知道错误是从哪里来的。
  • Sure thanks will try to do it going forward - 但您没有在最新问题中包含minimal reproducible examplestackoverflow.com/questions/55238405/…

标签: java swing jtable


【解决方案1】:

getValueAt 针对特定情况返回 null,我将 null 更改为空字符串“”。这解决了问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-12
    • 2016-10-27
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多