[英]Looking to add functionality to more than one button in the same panel in 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.