Witam
moj program to prosta "gra" pamięciowa. W sumie nic jeszcze w niej nie ma, wyświetla okienko z 8 przyciskami. Zadaniem użutkownika jest wybranie 2 identycznych przycisków czyli w tym przypadku np. "1" oraz "1". Program powinien przy wybraniu pierwszego przycisku nadać mu kolor zielony, oraz zmienić .setEnabled() na wartosć "false". Następnie w przypadku wybrania 2 przycisku z wartością .getText() "1" powinien ustawić obydwóm przyciskom wartość .isVisible() na "false". W przypadku gdy wartość .getText() obydwóch użytych buttonów będzie różna, program powinien oba przyciski pomalować na czerwono.
Mam listę
class Buttons {
Petla petla = new Petla();
JButton jeden = new JButton("1");
JButton jeden_jeden = new JButton("1");
JButton dwa = new JButton("2");
JButton dwa_dwa = new JButton("2");
JButton trzy = new JButton("3");
JButton trzy_trzy = new JButton("3");
JButton cztery = new JButton("4");
JButton cztery_cztery = new JButton("4");
ArrayList<JButton> list = new ArrayList();
int spr;
int pointer;
String element;
public void AList() {
list.add(jeden);
list.add(dwa);
list.add(jeden_jeden);
list.add(dwa_dwa);
list.add(trzy);
list.add(trzy_trzy);
list.add(cztery);
list.add(cztery_cztery);
}
Po wciśnięciu przycisku następuje
ActionListener act = (event) -> {
for (int i = 0; i < list.size(); i++) {
if (event.getSource() == list.get(i)) {
System.out.println(list.get(i).getUIClassID());
IsInUse();
if (spr == 0) {
list.get(i).setSelected(true);
list.get(i).setBackground(Color.GREEN);
list.get(i).setEnabled(false);
// Jeśli jakiś przycisk był wcześniej użyty sprawdza czy kolejny wciśnięty jest powiązany z poprzednikiem i podejmuje akcje
} else if (spr == 1) {
list.get(i).setSelected(true);
petla.sprawdz(list, ElemName());
list.get(i).setBackground(Color.RED);
}
}
}
};
Za sprawdzenie zawaretości .getText() oraz właściwą zmianę .isVisible() odpowiada następująca pętla
public void sprawdz(ArrayList<JButton> lista, String name){
for (int i = 0; i < lista.size(); i++) {
for (int j = 0; j < lista.size(); j++) {
if (lista.get(i).isSelected()==true && lista.get(j).isSelected()==true) {
if (lista.get(i).getText().equals(name)) {
lista.get(i).setVisible(false);
lista.get(j).setVisible(false);
}
}
}
}
}
Jest jeszcze funkcja wypluwająca wartość .getText()
public String ElemName() {
for (int i = 0; i < list.size(); i++) {
if (list.get(i).isSelected() == true) {
element = list.get(i).getText();
}
}
return element;
}
Problem mam z powyższą pętlą. Chodzi o to, że nie potrafię prawidłowo porównać wartości tych przycisków, a nie mam pomysłu jak inaczej mógłbym porównać czy wciśnięto te same przyciski.
Obecnie program zmienia wartość .setVisible() niezależnie od tego czy wartość .getText() jest identyczna czy nie.
Próbowałem kombinacji w pętli
public void sprawdz(ArrayList<JButton> lista, String name){
for (int i = 0; i < lista.size(); i++) {
for (int j = 0; j < lista.size(); j++) {
if (lista.get(i).isSelected()==true && lista.get(j).isSelected()==true) {
if (lista.get(i).getText().equals(lista.get(j).getText())) {
lista.get(i).setVisible(false);
lista.get(j).setVisible(false);
}
}
}
}
}
ale wtedy zdaje się również niezależnie od tego jakie przyciski były wciśnięte czyniło to samo.
Mam wrażenie, że moja pętla sprawdza czy dany .getText() zawiera wartość i wtedy zmienia .setVisible(), a kwestia jaką wartość zaiwiera .getText() i czy te wartości są różne, jest w pętli pomijana i nie potrafię tego przeskoczyć. Proszę o pomoc.