Один щелчок, чтобы отредактировать JTable Cell

в настоящее время ячейка JTable выбирается при первом щелчке, а во втором - редактируется.

Можно ли непосредственно отредактировать его при первом нажатии?

Ответы

Ответ 1

В 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);
    } 

Ответ 2

Опубликованный ответ о расширении DefaultCellEditor работает, и я использовал его, за исключением того, что при изменении нашего приложения Look & Feel to 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);
}

Ответ 3

Используйте setClickCountToStart(1) в редакторе ячейки.