Как я могу изменить параметры слушателя действия, подключенного к нескольким JButton? - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть задание, которое мне нужно было создать, и массив кнопок для проекта приложения рисования, и все сделано, но я застрял в назначении / обращении / изменении моего слушателя действия.

Способ, которым он работает (предположительно), заключается в том, что у меня есть цикл, который создает, присваивает имя и добавляет к слушателю действия массив JButtons с именем myShapes.Исходя из этого, я должен иметь список действий с именем listener ();дайте int 1-6 каждому jbutton, устанавливая текущее состояние actionPerformed.

int actionNum = 1;

ActionListener listener = new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        currentAction = actionNum;
    }
};  


//........................................................................

String[] myShapesName = {"brushBut", "lineBut", "ellipseBut", "rectBut", "strokeBut", "fillBut"};
//String[] myLisName = {"brushButL", "lineButL", "ellipseButL", "rectButL", "strokeButL", "fillButL"};

JButton[][] myShapes = new JButton[3][2];
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 2; j++) {
        myShapes[i][j] = new JButton();
        myShapes[i][j].setBounds(0, 0, 50, 50);//(100, 200);
        myShapes[i][j].setName(myShapesName[i+j]);
        myShapes[i][j].setBackground(null);
        myShapes[i][j].putClientProperty("id",

        String.valueOf(myShapesName[i+j]).concat(String.valueOf(j)));
        MyShapesBox.add(myShapes[i][j]);
        System.out.println(listener);
    }
}

проблема в том, что я не знаю, как изменить actionlistener так, чтобы он давал всем 6 J-кнопкам разное состояние actionPerformed, потому что каждое состояние представляет свою кисть.Я попробовал несколько способов, таких как попытка создать массив списка действий и переименование их, но это дает ошибку или разрывы цикла, которые необходимы для назначения, и закончилась этой последней попыткой.к сожалению, это в настоящее время за мной.Если был на этом в течение 2 дней, и я в тупике.

1 Ответ

1 голос
/ 30 апреля 2019

Моей первой мыслью было бы создать класс действия, который бы принимал значение int как часть своего конструктора, для простоты, я бы сделал его внутренним классом, но вы могли бы использовать внешний класс, но вы нужно передать больше деталей, например ...

public class TestPane extends JPanel {

    private int currenAction;

    public TestPane() {
        String[] myShapesName = {"brushBut", "lineBut", "ellipseBut", "rectBut", "strokeBut", "fillBut"};
        //String[] myLisName = {"brushButL", "lineButL", "ellipseButL", "rectButL", "strokeButL", "fillButL"};

        setLayout(new GridLayout(3, 2));
        JButton[][] myShapes = new JButton[3][2];
        int action = 0;
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 2; j++) {
                myShapes[i][j] = new JButton();
                myShapes[i][j].setBounds(0, 0, 50, 50);//(100, 200);
                myShapes[i][j].setName(myShapesName[i + j]);
                myShapes[i][j].setBackground(null);
                myShapes[i][j].putClientProperty("id",
                        String.valueOf(myShapesName[i + j]).concat(String.valueOf(j)));

                myShapes[i][j].addActionListener(new ButtonAction(action));
                action++;
                add(myShapes[i][j]);
            }
        }
    }

    public class ButtonAction implements ActionListener {

        private int actionNum;

        public ButtonAction(int actionNum) {
            this.actionNum = actionNum;
        }

        @Override
        public void actionPerformed(ActionEvent arg0) {
            currenAction = actionNum;
            System.out.println(actionNum);
        }

    }

}
...