# Parameter von GUI an Klasse übergeben.



## chaosbringer (11. Jul 2008)

Hallo,
ich habe eine GUI mit sehr vielen CheckBoxen gebaut.
Die Zustände der Buttons sollen alle an eine weitere Klasse übergeben werden.
Gibt es das eine elegantere Methode, als für jede CheckBox eine Methode der weiteren Klasse zur Übergabe des CheckBox-Statuses als Parameter zu erstellen und diese bei entsprechendem Event aufzurufen?

Beispiel aus dem Kopf:

```
WeitereKlasse mp = new WeitereKlasse();
CheckBox a = new CheckBox("a");
CheckBox b = ne wCheckBox("b");
CheckBox c = new CheckBox("c");
CheckBox d = ne wCheckBox("d");
....

....
public void itemStateChanged(ItemEvent e) {
	if( e.getSource() instanceof JCheckBox ) {
		boolean selected = e.getStateChange() == ItemEvent.SELECTED;
		String s = ((JCheckBox)e.getSource()).getText();
		if( s.equals("a" ))
			mp.setA( selected );
		if( s.equals("b" ))
			mp.setB( selected );
		if( s.equals("c" ))
			mp.setC( selected );
		if( s.equals("d" ))
			mp.setD( selected );
	
	}
}
```
Ich hoffe, es ist klar, was mich stört. Ich finde es halt blöd, für jede zu übergeben Parameter getter und setter zu definieren. Gibt es da keine elegantere Lösung?


----------



## Beni (11. Jul 2008)

Ja: anstelle von "setA( boolean selected )" eine Methode "set( String name, boolean selected )". Wenn du intern noch ein bisschen mit java.util.Map rumspielst, kannst du unter Umständen darauf verzichten jemals irgendwo all die Parameter zu unterscheiden.


----------



## wayne0101 (11. Jul 2008)

nimm ein int-variable anstatt der ganzen true und false werte. definiere zunächst static final int konstanten in einer für alle relevanten klassen zugänglichen klasse (C) in der art:


```
public abstract class C {
    public static final int MASK_A = 1;
    public static final int MASK_B = 2;
    public static final int MASK_C = 4;
    public static final int MASK_D = 8;
}
```

wenn du die werte nun an eine andere klasse übergeben möchtest, also sie von der gui-klasse abfragen willst, mach einfach folgendes:


```
public int getSelection(){
    int result = 0;
    if( a.isSelected() ) result |= C.MASK_A;
    if( b.isSelected() ) result |= C.MASK_B;
    if( c.isSelected() ) result |= C.MASK_C;
    if( d.isSelected() ) result |= C.MASK_D;
    return result;
}
```

zum auslesen brauchst du dann nur noch vergleichen:

```
if( (result & C.MASK_A) > 0 ){
    // checkbox a war selektiert
}
```

wayne


----------

