# Button abfragen ob er geklickt wurde



## itbuilder07 (31. Mrz 2014)

Guten Tag Java Forum,

bin neu hier und hab auch gleich eine Frage.
Erstmal vielen Dank, ich hab die Seite oft für JAVA Problemen genutzt und die haben mir sehr sehr gut
geholfen.

Zu meiner Frage:

Ich habe 3 Buttons 
A B C
Wenn Button A geklickt wurde kann NUR Button B geklickt werden.
Das gleiche Prinzip bei C wie bei A, wenn Button B geklickt wurde kann erst dann Button C geklickt werden.

Das soll einmalig passieren. Heißt wenn der Nutzer alle 3 Buttons geklickt nach Regel, kann er A B C durcheinander klicken.

Mein Problem ist,  wenn man auf Button ZPP klickt soll eine Fehlermeldung ausgegeben werden ("ZPP kann nur geklickt werden wenn ZPA vorher geklickt wurde.
Das gleiche Prinzip auch mit ZPE.


Ich glaube die Lösung ist recht banal, bloß komme ich seit gut 3 h nicht drauf :/


Hier mein Code:


```
zpa.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				GUIcenter g = GUIright.this.owner.center;
				g.zpaHinzufuegen();


				if (e.getSource() == zpa) {
					zpp.addActionListener(new ActionListener() {
						public void actionPerformed(ActionEvent e) {
							GUIcenter g = GUIright.this.owner.center;
							g.zppHinzufuegen();
						}
					});
					if (e.getSource() == zpp) {
						zpe.addActionListener(new ActionListener() {
							public void actionPerformed(ActionEvent e) {
								GUIcenter g = GUIright.this.owner.center;
								g.zpeHinzufuegen();
							}
						});
						else {
							JOptionPane.showMessageDialog(null,"Meldung");
						}
					}
				}
			}

		});
```


----------



## diggaa1984 (31. Mrz 2014)

> A B C
> Wenn Button A geklickt wurde kann NUR Button B geklickt werden.
> Das gleiche Prinzip bei C wie bei A, wenn Button B geklickt wurde kann erst dann Button C geklickt werden.
> 
> Das soll einmalig passieren. Heißt wenn der Nutzer alle 3 Buttons geklickt nach Regel, kann er A B C durcheinander klicken.



zunächst, weil die Reihenfolge nur 1x eingehalten werden muss, eine Art "state" definieren, der angibt ob die Reihenfolge so schonmal geklickt wurde oder nicht. Wenn nicht, muss sie erst geklickt werden, wenn ja, ist egal was man drückt (alles anklickbar).

dann logisch betrachtet:
ALLE Buttons der Oberfläche hinzufügen und wenn nicht anklickbar disablen (button.setEnable(false)).
Jezt für die Buttons:

A.addAction Listener() : wenn state wahr ist, dann B.setEnabled(true), eventuell A.setEnabled(false)
B.addActionListener() : wenn state wahr ist, dann C.setEnabled(true), eventuell B.setEnabled(false)
C.addActionListener() : state auf wahr setzen und wenn disabled die anderen Buttons wieder enablen.


Das ist logisch betrachtet gar net so schlimm wie es sich bei dir liest.


----------



## itbuilder07 (1. Apr 2014)

diggaa1984 hat gesagt.:


> A.addAction Listener() : wenn state wahr ist, dann B.setEnabled(true), eventuell A.setEnabled(false)
> B.addActionListener() : wenn state wahr ist, dann C.setEnabled(true), eventuell B.setEnabled(false)
> C.addActionListener() : state auf wahr setzen und wenn disabled die anderen Buttons wieder enablen.
> 
> ...



Vielen lieben Dank für die Antwort, Digga1984.
Ist es iwie möglich ohne diese art "Schalter" zu arbeiten.

Meine Vorstellung ist die, dass alle Buttons klickbar geschaltet werden und wenn der man auf ZPP oder ZPE klickt, dass dan eine Fehler Meldung kommt.

Ist das realisierbar?

Hier nochmal der überarbeitete Code:


```
zpe.setEnabled(false);
		zpp.setEnabled(false);

		zpa.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				GUIcenter g = GUIright.this.owner.center;
				g.zpaHinzufuegen();
				if(e.getSource() == zpa){
					zpp.setEnabled(true);
				}
			}
		});

		zpp.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				GUIcenter g = GUIright.this.owner.center;
				g.zppHinzufuegen();
				if(e.getSource() == zpp){
					zpe.setEnabled(true);
				}
			}
		});

		zpe.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {

				GUIcenter g = GUIright.this.owner.center;
				g.zpeHinzufuegen();
			}
		});
```


----------



## diggaa1984 (1. Apr 2014)

> Meine Vorstellung ist die, dass alle Buttons klickbar geschaltet werden und wenn der man auf ZPP oder ZPE klickt, dass dan eine Fehler Meldung kommt.
> 
> Ist das realisierbar?


Dann musst du dir rein logisch betrachtet merken, welcher Buttons bisher gedrückt wurde bis du mal C drücken darfst. Wenn C gedrückt ist, dann brauchst du diese Überprüfung nicht mehr.

Sicher lässt sich das realisieren, im einfachsten Ansatz auch mit weiteren Zuständen:
0 = kein Button gedrückt
1 = A gedrückt
2 = B gedrückt (nachdem A gedrückt wurde)
3 = C gedrückt (nachdem B gedrückt wurde) == egal was jetzt gedrückt wird, Überprüfung fällt raus

Diese Zustände checkst du dann im ActionListener.

Vielleicht geht das auch schöner, aber dazu habe ich gerade keine Zeit


----------



## itbuilder07 (1. Apr 2014)

Ich dank dir digga 

Hast mir geholfen.


----------

