我创建了一个带有 10x10 网格的 Jframe/按钮。每个 jbutton 都是网格的一部分。我正在尝试如何影响通过 JFrame/button 按下的每个按钮,因为我想最终将其制作成战舰游戏。
frame.setLayout(new GridLayout(width,length));
grid=new JButton[width][length];
for(int y=0; y<length; y++){
for(int x=0; x<width; x++){
grid[x][y]=new JButton("("+x+","+y+")");
frame.add(grid[x][y]);
}
}
例如,我正在尝试一段基本代码,看看是否可以通过单击将 Jframe 的颜色更改为红色,但它似乎不起作用。
public void actionPerformed(ActionEvent e){
if( e.getSource() instanceof JButton) {
((JButton)e.getSource()).setBackground(Color.red);
}
}
有人有什么想法吗?
最佳答案
假设我们有一个按钮:JButton 按钮
。要在按下按钮时调用操作,必须向其中添加操作监听器。有两种方法可以做到这一点(据我所知):
<强> ActionListener
我认为这种方法比第二种方法更常用。编写 IMO 也更容易、更快:
JButton button = new JButton("Click me");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("button was clicked!");
}
}
<强> Action
另一种 Action 监听器。功能和用途有些不同。但是,要实现与 ActionListener
行为类似的按钮,请执行以下操作:
Action buttonAction = new AbstractAction("Click me") {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("button was clicked!");
}
}
JButton button = new JButton(action);
请注意,在这两个示例中我都使用匿名内部类。在大多数情况下,使用命名内部类甚至外部类更为可取。
在 ActionListener
和 Action
之间进行选择取决于具体情况(一如既往......叹息),恐怕我无法透露太多信息在这个问题上。谷歌是你的 friend 。快速搜索提供了来自 SO 的这篇文章: link
关于java - JButton 操作已执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27255807/