当调用editCellAt时,表单元格编辑器显示编辑光标



我有一个包含表格的对话框。要求是在显示对话框时以可编辑模式显示单元格。下面是代码

class MyDialog extends JDialog
{
    JTable tbl = new JTable(new Object[][]{new String[]{"a", "b"}, new String[]{"1", "2"}},  new String[]{"col1", "col2"});    
    public MyDialog(Frame frame)
    {
        add(tbl);
        setSize(300, 300);
        tbl.setCellEditor(new DefaultCellEditor(new JTextField()));
    }
    @Override
    public void setVisible(boolean b)
    {
        super.setVisible(b);
        if(b)
        {
            tbl.editCellAt(tbl.getRowCount() - 1, tbl.getColumnCount() - 1);
        }
    }
}

下面是显示

的方法
MyDialog d = new MyDialog(parent);
d.setLocationRelativeTo(btn);
d.setVisible(true);

问题是,即使单元格处于编辑模式,光标也不会出现在文本字段中,直到用户单击。但是文本可以输入

这段代码有什么缺失或错误吗?

调用setVisible不会使窗口突然可见,而是调度窗口在将来的某个时刻变得可见。

您可以使用requestFocusInWindowSwingUtilities#invokeLater的组合来请求单元格编辑器在将来的某个时候给予焦点,例如…

@Override
public void setVisible(boolean b) {
    super.setVisible(b);
    if (b) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                tbl.editCellAt(tbl.getRowCount() - 1, tbl.getColumnCount() - 1);
                tbl.getEditorComponent().requestFocusInWindow();
            }
        });
    }
}

我也想不覆盖setVisible,而是使用WindowListener,但这是我

最新更新