如何修改附加到几个JButton的动作监听器的参数?

问题描述 投票:0回答:1

我有一个任务,我必须创建和绘制应用程序项目的按钮数组,一切都已完成,但我仍然坚持分配/引用/修改我的动作监听器。

它的工作方式(据说)是我有一个循环创建,分配一个名称,并向动作监听器添加一个名为myShapes的JButtons数组。从这里,我应该有一个名为listener()的actionlistener;给每个jbutton一个int 1-6,设置当前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个Jbuttons提供不同的actionPerformed状态,因为每个状态代表一个不同的画笔。我尝试了几种方法,比如尝试创建一个Action列表数组并重命名它们,但是这会给出一个错误或中断循环,这是分配所需要的,并以此最终尝试结束。不幸的是,这目前超出了我的范围。如果在这2天,我很难过。

java arrays jbutton actionlistener
1个回答
1
投票

我的第一个想法是创建一个动作类,它将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);
        }

    }

}
© www.soinside.com 2019 - 2024. All rights reserved.