Java 如何关注表中的JTextField

Java 如何关注表中的JTextField,java,swing,jtable,jtextfield,Java,Swing,Jtable,Jtextfield,我正在一种电子表格程序中编写一个搜索和替换函数。我想要的是,如果搜索字符串,程序将显示一个包含已找到元素的表 到目前为止还不错,但我无法让元素获得焦点,因为光标在其中,所以您可以立即开始键入 我正在使用一个定制的JTable和一个定制的TableCellEditor。以下技巧似乎不起作用: (在自定义的TableCellEditor中): 或: 或 我错过什么了吗?是否有一个好的描述(漂亮的流程图)来说明事件是如何发生的?或者可能执行类似操作的示例代码?您是否尝试了没有requestfocus的

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

到目前为止还不错,但我无法让元素获得焦点,因为光标在其中,所以您可以立即开始键入

我正在使用一个定制的
JTable
和一个定制的
TableCellEditor
。以下技巧似乎不起作用: (在自定义的
TableCellEditor
中):

或:


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

您是否尝试了没有requestfocus的editcellat

还要确保覆盖/implementet以返回true

    /**
     * Returns true.
     * @param anEvent  an event object
     * @return true
     */
    public boolean shouldSelectCell(EventObject anEvent) { 
    return true; 
    }

通过谷歌搜索,我发现了一个论坛帖子:用以下想法回答:

(在JTable的子类中)


它可以工作吗?

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

table.setColumnSelectionAllowed(true);
table.setRowSelectionAllowed(true);
设置此选项后,通常会调用
table.editCellAt(行,列)开始编辑。例如:

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

不,这不起作用。我还在上面的函数中添加了一个println,只是为了看看它是否被调用。但它只有在我显式调用时才会被调用:StructureCellEditor sce=(StructureCellEditor)my_table.getCellEditor(0,3);sce.应选择细胞(…);注意,StructureCellEditor上面是我自己的扩展TableCellEditor,我认为最后一行应该是…(this,row,column,true);我不确定我是否尝试了上面写的确切顺序,但我会检查它。我认为(this,row,row,true)是正确的-构造函数是:ListSelectionEvent(对象源,int-firstIndex,int-lastIndex,boolean isAdjusting)-所以行是唯一要选择的索引。现在,我有点放弃了这个。这可能与在其他组件中包含多个组件有关(使用internalFrames,其中包含JTree和表的splitframe)。如果我有时间,我会尝试以一个非常干净的尝试开始,看看它会在哪里打破
editCellAt(row,column);

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

ed.shouldSelectCell(new ListSelectionEvent(this,row,row,true));
table.setColumnSelectionAllowed(true);
table.setRowSelectionAllowed(true);
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);
}