Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    347

    Eventi su due JComboBox

    Buon pomeriggio a tutti,
    ho il seguante problema:

    codice:
    comboBox1.addActionListener(new ActionListener() {
    				public void actionPerformed(ActionEvent arg0) {
    System.out.println("c1")
    }
    			});
    
    .
    .
    .
    comboBox2.addActionListener(new ActionListener() {
    				public void actionPerformed(ActionEvent arg0) {
    System.out.println("c2")
    }
    			});
    dovrei che quando cambio selezione della comboBox1 venga stampato anche "c2" cioè dovrei chiamare l'evento di comboBox2 da comboBox1
    Qualche idea?
    thanx
    nh

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Eventi su due JComboBox

    Originariamente inviato da newhook
    dovrei che quando cambio selezione della comboBox1 venga stampato anche "c2" cioè dovrei chiamare l'evento di comboBox2 da comboBox1
    Tecnicamente per far "lanciare" l'evento di selezione di un combo in modo "programmatico" basta leggere l'oggetto selezionato e risettarlo.

    codice:
    combo.setSelectedItem(combo.getSelectedItem());
    Questo è sufficiente per causare il fire del ActionEvent.

    Non è bellissimo, concettualmente. Non so cosa devi fare di preciso (vedo solo delle println() ... ma probabilmente c'è dell'altro nel tuo codice) ma un'altra soluzione (davvero banale) è spostare il lavoro da fare per l'evento di comboBox2 in un metodo a parte in modo che sia invocabile da entrambi gli actionPerformed().
    Ovviamente è tutto da valutare .... non è tanto una questione tecnica ma concettuale, di "design".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    347
    sei stato perfetto...l'ho fatto in entrambi i modi, poi ho lasciato il secondo caso come te hai consigliato.

    ti spiego cosa sto facendo
    combo1 carica dati (da DB senza condizione in query)
    combo2 carica dati (da DB con condizione in query in base alla prima combo)
    tabella carica dati (da DB con condizione in query in base alla prima combo e la seconda)

    cambiando la prima combo devo modificare seconda combo e table
    spero di essere stato chiaro ma te sei stato utilissimo
    Grazie ancora
    nh

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da newhook
    combo1 carica dati (da DB senza condizione in query)
    combo2 carica dati (da DB con condizione in query in base alla prima combo)
    tabella carica dati (da DB con condizione in query in base alla prima combo e la seconda)

    cambiando la prima combo devo modificare seconda combo e table
    Ma allora non c'è bisogno di "simulare" eventi. Si tratta di una gestione in "cascata".
    E comunque non hai precisato come vuoi gestire questa "catena" di aggiornamenti tra i componenti legati tra di loro.

    Se scegli quancosa in combo1, i dati di combo2 dici che devono cambiare. Ok ... ma la "selezione" in combo2 come deve restare o diventare?? Perché in genere una cosa logica è questa: se cambia combo1, in combo2 carico i dati ma seleziono un elemento "vuoto", fittizio (o es. il classico "--seleziona--") iniziale e per la tabella idem la "azzero". Se cambia combo2, aggiorno la tabella in base alle due combo.

    Ma tutto questo diventa "lineare" e semplicemente in cascata. Se cambia combo1, ho un evento per combo1. In questo evento carico i dati per combo2 e gli imposto la selezione "fittizia" vuota. Questo causa a sua volta un evento per combo2 (e non devo "simulare" nulla!). In questo evento se ci sono i dati nelle combo, aggiorno la tabella, altrimenti la "azzero".

    Non so se ti andrebbe bene .... è solo uno dei possibili scenari "logici" ...
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    347
    l'idea inizaile era quella del campo fittizio --seleziona--
    ma poi ho optato per la seguente soluzione (hai ragione niente simulazione eventi):

    l'applicazione come si apre, disegna combo1, combo2 e tabella (jtable).
    poi carico il modello di combo1 e lo setto.
    prelevo il primo elemento di combo1. con questo elemento (che sarà la mia condizione) carico il modello di combo2 e lo setto.
    prelevo il primo elemento di combo2. con questo elemento (che sarà la mia condizione) carico la tabella.

    quando seleziono un altro elemento di combo1, stesso discorso, ricarico combo2 ecc..
    se cambio solo combo2, nturalmente carico solo la tabella.

    tutto ciò era per avere già una situazione di selezione nel default
    ho sistemato in questo modo...
    sempre contento di nuovi suggerimenti
    thanx
    nh

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.