Archief - [PROG][Java] variable in ItemListener

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Blood_Raven

Legacy Member
Stom vraagje eigenlijk, er zal waarschijnlijk een zeer kort antwoord voor zijn maar ik weet niet hoe ik het antwoord op mijn vraag specifiek zou zoeken.

Ik zoek een manier om een variable van een for lus door te geven in de Listener zodat ik niet volgende code krijg:

actief[0]: JCheckBox
select[0]: JComboBox

Code:
actief[0].addItemListener(new ItemListener() {
	public void itemStateChanged(ItemEvent e) {
		if(e.getStateChange() == ItemEvent.SELECTED) {
                    select[0].setVisible(true);
                }
                else {
                    select[0].setVisible(false);
                }
            }
        });
}

De bedoeling zou zijn om met een for lus over 10 elementen te gaan en dan in de Listener van actief[index] de code toe te voegen die betrekking heeft op select[index].
Probleem is dat index niet zomaar totin de Listener kan.

Is er enige alternatief of een work-around?

MilM

Legacy Member
Uw klasse implements ItemListener doe ge in de plaats

En public void itemStateChanged(ItemEvent e) is dan een gewone methode binnen uw klasse.

ge doe dan
Code:
for(int i=0; i<actief.size();i++)
  actief[i].addItemListener(this);

En daarna doe ge in uw methode van de listener

Code:
public void itemStateChanged(ItemEvent e){
  for(int i=0; i<actief.size();i++)
      if(e.getSource() == actief[i]
              if(e.getStateChange() == ItemEvent.SELECTED) { //of actief[i].isSelected()
                    select[i].setVisible(true);
                
                else 
                    select[i].setVisible(false);

edit: die .size() moet length zijn natuurlijk

QplQyer

Legacy Member
Of je maakt van die Listener een private binnenklasse met een constructor die het element dat je gebruikt in de itemStateChanged opslaat in een privaat veld. Dus:

Code:
... Code van in je buitenste klasse ...

private class dingesListener implements ItemStateListener {
          private sometype selected;
          dingesListener (sometype selected) {
                  this.selected = selected;
          }
          public void itemStateChanged (ItemEvent e) {
                   // Hier doe je de stuff met je selected object
          }
}

... verder code voor in je buitenste klasse

Blood_Raven

Legacy Member
QplQyer zei:
Of je maakt van die Listener een private binnenklasse met een constructor die het element dat je gebruikt in de itemStateChanged opslaat in een privaat veld. Dus:
Bedankt, dat ik daar niet aan gedacht had. :niceone:

Nog een klein vraagje, ik kan de syntaxis niet zo goed afleiden van de JavaDoc en ik vind geen echte voorbeelden online, maar hoe kan je een Hashmap via een unmodifiableMap met generics terug geven?

Code:
HashMap<Integer,String> hashmap = new HashMap<Integer,String>();

...code om hashmap te vullen...

return Collections.unmodifiableMap(hashmap );

Die Collections.unmodifiableMap daarvan zou ik de syntaxis moeten weten hoe dat kan :x
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan