Вопрос

Я искал ответ на предыдущий вопрос , и у меня была гениальная идея, чтобы преодолеть ограничение на JTable. Мне нужно, чтобы редактор различался построчно, тогда как MouseListener может обрабатывать только один редактор для каждого столбца.

Итак, моя идея - использовать setCellEditor() для проверки строки и столбца на <=> и каждый раз устанавливать новый редактор.

Но повторный вызов <=> не имеет никакого эффекта. Редактор остается первым, который был установлен. Итак, как я могу сделать & Quot; setCellEditor & Quot; работать во второй раз для того же столбца?

Вот код в <=>.

public void mouseClicked(MouseEvent e) {
    int cols = resultTable.columnAtPoint(new Point(e.getX(), e.getY()));
    int rows = resultTable.rowAtPoint(new Point(e.getX(), e.getY()));
    StorageObject item = (StorageObject) resultTable.getModel().getValueAt(rows, cols);
    TableColumn col = resultTable.getColumnModel().getColumn(cols);
    col.setCellEditor(new MyComboBoxEditor(item.list));
}
Это было полезно?

Решение

Я не уверен, почему ваш код не работает (прошло много времени с тех пор, как я сделал Swing), но почему бы вам просто не переопределить

public TableCellEditor getCellEditor(int row, int column)

На вашем JTable? Сохраняйте карту полей со списком, которые вы хотите использовать для каждой строки, и в своем переопределенном методе возвращайте правильный.

Другие советы

Моя теория заключается в том, что когда все прослушиватели мыши, зарегистрированные в Table / TableCell, вызываются, те, которые установлены по умолчанию для классов API, будут вызываться первыми, перед вашим прослушивателем мыши. Это означает, что событие, вызывающее выборку редактора, произойдет до того, как вы установите другое. Вроде как состояние гонки, только оно на самом деле определено где-то в исходном коде API ... Это моя наивная теория, и я уже вижу некоторые дыры в ней, и так к моему решению:

Переопределить JTable.getCellEditor (int row, int col) . Это позволяет вам вернуть любой редактор для любой ячейки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top