PDA

View Full Version : [Java] Gestire più JComboBox insieme


Reflex86
28-02-2009, 10:23
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



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;
}
}
}

Reflex86
28-02-2009, 18:14
up

PGI-Bis
01-03-2009, 17:07
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?