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?

È stato utile?

Soluzione

Ho guardato il codice sorgente del tuo rendering.

  1. 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 il value come articolo selezionato e dovrebbe funzionare.

  2. 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());
    }
    
  3. 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

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