如果我有多个具有相同文本的按钮,如何检查我的 JFrame 中的哪个按钮被单击?

Posted

技术标签:

【中文标题】如果我有多个具有相同文本的按钮,如何检查我的 JFrame 中的哪个按钮被单击?【英文标题】:How to check which button in my JFrame was clicked if I have more than one button with the same text? 【发布时间】:2021-02-21 06:57:17 【问题描述】:

我正在用java设计黑白棋游戏,结构如下:

一个。一个包含 64 个按钮的 JFrame。按钮存储在一个数组中。

b. JButton 会有黑色圆圈或白色圆圈。

因此,每当要进行移动时,程序都会突出显示可以进行移动的那些框,但是当所有框都突出显示时,我怎么知道单击了哪个按钮(我想知道该按钮的索引)一样吗?

【问题讨论】:

尝试获取点击按钮的名称***.com/questions/7867834/…` 欢迎使用 ***。尝试为与其位置相关的所有按钮添加一个 ID 属性,最好使用一种将 Id 计算反向到位置的方法。 JButtons 有一个动作命令,您可以使用它来区分您的 JButtons。 非常感谢您提供的所有解决方案! 提示:回复时添加@GilbertLeBlanc(或任何人,@ 很重要)。我在此处标记了 Gilbert,因为他是唯一一个正确说明最常用(和简单)方法来获取发出事件的确切组件或菜单项的人。更具体地说,actionPerformed 的方法被传递给ActionEvent,它继承了EventObjectgetSource() 方法。 【参考方案1】:

您可能已将一个 ActionListener 添加到所有按钮。然后传递给 performAction 的 ActionEvent getSource 有信息。这很难看,就像测试按钮文本一样。

比较正常的是使用Action(看看),设置不同的动作承载64个状态。

public BoardAction extends AbstractAction 
    public BoardAction(int x, int y)  ... 

    @Override
    public void actionPerformed(ActionEvent e) 
        ...
    


JButton button = new JButton(new BoardAction(x, y));

在Action中还可以指定按钮标题,Action也可以在JMenuItem等中(重)使用。

由于需要额外的间接性,大多数示例使用 ActionListener, 但是swing interna经常使用Action。例如,有一个带有剪切/复制/粘贴的编辑菜单和一个带有剪切/复制/粘贴图标、上下文菜单的工具栏。

【讨论】:

非常感谢!我会调查的。【参考方案2】:

据我了解,您正在尝试检测何时按下特定的 JButton。 最简单的方法是实现一个 ActionListener。

public class ExampleClass implements ActionListener 
    @Override
    public void actionPerformed(ActionEvent e) 
        if (e.getSource() == buttonNameOne)
            System.out.println("Button One was pressed");
        else if (e.getSource() == buttonNameTwo)
            System.out.pringln("Button Two was pressed);
    

检测动作

只要按下任何按钮,actionPerformed(ActionEvent e) 方法就会激活。

记录动作来源

当它被按下时,它会自动检测这个动作的来源(按钮)并将其存储在参数“e”中。

使用记录的行动来源

只需执行 e.getSource(),您就可以获取调用此方法的组件,并将其与程序中预先存在的组件进行比较。

自定义参数

使用每个 if 语句,您都可以自定义和个性化条件的结果(即按下的按钮是否等于特定按钮)。通过在每个条件语句的主体中添加参数来做到这一点:

if (e.getSource == sayHiButton)
   System.out.println("Hi");

【讨论】:

以上是关于如果我有多个具有相同文本的按钮,如何检查我的 JFrame 中的哪个按钮被单击?的主要内容,如果未能解决你的问题,请参考以下文章

Jquery:如何从具有相同类名的多个 iframe 加载特定 iframe

如果有多个具有相同类名且没有资源 ID 的元素,如何检查元素

具有相同ID的jQuery多个按钮[重复]

在具有相同类 onclick 的多个 div 中更改文本 [关闭]

如何使用 jQuery 设置(“检查”)具有相同类的所有单选按钮

awakeFromNib 返回 Null UILabel 值