我有一个包含表格的对话框。要求是在显示对话框时以可编辑模式显示单元格。下面是代码
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
不会使窗口突然可见,而是调度窗口在将来的某个时刻变得可见。
您可以使用requestFocusInWindow
和SwingUtilities#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
,但这是我