Domanda

Ogni volta che faccio un renderer di celle personalizzato per un JList, tutti gli elementi che aggiungere ad essa non sempre rispondere alle azioni. Per esempio, se ho il renderer di celle restituire un JPanel con elementi su di esso, uno dei quali ha un ActionListener, non risponde affatto.

Perché questo?

È stato utile?

Soluzione

La voce si ritorna come un renderer di celle elenco è destinato proprio per questo: il rendering . Registrati ascoltatori con il JList (in genere, si vorrà un ListSelectionListener).

Altri suggerimenti

Il renderer può apparire come una fabbrica per la restituzione di componenti per le cellule, ma in realtà segue il il rendering dei pesi mosca approccio e utilizza il stesso componente per il rendering di tutte le cellule (ogni chiamata a getListCellRendererComponent() dovrebbe riconfigurare stessa istanza componente per una cella specifica e di ritorno in modo tale cella può essere resa).

In questo modo, è possibile avere JList (così come JTable e JTree) visualizzare massiccia quantità di cellule senza dover instanciate componenti per ogni cella. Come effetto collaterale, il componente rendering non può rispondere agli eventi, poiché viene utilizzata soltanto durante il ciclo di rendering, ma non sembra nell'albero dei componenti.

Proprio come Neil Coffey ha detto, è possibile aggiungere i vostri ascoltatori al JList (JTable, JTree), invece, e utilizzare i metodi di supporto (locationToIndex(...), getCellBounds(...)) per inviare quale cella è stata colpita e affrontare quindi con la logica specifica cella.

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