我正在尝试在java中创建类似于扫雷的JFrame应用程序,但规则和目标略有不同。点击更改JButton ImageIcon
我创建了一个JButtons,12x12的网格并且有一个JButton 2D数组。
我试图改变一个按钮的图像,当它被点击(使它成为X或金块的图像)。我知道如何做到这一点,如果我有每个按钮的单独名称,但创建144个单独的按钮并命名每个按钮似乎不合逻辑。因此,我需要做的是在该按钮的单击事件上,更改/设置该按钮的图像,但在我的动作侦听器中,只有知道该按钮的特定数组坐标时,我才能算出它。
我的问题是如何更改该特定按钮的图像?或者我如何获得按钮[?] [?]的值,以便我可以更改该按钮的图像?
谢谢!
public class GoldPanel extends JPanel{
ImageIcon xImage = new ImageIcon("x.png");
ImageIcon goldImage = new ImageIcon("");
losingButtonListener loseButton = new losingButtonListener();
winningButtonListener winButton = new winningButtonListener();
JButton[][] button = new JButton[12][12];
//creates the layout
GridLayout layout = new GridLayout(12,12);
Random myRand = new Random();
public GoldPanel(){
//creates panel for name/title/score/etc
JPanel titlePanel = new JPanel();
add(titlePanel);
JLabel title = new JLabel("Welcome to the Goldmine Game!");
titlePanel.add(title);
//creates panel for the game board
JPanel gamePanel = new JPanel();
add(gamePanel);
gamePanel.setLayout(layout);
for(int i=0;i<12;i++)
{
for(int j=0;j<12;j++)
{
button[i][j] = new JButton(" ");
gamePanel.add(button[i][j]);
button[i][j].addActionListener(loseButton);
}
}
button[0][0].addActionListener(winButton);
}//end constuctor
private class losingButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}//actionPerformed
}//buttonListener
private class winningButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
System.out.println("you win");
}//actionPerformed
}//winningButtonListener
}//end GoldPanel class
您也可以使用ActionEvent的actionCommand属性,该属性默认为按钮的文本,或者可以在按钮本身上设置,作为盲转换或不得不使用'instanceof'的替代方法。 。你也可以使用一个'Action',允许OP传递一个被动作影响的对象的引用。 – MadProgrammer 2014-10-05 21:08:25
这正是我所需要的。感谢您的帮助! – user2788749 2014-10-05 21:17:54