如何在Java中获取按钮的文本?

如何在Java中获取按钮的文本?,java,Java,我想知道MouseListener或JPanel类中是否有一种方法允许我获取单击的按钮的文本。谢谢您应该尝试查看ActionListener并实现它。无论何时单击按钮,都会触发这些操作,这是您应该如何工作的: class Test extends JPanel implements MouseListener { private JButton b1, b2, b3, b4; public Test() { setLayout (new GridLayo

我想知道
MouseListener
JPanel
类中是否有一种方法允许我获取单击的按钮的文本。谢谢

您应该尝试查看ActionListener并实现它。无论何时单击按钮,都会触发这些操作,这是您应该如何工作的:

class Test extends JPanel implements MouseListener
{
    private JButton b1, b2, b3, b4;

    public Test()
    {
        setLayout (new GridLayout (2, 3));

        b1 = new JButton ("Button 1");
        b2 = new JButton ("Button 2");

        add (b1);
        add (b2);
    }

    public void mousePressed (MouseEvent event)
    {
        if (event.getText() == b1.getText())
        {
        }
    }
}
然后编写一个main方法,将
Test
面板的一个新实例添加到
JFrame
中,并查看它是如何工作的

教程可在以下网站上找到: 看看api 有一个方法getSource(),可用于返回事件发生的对象。然后检查该对象是否是按钮的实例。如果是,您可以将其转换为按钮类型,然后从中获取文本

class Test extends JPanel implements ActionListener {
...
   public Test() {
        super();
        ...
        b1 = new JButton("Button 1");
        ...
        add(b1);
        ...
        b1.addActionListener(this);
        ...
    }

    @Override
    public void actionPerformed(ActionEvent event) {
        System.out.println(((JButton) event.getSource()).getText());
        if (event.getSource() == b1) {
            // do sth
        } else if (event.getSource() == b2) {
            // do sth else
        }
    }
}
我就是这样做的。我正在寻找一种方法,将按钮名传递给一个方法,这样我就可以运行一个
if(s==Button1){}或者if(s==Button2){…..
范围,大约有12个按钮

捕获一个按钮名对我来说很困难(我只做了一天左右的Java),所以我想出了这个方法来将标签/文本传递给一个方法

该代码可以放在它自己的方法中,这样在设置按钮后,您就可以进入每个单击事件并粘贴

import java.util.Arrays;

import java.util.List;

private void Button1ActionPerformed(java.awt.event.ActionEvent evt) {

//********************************************************

        String Hunt1 = evt.toString();
        Hunt1 = Hunt1.replaceAll("=", ",");
        Hunt1 = Hunt1.replaceAll("]", ",");
        String [] Hunt2 = Hunt1.split(",");
        List Hunt3 = Arrays.asList(Hunt2);
        String ButtonText = Hunt3.get(2).toString();
        System.out.println(ButtonText); }

//*******************************************************
然后将它从那里传递到if/then按钮列表方法


或者您的项目需要什么,而不必实际进入并硬编码到每个单击事件中。我想,如果您正在执行一个特定的项目,将IDE设置为在创建每个单击事件时自动将该方法调用添加到该事件中,这是可能的,但我还没有那么先进。

这也让我发疯…答案是:没有用于按钮的.getText()方法…您要使用.getLabel()
名称空间不是很有趣吗?

使用
equals
而不是
=
来比较字符串。如何获取字符串有什么问题吗?它说getText()不是java.awt.event.MouseEvent中的方法-在MouseEvent中是否有类似的方法返回这样的文本?我不确定是否需要检查b!=null,因为我想null JButton对象不能触发事件。如果我错了,请纠正我。@Benjamin需要f.e.从模型中获取JButton,或者AbstractButton两者兼而有之+1@Benjaminnull-check专门针对不同组件使用的mousePressed的情况。其他组件可以使用此方法作为鼠标事件的控制器。这将由开发人员决定。如果您愿意,也可以将所有内容保留在原始instanceof if语句中。我只是为simplicit编写了它y、 我不完全同意这种逻辑流程。如果您使用If语句检查
o
是否不是
JButton
的实例,不仅会收紧逻辑,而且会使空检查变得多余,并完全消除
b
变量。绝对没有理由使用
MouseListener
一个
JButton
。你应该编辑你的答案,同时推荐
ActionListener
。这个Q&a有近9000个视图。人们阅读了它。@Ryan Edward Dougherty:)答案,如果它是你要找的答案的话。
import java.util.Arrays;

import java.util.List;

private void Button1ActionPerformed(java.awt.event.ActionEvent evt) {

//********************************************************

        String Hunt1 = evt.toString();
        Hunt1 = Hunt1.replaceAll("=", ",");
        Hunt1 = Hunt1.replaceAll("]", ",");
        String [] Hunt2 = Hunt1.split(",");
        List Hunt3 = Arrays.asList(Hunt2);
        String ButtonText = Hunt3.get(2).toString();
        System.out.println(ButtonText); }

//*******************************************************
SendButtonLabel(evt.ToString());