如何关注表中的JTextField

时间:2008-12-19 09:24:08

标签: java swing jtable jtextfield

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

到目前为止一直很好,但是我无法获得焦点,光标在其中,因此您可以立即开始输入。

我正在使用自定义的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();

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

3 个答案:

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