当前位置: 首页 > 知识库问答 >
问题:

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

漆雕和昶
2023-03-14

我有一个任务,我必须为一个油漆应用程序项目创建和按钮阵列,一切都完成了,但我被困在分配/引用/修改我的动作监听器。

它的工作方式(据推测)是,我有一个循环,可以创建、指定一个名称,并向动作侦听器添加一个名为myShapes的JButton数组。因此,我应该将actionlistener命名为listener();为每个jbutton指定int 1-6,设置当前ActionExecuted状态。

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个JButton提供不同的actionPerformed状态,因为每个状态代表不同的笔刷。我尝试了几种方法,比如制作一个动作列表数组并重命名它们,但这会给循环带来错误或中断,这是分配所需的,并以最后的尝试结束。不幸的是,我现在无法理解这一点。如果你在这上面呆了两天,我就不知所措了。

共有1个答案

卜盛
2023-03-14

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

    }

}
 类似资料:
  • 问题内容: 我有两个分别称为“左”和“右”。“左”按钮将矩形对象向左移动,“右”按钮将其向右移动。我在班上有一个充当单击任一按钮时的侦听器。但是,我希望单击每个动作时都会发生不同的动作。如何区分点击的? 问题答案: 将actionCommand设置到每个按钮。 //将动作命令设置到两个按钮上。 更新:

  • 问题内容: 我怎样才能使它成为特定方法? (我知道可以用一种方法将其全部抛弃,是的。 谢谢你们, 编辑:谢谢大家的快速反应,我的解释不是很清楚。 我调查了lambda的使用,这几乎是我在想的,尽管其他方式也很不错。 再次谢谢大家。 下次我会尝试变得更清晰,更快捷。 问题答案: 同样,您的问题仍然不清楚。您上面的代码 有 一种方法,可以将代码放入其中: 或者,您可以从该方法中调用外部类的方法: 或者

  • 问题内容: 是否有原因导致代码中显示的动作侦听器内部?另外,如果有,我该如何解决此错误? 问题答案: 您可以使用一个不错的简单技巧… 如果未为按钮指定,则使用按钮的。 现在,如果您确实指定了按钮的属性,并且您仍然想知道文本(对我来说似乎很奇怪),则可以使用更多类似…

  • 我正在处理JButton事件。我有一个JPanel类,我们叫Panel1,包含一个公共的JButton,我们叫它Button1。单击此按钮时: 但我有兴趣: 有什么建议吗?

  • 服务器部件: 客户部分:io.js 消息组件 信息形式——发布过程的开始

  • MyAlertDialog在尝试将上下文设置为侦听器时抛出ClassCastException。我正在从片段调用MyAlertDailog。 我正在使用在android开发文档中找到的指南。 https://developer.android.com/guide/topics/ui/dialogs#PassingEvents 我的片段 MyAlertDialog 错误报告