在JTable中使用“Tab”键设置TextArea焦点

5

我可以使用鼠标单击来设置 JTable 中单个单元格的焦点,但是使用 Tab 切换单元格时,下一个选中的单元格只是被突出显示,没有焦点。

有没有办法使用 "Tab" 键来设置单元格的焦点?


如果你开始输入一些文本,你仍然可以编辑它。 - dacwe
是的,但希望激活鼠标指针。 - Akash
3个回答

4

重写JTable的changeSelection()方法:

JTable table = new JTable(...)
{
    //  Place cell in edit mode when it 'gains focus'

    public void changeSelection(
        int row, int column, boolean toggle, boolean extend)
    {
        super.changeSelection(row, column, toggle, extend);

        if (editCellAt(row, column))
        {
            Component editor = getEditorComponent();
            editor.requestFocusInWindow();
//          ((JTextComponent)editor).selectAll();
        }
    }

};

3

对我来说,方法2出现了一个问题,即在鼠标选择后按Tab键会将焦点移到第一列而不是下一列。我通过在if语句后调用super.changeSelection来修复它。

public void changeSelection(final int row, final int column, boolean toggle, boolean extend)  
{
    if (editCellAt(row, column)) 
    {
        getEditorComponent().requestFocusInWindow();
    }
    super.changeSelection(row, column, toggle, extend);
}    

2

在选择单元格后,您需要编辑该单元格并请求焦点。同时注意,您需要为列和行事件添加选择监听器。


示例

public static void main(String[] args) throws Exception {

    final JTable t = new JTable(4, 4);
    t.setCellSelectionEnabled(true);

    ListSelectionListener l = new ListSelectionListener() {
        @Override
        public void valueChanged(ListSelectionEvent e) {
            if (t.editCellAt(t.getSelectedRow(), t.getSelectedColumn()))
                t.getEditorComponent().requestFocus();
        }
    };
    t.getSelectionModel().addListSelectionListener(l);
    t.getColumnModel().getSelectionModel().addListSelectionListener(l);

    JFrame frame = new JFrame("Test");
    frame.add(t);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(400, 300);
    frame.setVisible(true);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接