当前在第一次点击时选择了JTable单元格,在第二次单击时,它被编辑。
是否可以在第一次点击时直接编辑它?
答案 0 :(得分:22)
在DefaultCellEditor api中有一个名为setClickCountToStart
的方法 DefaultCellEditor singleclick = new DefaultCellEditor(new JTextField());
singleclick.setClickCountToStart(1);
//set the editor as default on every column
for (int i = 0; i < table.getColumnCount(); i++) {
table.setDefaultEditor(table.getColumnClass(i), singleclick);
}
答案 1 :(得分:5)
有关扩展DefaultCellEditor的已发布答案确实有效,我已经使用过它,除了将应用程序的外观和感觉更改为Nimbus之外,较厚的默认JTextField边界会侵入表格单元格,使文本无法读取。
原因是默认表格单元格编辑器是JTable $ GenericEditor而不是DefaultCellEditor(它是直接子类),而前者在getTableCellEditorComponent()
中有以下关键行:
((JComponent)getComponent()).setBorder(new LineBorder(Color.black));
JTable $ GenericEditor是包私有所以不能被子类化,但是JTable提供了getDefaultEditor()
方法,所以我所做的就是:
((DefaultCellEditor) myJTable.getDefaultEditor(Object.class)).setClickCountToStart(1);
或者如果您想要满足表中所有可能的columnClasses(例如,如果您的某个列是数字):
for (int i = 0; i < myJTable.getColumnModel().getColumnCount(); i++) {
final DefaultCellEditor defaultEditor = (DefaultCellEditor) myJTable.getDefaultEditor(myJTable.getColumnClass(i));
defaultEditor.setClickCountToStart(1);
}
答案 2 :(得分:4)
在单元格编辑器上使用setClickCountToStart(1)
。