单击以编辑 JTable 单元格
目前,JTable单元格在第一次单击时被选中,在第二次单击时,它被编辑。
是否可以在第一次单击时直接编辑它?
目前,JTable单元格在第一次单击时被选中,在第二次单击时,它被编辑。
是否可以在第一次单击时直接编辑它?
在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);
}
关于扩展DefaultCellEditor的已发布答案确实有效,我已经使用了它,除了将应用程序的Look&Feel更改为Nimbus时,较厚的默认JTextField边框会侵入表格单元格,使文本不可读。
原因是默认的表单元格编辑器是JTable$GenericEditor而不是DefaultCellEditor(它是一个直接的子类),前者在以下关键行中:getTableCellEditorComponent()
((JComponent)getComponent()).setBorder(new LineBorder(Color.black));
JTable$GenericEditor是包私有的,所以不能被子类化,但是JTable提供了一个方法,所以我所做的就是:getDefaultEditor()
((DefaultCellEditor) myJTable.getDefaultEditor(Object.class)).setClickCountToStart(1);
或者,如果您想满足表中所有可能的列类(例如,如果您的其中一列是数字):
for (int i = 0; i < myJTable.getColumnModel().getColumnCount(); i++) {
final DefaultCellEditor defaultEditor = (DefaultCellEditor) myJTable.getDefaultEditor(myJTable.getColumnClass(i));
defaultEditor.setClickCountToStart(1);
}