3

我正在一种电子表格程序中编写搜索和替换功能。我想要的是,如果您搜索一个字符串,程序会显示一个包含已找到元素的表格。

到目前为止一切顺利,但我无法让元素获得焦点,光标在其中,因此您可以立即开始输入。

我正在使用定制的JTable,也是定制的TableCellEditor. 以下技巧似乎不起作用:(在自定义中TableCellEditor):

SwingUtilities.invokeLater(new Runnable() { 
    public void run() { 
        my_textfield.requestFocus(); 
    } 
}); 

或者:

my_jtable.editCellAt(0, 3);
my_jtable.requestFocus();

或者

my_jtable.getEditorComponent().requestFocusInWindow();

我错过了什么吗?是否有一个很好的描述(漂亮的流程图)来显示事件是如何发生的?或者可能做类似事情的示例代码?

4

3 回答 3

2

通过一些谷歌搜索,我找到了一个论坛主题:以编程方式开始编辑 JTable 中的单元格,并回答了以下想法:

(在 JTable 的子类中)

editCellAt(row,column);

requestFocus();
DefaultCellEditor ed = (DefaultCellEditor)
getCellEditor(row,column);

ed.shouldSelectCell(new ListSelectionEvent(this,row,row,true));

它会起作用吗?

于 2008-12-20T07:46:57.070 回答
0

您是否尝试过没有 requestfocus 的 editcellat ?

还要确保您覆盖/实施以返回 true

    /**
     * Returns true.
     * @param anEvent  an event object
     * @return true
     */
    public boolean shouldSelectCell(EventObject anEvent) { 
    return true; 
    }
于 2008-12-19T10:11:23.633 回答
0

检查您是否在自定义表实例上启用了选择,如下所示:

table.setColumnSelectionAllowed(true);
table.setRowSelectionAllowed(true);

设置好后,通常调用table.editCellAt(row, col);开始编辑。例子 :

JTable myTable = new JTable(rows, cols);
myTable.setColumnSelectionAllowed(true);
myTable.setRowSelectionAllowed(true);

和其他地方..需要编辑的地方,

boolean wasEditStarted = table.editCellAt(row, col);
if (wasEditStarted) {
  table.changeSelection(row, col, false, false);
}
于 2015-05-04T11:31:26.563 回答