我有一个包含表格的对话框。要求是在显示对话框时将单元格显示为可编辑模式。以下是代码
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);
问题是即使单元格处于编辑模式,光标也不会出现在文本字段中,直到用户单击。但是可以输入文字。
此代码中有任何遗漏或错误的内容吗?
答案 0 :(得分:2)
调用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
,但那就是我