Jccombobox come cellrender non imposta il valore corretto
-
29-10-2019 - |
Domanda
Sto usando un jccombobox come cellrender nella mia jtable.
Tutto funziona bene, JComboBox visualizza l'elemento corretto per la riga corrispondente.
Il problema su cui sto attualmente lavorando è che quando scelgo un nuovo valore in JComboBox (ad esempio riga 9) il valore è impostato correttamente, ma quando provo a modificare il valore nella riga successiva, JComboBox (ad esempio nella riga 10) Imposta automaticamente il valore della riga prima.
Ho creato una classe DropDownCellrender che estende JCombobox e implementa TableCellRender, ho pensato che fosse abbastanza, ma sembra che DropDownCellrender-Object sia lo stesso per ogni riga.
table.getColumnModel().getColumn( 3 ).setCellRenderer( new DropDownCellRenderer() );
table.getColumnModel().getColumn( 3 ).setCellEditor( new DefaultCellEditor( new DropDownCellRenderer() ) );
Come posso evitare che ogni riga usi lo stesso oggetto?
Soluzione
Ho guardato il codice sorgente del tuo rendering.
Non credo che tu debba cercare il prodotto per nome. Il
value
Passato a te è Il prodotto, che proviene dal modello di tabella (se è implementato correttamente). Basta impostare ilvalue
come articolo selezionato e dovrebbe funzionare.Per far sì che il rendering si comporti correttamente, cambia il suo primo piano e i colori di sfondo secondo
isSelected
parametro. Il codice dovrebbe apparire:if (isSelected) { setForeground(table.getSelectionForeground()); super.setBackground(table.getSelectionBackground()); } else { setForeground(table.getForeground()); setBackground(table.getBackground()); }
Rendi la tua serie iniziale di valori un argomento del costruttore. Questo trasformerà il tuo rendering in un rendering universale ComboBox.
Altri suggerimenti
Sembra che tu stia salvando e visualizzando valori all'interno della casella combinata stessa, non dal modello della tabella. Quando si imposta un valore e salvi un valore ComboBox, è necessario aggiornare il modello