import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class Concentration extends JFrame implements ActionListener {
private JButton buttons[][]=new JButton[4][4];
int i,j,n;
public Concentration() {
super ("Concentration");
JFrame frame=new JFrame();
setSize(1000,1000);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel=new JPanel(new GridLayout(4,4));
panel.setSize(400, 400);
for( i=0; i<buttons.length; i++){
for (j=0; j<buttons[i].length;j++){
n=i*buttons.length+buttons[i].length;
buttons[i][j]=new JButton();
panel.add(buttons[i][j]);
buttons[i][j].addActionListener(this);
}
}
add(panel);
pack();
setVisible(true);
}
public void actionPerformed(ActionEvent e) {
buttons[i][j].setIcon(new ImageIcon(
getClass().getResource("/images/2.jpg")));
}
public static void main(String args[]){
new Concentration();
}
}
这是我的代码。我正在做记忆游戏。我想这样做,每次点击一个按钮,该按钮显示图像,但
buttons[i][j].addActionListener(this);
在那,methot不能拿i和j并且不显示任何图像。
但是例如当我做的时候
buttons[2][2].addActionListener(this);
仅在2x2中显示。图片。我该怎么做才能解决这个问题?
答案 0 :(得分:3)
可能的解决方案:
e.getSource()
答案 1 :(得分:2)
试试这段代码:
public void actionPerformed(ActionEvent e) {
if(e.getSource() instanceof JButton){
JButton pressedButton = (JButton) e.getSource();
if(pressedButton.getIcon() == null){
pressedButton.setIcon(new ImageIcon(getClass().getResource("/images/2.jpg")));
} else {
pressedButton.setIcon(null);
}
}
}
直接表单EventObject javadoc:
public Object getSource()
最初发生事件的对象。
返回: 事件最初发生的对象。
这意味着不需要知道按下按钮的数组索引,因为它可以通过getSource()
方法知道。