Установите ячейку Jtable редактируемой ТОЛЬКО после выбора - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть JTable, и я добавил к нему DefaultTabelModel. Я создал всплывающее меню, которое появляется, когда пользователи щелкают правой кнопкой мыши ячейку в таблице. Одним из пунктов в меню является «Переименовать». Как сделать выбранную ячейку доступной для редактирования при нажатии на элемент «Переименовать»? Я настроил все элементы, и единственная недостающая часть здесь - сделать выбранную ячейку редактируемой.

Метод isCellEditable(row, col) в DefaultTableModel здесь не помогает, поскольку он устанавливает возможность редактирования ячейки на основе ее положения (то есть строки и столбца) в таблице, а не состояния выбора ячейки.

Я подозреваю, что мне понадобится TableCellEditor, но я не уверен, как его использовать. Я был бы очень признателен за пример кода о том, как это сделать и / или объяснения того, как использовать TableCellEditor для этой цели. Заранее спасибо !!

Соответствующие части моего кода:

class DataListTable extends JTable
    mouseReleased(): 
        int row = this.getSelectedRow();
        popupmenu.show(this, event.getX(), event.getY());

class RenameDataMenuItem 
    actionPerformed():
    //want to get the (row, col) of the selected cell here and make it editable

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Как сделать выбранную ячейку редактируемой при нажатии на элемент «Переименовать»?

Метод isCellEditable(...) определяет, можно ли редактировать ячейку с помощью редактора таблиц.

Вы все еще можете изменить данные в модели, используя setValueAt(..) метод JTable или TableModel.

Так что вы можете сделать это в пункте меню переименования, который вы можетеотобразить JOptionPane, чтобы запросить новое значение.Затем вы просто вручную сохраняете значение, используя любой из вышеперечисленных методов.

0 голосов
/ 14 сентября 2018

Попробуйте что-нибудь вроде этого:

public class MyTableCellEditor extends AbstractCellEditor implements TableCellEditor {

JComponent component = new JTextField();

@Override
public Object getCellEditorValue() {
    return ((JTextField)component).getText();
}

@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {

    if(isSelected) {
        ((JTextField)component).setText((String)value);
    }
    return component;
}

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...