如果我有多个具有相同文本的按钮,如何检查我的 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
,它继承了EventObject
的getSource()
方法。
【参考方案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 的元素,如何检查元素
在具有相同类 onclick 的多个 div 中更改文本 [关闭]