Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich habe einen haufen an buttons mit denen jeweils ein fenster geöffnet werden soll. Desweiteren soll immer geprüft werden ob und welches fenster aktiv ist.
damit zeilen spare und die übersicht behalte wollte ich dafür eine methode schreiben. nur bringst mir nichts wenn die fast so lang ist wie die anweisungen im actionPerformed....
public void actionPerformed(ActionEvent e){
if (e.getActionCommand().equals("gruppeA")){
if (!boolGruppeA){
gfGruppeA.setVis(true);
boolGruppeA = true;
isActive = gfGruppeA;
}
else {
if (isActive!=gfGruppeA){
gfGruppeA.setVis(true);
isActive = gfGruppeA;
}
else{
gfGruppeA.setVis(false);
boolGruppeA = false;
}
}
}
.
.
.
. // Und viele weitere Button mit den selben anweisungen, nur unterschiedlichen variablennamen ;)
.
.
}
Es ist der versuche fenster übereinander liegend öffnen zu können.
Damit habe ich versucht ein im hintergrund (visible) liegendes Fenster nach vorne zu holen, bzw. wenn es vorne ist zu schliessen! funktioniert auch nicht 100%ig wie ich es gerne hätte aber naja.
auf jeden fall möchte ich das alles in eine methode packen um platz zu sparen und die übersicht zu behalten!
Jetzt klarer? (Die Erklärkunst hat mir Gott leider nicht gegeben!)
JLabel[] theButtons = new JLabel[BUTTON_ANZ];
for (int i=0; i < BUTTON_ANZ; i++) {
theButtons[i] = new JLabel("Ich bin Button " + i);
component.add(theButtons[i]);
theButtons[i].addActionListener(...);
}
ArrayList<JButton> buttonList = new ArrayList<JButton>();
for (int i=0; i < buttonList.size(); i++) {
buttonList [i] = new JButton("Ich bin Button " + i);
...
buttonList.get(i).addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
... // ACHTUNG: Hier kein Zugriff auf lokale Variable i möglich!
...// Wenn benötigt, muß der Button durch e.getSource() ermittelt werden.
}
Mörketid hat gesagt.:
Allerdings wäre es vielleicht gut, hier die actions auszuklammern, da es ja doch recht viele werden können. :meld:
Lustig: In diesem Fall bekomme ich auch oft Bauchkribbeln obwohl es unnötig ist
Es sieht so aus, als ob tatsächlich mehrere ActionListener in einer Schleife
erzeugt und angemeldet werden. was aber nicht der Fall ist.
In Wahrheit wird nur ein ActionListener (eine anonyme innere Klasse) erzeugt, die
von allen JLabels benutzt wird. Dies ist auch der Grund, warum es nicht möglich ist,
in Methodenlokal definierten Klassen Bezug auf lokale Variablen der Methode
zu nehmen (In diesem Fall das i), denn genau das würde ja bedeuten, daß
sich die ActionListener irgendwie unterscheiden könnten.
Aber um den Bauch zu schonen, kann man ja schreiben:
Code:
ActionListener al = new ActionListener(...);
...
buttons[i].addActionListener(al);