Pergunta

Eu estava procurando uma resposta para um anterior pergunta e teve uma idéia genial para superar um limite para JTable. Preciso do editor para ser diferente em uma linha de base de linha, enquanto JTable só pode lidar com um único editor para cada coluna.

Assim, a minha ideia é usar um MouseListener para verificar a linha e coluna na JTable e conjunto novo editor de cada vez.

Mas, chamando setCellEditor() uma segunda vez não tem qualquer efeito. Os restos mortais do editor para ser o primeiro que foi criado. Então, como posso fazer o trabalho "setCellEditor" uma segunda vez para a mesma coluna?

Aqui está o código em 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));
}
Foi útil?

Solução

Eu não tenho certeza por que seu código não está funcionando (ele tem sido um tempo desde que eu fiz Swing), mas por que você não apenas substituir

public TableCellEditor getCellEditor(int row, int column)

Em seu JTable? Manter um mapa das caixas de combinação que você deseja usar para cada linha e em seu retorno método anulado o correto.

Outras dicas

A minha teoria é que, quando todos os ouvintes do rato registados na Tabela / TableCell são invocados, os instalados às classes API por padrão será invocado primeiro, antes de seu ouvinte mouse. Isso significa que o evento que causa o editor de ser obtida irá ocorrer antes de configurá-lo para um diferente. Como uma espécie de condição de corrida, um lugar que só ele é realmente definido no código fonte API ... Essa é a minha teoria ingênua e eu já posso ver alguns buracos nele, assim por diante para a minha solução:

JTable.getCellEditor (int row, col int) . Isso permite que você retornar tudo o editor que você deseja para qualquer célula.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top