繁体   English   中英

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

[英]How to check which button in my JFrame was clicked if I have more than one button with the same text?

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

一种。 一个带有 64 个按钮的 JFrame。 按钮存储在一个数组中。

JButton 将有黑色圆圈或白色圆圈。

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

您可能在所有按钮上都添加了一个 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 内部经常使用 Action。 例如,有一个带有剪切/复制/粘贴的编辑菜单和一个带有剪切/复制/粘贴图标、上下文菜单的工具栏。

根据我的理解,您正在尝试检测特定 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");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM