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.