单击以编辑JTable单元格

Aka*_*ash 15 java swing jtable

目前,JTable单元格在第一次单击时被选中,而在第二个单元格上则被编辑.

是否可以在第一次点击时直接编辑它?

Nei*_*fen 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);
    } 
Run Code Online (Sandbox Code Playgroud)


Mat*_*ise 6

关于扩展DefaultCellEditor的发布答案确实有效,并且我已使用它,除了将应用程序的Look&Feel更改为Nimbus之外,较粗的默认JTextField边框会侵入表格单元格,从而使文本难以读取。

原因是默认表单元格编辑器是JTable $ GenericEditor而不是DefaultCellEditor(它是直接子类),并且前者在以下代码中具有以下关键要求getTableCellEditorComponent()

((JComponent)getComponent()).setBorder(new LineBorder(Color.black));
Run Code Online (Sandbox Code Playgroud)

JTable $ GenericEditor是包私有的,因此不能被子类化,但是JTable提供了一种getDefaultEditor()方法,所以我要做的就是:

((DefaultCellEditor) myJTable.getDefaultEditor(Object.class)).setClickCountToStart(1);
Run Code Online (Sandbox Code Playgroud)

或者,如果您想满足表中所有可能的columnClasses的要求(例如,如果您的一列是一个数字):

for (int i = 0; i < myJTable.getColumnModel().getColumnCount(); i++) {
    final DefaultCellEditor defaultEditor = (DefaultCellEditor) myJTable.getDefaultEditor(myJTable.getColumnClass(i));
    defaultEditor.setClickCountToStart(1);
}
Run Code Online (Sandbox Code Playgroud)


Pet*_*hev 5

在单元格编辑器上使用setClickCountToStart(1)