|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Aug 2003
Città: Roma
Messaggi: 88
|
[Java] Gestire più JComboBox insieme
Ciao a tutti, praticamente la situazione è questa: ci sono 12 unità, ognuna delle quali ha 5 ripetitori. Ogni unità ha un numero id, da 1 a 12. Ogni ripetitore ha un valore da 1 a 16. I ripetitori di ciascuna unità inizialmente hanno tutti i valori da 1 a 16 eccetto il numero id della centralina (es se sto sulla centralina 5, posso selezionare al primo ripetitore da 1 a 16 tranne 5), e nel momento in cui seleziono un valore sul ripetitore, questo deve sparire da tutti gli altri 4. I valori vanno immessi in ordine, dal primo all'ultimo, se il quarto ad esempio è disabilitato lo deve essere anche il quinto.
Ora io ho fatto in questa maniera, però talvolta quando metto un valore scompaiono alcuni gia immessi e non capisco il motivo, però sono sicuro che c'è qualche modo più pratico e semplice per farlo, qualcuno mi può aiutare? Grazie Codice:
class RepeaterListener implements ActionListener{ public void actionPerformed(ActionEvent event) { if (rept_check){ rept_check = false; String prev = ""; String temp = ""; //memorizzo i valori gia selezionati su un array for (int i=0; i<temp_array.length; i++){ temp_array[i] = (String)repeater[i].getSelectedItem(); } //qui inizia il metodo for (int sel=0; sel<repeater.length; sel++){ if (event.getSource().equals(repeater[sel])) //se il nuovo valore selezionato su uno dei 5 rep è gia pres. for (int oth=0; oth<repeater.length; oth++) if (oth!=sel) { prev = (String)repeater[oth].getSelectedItem(); //salvo il valore gia presente negli altri repeater[oth].removeAllItems(); //tolgo tutto e poi ripopolo per rimettere i repeater[oth].addItem("None"); // vecchi numeri eventualmente tolti for (int ripop=0; ripop<REPEATERS; ripop++) if(unit.getId()!=ripop+1) repeater[oth].addItem(""+(ripop+1)); for (int l=0; l<repeater[oth].getItemCount(); l++) { temp = (String) repeater[oth].getItemAt(l); if (temp.equals(prev)) { repeater[oth].setSelectedIndex(l); //rimposto il valore gia presente prima if (!temp.equals("None")) //che togliessi e ripopolassi tutto unit.generalsetup.repeateraddr[oth] = Integer.parseInt(repeater[oth].getItemAt(l).toString()); else unit.generalsetup.repeateraddr[oth] = 0; } if (StringArraySearch(temp_array, temp, oth)) //se nell'array di valori gia messi { //trovo quello selezionato attualmente System.out.println("Removed: "+temp); // li elimino da tutti (eccetto dall'attuale) repeater[oth].removeItemAt(l); } } } } rept_check = true; } } }
__________________
Config: Asus P5QL-E, Core2Duo E8400 3,0GHz, POV GeForce 9800GTX+, HD Seagate Barracuda 500GB, 4GB Kingston DDR800 |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Aug 2003
Città: Roma
Messaggi: 88
|
up
__________________
Config: Asus P5QL-E, Core2Duo E8400 3,0GHz, POV GeForce 9800GTX+, HD Seagate Barracuda 500GB, 4GB Kingston DDR800 |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Onestamente non capisco una virgola di quello che c'è in quel metodo actionPerformed.
E' bizzarro perchè l'idea che hai del fenomeno che vuoi riprodurre è chiara in un modo esemplare. Però l'hai tradotta in un modo "complicato", nel senso che i termini che usi nel codice tutto suggeriscono fuorchè il fatto che si parli di centraline, ripetitori e relazioni tra i valori di questi ultimi. Magari è anche possibile andare a capire dove stia il bug però è uno sforzo immane perchè per ogni istruzione bisogna cercare di capire quale sia il significato degli operandi nel contesto del programma. Hai la possibilità di manipolare drasticamente il design di quel programma?
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:19.