我正在写一个搜索&在一种电子表格程序中替换函数。我想要的是,如果你搜索一个字符串,程序会显示一个包含已找到元素的表。
到目前为止一直很好,但是我无法获得焦点,光标在其中,因此您可以立即开始输入。
我正在使用自定义的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();
我错过了什么吗?是否有一个很好的描述(漂亮的流程图),显示事件是如何发生的?或者可能做类似的示例代码?
答案 0 :(得分:2)
通过一些谷歌搜索我发现了一个论坛帖子:programmatically start editing a cell in a JTable回答了以下想法:
(在JTable的子类中)
editCellAt(row,column);
requestFocus();
DefaultCellEditor ed = (DefaultCellEditor)
getCellEditor(row,column);
ed.shouldSelectCell(new ListSelectionEvent(this,row,row,true));
它会起作用吗?
答案 1 :(得分:0)
您是否尝试过没有请求焦点的editcellat?
还要确保覆盖/ implemenet以返回true
/**
* Returns true.
* @param anEvent an event object
* @return true
*/
public boolean shouldSelectCell(EventObject anEvent) {
return true;
}
答案 2 :(得分: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);
}