Domanda

Stavo cercando una risposta per una domanda precedente e avevo un'idea geniale da superare un limite su JTable . Ho bisogno che l'editor sia diverso riga per riga, mentre JTable può gestire un solo editor per ogni colonna.

Quindi la mia idea è di usare un MouseListener per controllare la riga e la colonna sul JTable e impostare ogni volta un nuovo editor.

Ma chiamare setCellEditor () una seconda volta non ha alcun effetto. L'editor rimane il primo ad essere impostato. Quindi, come posso fare " setCellEditor " lavorare una seconda volta per la stessa colonna?

Ecco il codice in 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));
}
È stato utile?

Soluzione

Non sono sicuro del motivo per cui il tuo codice non funziona (è da un po 'che non eseguo Swing), ma perché non esegui l'override

public TableCellEditor getCellEditor(int row, int column)

Sul tuo JTable? Mantieni una mappa delle caselle combinate che desideri utilizzare per ogni riga e nel tuo metodo di sostituzione restituisci quella corretta.

Altri suggerimenti

La mia teoria è che quando tutti i listener del mouse registrati in Table / TableCell vengono richiamati, quelli installati nelle classi API per impostazione predefinita verranno richiamati prima, prima del listener del mouse. Ciò significa che l'evento che causa il recupero dell'editor si verificherà prima di impostarlo su un altro. Un po 'come una condizione di gara, solo che in realtà è definita da qualche parte nel codice sorgente dell'API ... Questa è la mia teoria ingenua e posso già vedere alcuni buchi in essa, quindi sulla mia soluzione:

Override JTable.getCellEditor (int row, int col) . Ciò ti consente di restituire qualsiasi editor desideri per qualsiasi cella.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top