Есть ли способ установить значение массива с помощью графических кнопок в Java? - PullRequest
2 голосов
/ 20 мая 2019

Я пытаюсь установить значение для массива, в соответствии с которым нажимаются кнопки (массив [4])

Я пробовал цикл с for и использовать ActionListener, но он просто возвращает 4 раза первое значение, и я хочу установить для него 4 разных значения

package stackOverflow;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class mainStack extends JFrame implements ActionListener {

    JButton jbr,jbv,jbb,jbo,jbn,jbj; 
    JTextField l11b;
    String a;
        mainStack(){

            this.setLayout(null);
            jbr = new JButton("Rouge");
            jbr.setBounds(0,80,85,30);
            add(jbr);

            jbv = new JButton("Vert");
            jbv.setBounds(125, 80, 85, 30);
            add(jbv);

            jbb = new JButton("Bleu");
            jbb.setBounds(0, 120, 85, 30);
            add(jbb);

            jbj = new JButton("Jaune");
            jbj.setBounds(125, 120, 85, 30);
            add(jbj);

            jbo = new JButton("Orange");
            jbo.setBounds(0, 160, 85,30);
            add(jbo);

            jbn = new JButton("Noir");
            jbn.setBounds(125,160, 85,30);
            add(jbn);

            jbr.addActionListener(this);
            jbv.addActionListener(this);
            jbb.addActionListener(this);
            jbj.addActionListener(this);
            jbo.addActionListener(this);
            jbn.addActionListener(this);

            setLayout(null);
            setSize(800,800);
            setVisible(true);
        }

            public void actionPerformed(ActionEvent e) {

                int i,b = 0;
                int tabAnswer[]= new int [4];
                for(i=0;i<tabAnswer.length;i++) {
                    if(e.getSource().equals(jbr)) {
                        a ="R";
                    }
                    else if(e.getSource().equals(jbv)) {
                        a = "V";
                    }
                    else if(e.getSource().equals(jbj)) {
                        a = "J";
                    }
                    else if(e.getSource().equals(jbb)) {
                        a = "B";
                    }
                    else if(e.getSource().equals(jbo)) {
                        a = "O";
                    }
                    else if(e.getSource().equals(jbn)) {
                        a = "N";
                    }
                    else { }
                    if(a.contentEquals("R")) {
                        b=0;
                    }
                    if(a.contentEquals("V")) {
                        b=1;
                    }
                    if(a.contentEquals("J")) {
                        b=2;
                    }
                    if(a.contentEquals("B")){
                        b=3;
                    }
                    if(a.contentEquals("O")) {
                        b=4;
                    }
                    if(a.contentEquals("N")) {
                        b=5;
                    }
                    tabAnswer[i]=b;

                }
                for(i=0;i<tabAnswer.length;i++) {

                    System.out.println(tabAnswer[i]);
                }

        }

    public static void main(String[] args) {
        mainStack t= new mainStack();

    }
}

Я хочу подождать, пока я нажму кнопку 4 раза, чтобы отобразить значение 4 этого массива, но вместо этого он отображает только один

РЕДАКТИРОВАТЬ: Как вы можете видеть, мой массив принимает только одно значение из шести возможных. Я хотел бы иметь возможность установить его на {0,1,2,3}, например, с помощью кнопок. Я надеюсь, что теперь это лучше.

1 Ответ

0 голосов
/ 21 мая 2019

Вы должны извлечь tabAnswer и index в поля.Каждый раз, когда нажимается кнопка, установите текущий index в вашем массиве и увеличивайте index.Если массив заполнен (index >= tabAnswer.length), выведите массив или сделайте то, что вы хотите с ним сделать.При необходимости сбросьте индекс, чтобы предотвратить IndexOutOfBoundException.

. Вот пример:

private int index = 0;
private int[] tabAnswer = new int[4];

public void actionPerformed(ActionEvent e) {
    if (e.getSource().equals(jbr)) {
        tabAnswer[index] = 0;
    } else if (e.getSource().equals(jbv)) {
        tabAnswer[index] = 1;
    } else if (e.getSource().equals(jbj)) {
        tabAnswer[index] = 2;
    } else if (e.getSource().equals(jbb)) {
        tabAnswer[index] = 3;
    } else if (e.getSource().equals(jbo)) {
        tabAnswer[index] = 4;
    } else if (e.getSource().equals(jbn)) {
        tabAnswer[index] = 5;
    }
    index++;
    if (index >= tabAnswer.length) {
        System.out.println(Arrays.toString(tabAnswer));
        index = 0;
    }
}
...