为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕哥6287543 2022-10-26 17:25:54
我有一个任务,我必须为一个绘画应用程序项目创建一个按钮数组,一切都完成了,但我被困在分配/引用/修改我的动作侦听器上。它的工作方式(假设)是我有一个循环,它创建、分配一个名称,并向动作侦听器添加一个名为 myShapes 的 JButton 数组。由此,我应该有一个名为 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 状态,因为每个状态代表不同的画笔。我尝试了几种方法,例如尝试创建一个动作列表数组并重命名它们,但这会导致错误或循环中断,这是分配所需的,并以最后一次尝试结束。不幸的是,这目前超出了我的范围。如果在这上面呆了 2 天,我就很难过。
查看完整描述

1 回答

?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

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

        }


    }


}


查看完整回答
反对 回复 2022-10-26
  • 1 回答
  • 0 关注
  • 130 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号