Witam

W momencie kiedy kliknę na wybrany przycisk (JButton) wywołuje się funkcja, która powinna przejść po liście przycisków i sprawdzić, czy któryś ma wartość .isSelected(true). W przypadku kiedy jest "true" przycisk powinien zmienić barwę na czerwoną, w przypadku kiedy wartość jest "false" powinien nadać przyciskowi kolor zielony oraz .setSelected(true).

Kiedy każdemu przyciskowi z osobna w ActionListenerze nadaje wartiści .setSelected() oraz dla każdego z osobna sprawdzam wartość dla konkretnego przycisku to działa jak ta lala, jednak przycisków jest 8 więc chciałem to jakoś zautomatyzować, żeby nie robić drabiny ifów, bo to się mija z celem.

Ta funkcja ma za zadanie przejść po całej liście i sprawdzić, czy któryś z przycisków ma .isSelected(true) bądź false i dla każdego przypadku odpowiednio ustawić zmienną int spr.


public int IsInUse() {
		for (int i = 0; i < list.size(); i++) {
			if (list.get(i).isSelected() == true) {
				spr = 1;

			} else if (list.get(i).isSelected() == false) {
				spr = 0;
			}

		}
		return spr;
	}

Zmienna spr znajduje się tutaj:


class Buttons {
	JButton jeden = new JButton("1");
	JButton jeden_jeden = new JButton("1_2");
	JButton dwa = new JButton("2");
	JButton dwa_dwa = new JButton("2_2");
	JButton trzy = new JButton("3");
	JButton trzy_trzy = new JButton("3_2");
	JButton cztery = new JButton("4");
	JButton cztery_cztery = new JButton("4_2");
	ArrayList<JButton> list = new ArrayList();
	int spr;
	int pointer;
	String element;

Chwilowo testuję na przyciskach "jeden" i "jeden_jeden". Kiedy wcisnę "1" powinna zostać wywołana funkcja "isInUse()" i sprawdzić, czy jakiś przycisk został już użyty. Ponieważ jest to pierwszy wcisnięty button jego wartość "jeden.setSeleted()" powinna wskoczyć na "true" a kolor zmienić się na "green".

Następnie po wciśnięciu "jeden_jeden" ponownie wywołuję funkcję "isInUse()". Ponieważ wcześniej został użyty przycisk "jeden" przycisk "jeden_jeden" powinien uzyskać kolor czerwony ponieważ inny przycisk otrzymał .setSeleted(true). Jednak tak się nie dzieje i ustawia go na zielono, czyli tak jak gdyby nie widział, że jakiś przycisk był wcześniej w użyciu.


ActionListener act = (event) -> {

		if (event.getSource() == jeden){
			IsInUse();
			if (spr==0) {
				jeden.setBackground(Color.GREEN);
				jeden.setSelected(true);

			} else if (spr==1){
				jeden.setBackground(Color.RED);

			}

		}

		if (event.getSource() == jeden_jeden){
			IsInUse();
			if (spr==0){
				jeden_jeden.setBackground(Color.GREEN);
				jeden_jeden.setSelected(true);
			} else if (spr==1){
				jeden_jeden.setBackground(Color.RED);
			}
		}

Proszę o pomoc co jest nie tak z tym kodem, że nie reaguje na sytuację, kiedy już jakiś przycisk jest wybrany?

Ciekawym jest, że w momencie kiedy mój ActionListener wyglądał następująco:


for (int i = 0; i < list.size(); i++) {
			if (event.getSource() == list.get(i)) {
				IsInUse();
				if (spr == 0) {
					list.get(i).setBackground(Color.GREEN);
					list.get(i).setSelected(true);
				} else if (spr == 1) {
					list.get(i).setBackground(Color.RED);

				}


			}


	}

Wtedy każdy przycisk zaznaczało na zielono, aż do momentu kiedy został wciśnięty ostatni (ósmy) przycisk, wtedy każdy kolejny ponownie wciśnięty zaznaczało na czerwono.

EDIT: Problemu co prawda nie rozwiązałem, ale wiem już co go powoduje. Nieprawidłowo użyłem pętli w funkcji isInUse(). Przez co, przechodzi przez całą listę niezależnie od wyniku ifa i nadpisuje mi "spr" zmieniając je ciągle na zero w ciągu kolejnych iteracji.