обновить setCellEditor для JTable - PullRequest
       6

обновить setCellEditor для JTable

0 голосов
/ 19 января 2009

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

Так что моя идея - использовать MouseListener для проверки строки и столбца на JTable и каждый раз устанавливать новый редактор.

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

Вот код в MouseListener.

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

Ответы [ 2 ]

3 голосов
/ 19 января 2009

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

public TableCellEditor getCellEditor(int row, int column)

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

1 голос
/ 19 января 2009

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

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

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