【问题标题】:How do I use a JButton to call a method if clicked如果单击,如何使用 JButton 调用方法
【发布时间】:2021-04-21 08:10:30
【问题描述】:

我做了 getButtons();如果我分别做每个按钮,则创建按钮并减少不必要的行的方法。然后我在 actionPerformed 中使用了 getText();因此,每当我单击这 3 个按钮之一时,它都会给我它的文本(如果我单击按钮 1,它会打印出 1)。我现在打算做的是我想将每个按钮用于单独的事情,例如我想用按钮“1”方法 getMath();而其他 2 个按钮可以做其他事情,比如调用不同的方法。

我不知道该怎么做,所以我在这里寻求帮助。谢谢。

    void getMath() {
        int x = 3;
        int y = 5;
        System.out.println(x + y);
    }

    void getButtons() {
        String[] buttons = { "1", "2", "3" };
        int height = 250;
        int gap = 65;
        for (int i = 0; i < buttons.length; i++) {
            JButton gameButtons = new JButton(buttons[i]);
            gameButtons.setFont(new Font("Times New Roman", Font.BOLD, 19));
            gameButtons.setBorder(BorderFactory.createLineBorder(Color.BLACK));
            gameButtons.setBounds(394, 50 + (height + gap * i), 150, 40);
            gameButtons.setForeground(Color.BLACK);
            gameButtons.setBackground(Color.WHITE);
                        gameButtons.addActionListener(this);
            frame.add(gameButtons);
        }
    }


    public void actionPerformed(ActionEvent e) {
                System.out.println(((JButton) e.getSource()).getText());
                
    }

【问题讨论】:

标签: java


【解决方案1】:

现在,您为所有按钮使用相同的 EventListener。 为了实现每个按钮的不同处理,您必须实现不同的 actionPerformed 事件。

因此,我建议您不要在循环中创建按钮,而是单独创建它们。您知道,您将拥有 3 个按钮,因此无需循环。 使用 lambdas 这应该大致看起来像

gameButton1.addActionListener(e->method1(e));
gameButton2.addActionListener(e->method2(e));
gameButton3.addActionListener(e->method3(e));

有签名

void method1(ActionEvent e)

【讨论】:

  • 我制作这 3 个按钮只是为了测试,所以当我需要制作超过 3 个按钮并且不需要 200 行代码来单独制作每个按钮但使用循环时,我可以工作与此类似,用 50 行来完成。我了解您的建议,但在这里我想实现从循环中单独使用每个按钮。我所知道的是这是可能的,但它有点超出我的编程知识并且让我感到困惑。
  • 好吧,在某些时候您必须区分按钮以确定触发哪个操作。你也可以写一个通用的 actionPerformed 方法并在里面做一个 switch 语句。如果你想拥有 200 个不同的动作,每个动作都有不同的逻辑,那么如果没有 200 个不同的处理程序就很难做到这一点
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-24
  • 2016-09-05
  • 1970-01-01
  • 2016-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多