【发布时间】:2011-11-15 06:30:13
【问题描述】:
目前 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);
}
【讨论】:
for(int i=0; i<table.getColumnModel().getColumnCount();i++){ TableColumn col = table.getColumnModel().getColumn(i); col.setCellEditor (singleclick); } 但这不是美丽的方式
关于扩展 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);
或者如果您想满足表中所有可能的列类(例如,如果您的列之一是数字):
for (int i = 0; i < myJTable.getColumnModel().getColumnCount(); i++) {
final DefaultCellEditor defaultEditor = (DefaultCellEditor) myJTable.getDefaultEditor(myJTable.getColumnClass(i));
defaultEditor.setClickCountToStart(1);
}
【讨论】:
在单元格编辑器上使用setClickCountToStart(1)。
【讨论】: