真的很感激上一个问题的帮助,但遇到另一个问题是想知道是否有人可以提供帮助。在这个程序中,我正在尝试制作一个非常基本的寻宝游戏,用户必须点击查找gui上的宝藏,当点击按钮时,按钮的图片变成了宝箱的图片。我的问题是,我想让其他按钮将他们的照片更改为空洞,但不会覆盖宝箱图片。我想也许可以使用if / else语句,但不知道如何声明not buttons [treasureHunt]变量。任何帮助将不胜感激。
import java.awt.*;
import javax.swing.*;
import java.util.Random;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class Test extends JFrame implements ActionListener {
JLabel label1, label2, label3;
ImageIcon image1, image2, image3, image4, image5;
JTextField textResult;
JButton [] buttons;
int treasureLocation;
public static void main(String[] args) {
new Test();
}
public Test (){
this.setSize(700,700);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle("Treasure Hunt Game");
JPanel thePanel = new JPanel();
thePanel.setLayout(new GridLayout(0,3,0,0));
image1 = new ImageIcon(getClass().getResource("Treasure.jpg"));
image2 = new ImageIcon(getClass().getResource("Pirate.jpg"));
image3 = new ImageIcon(getClass().getResource("sand2.jpg"));
image4 = new ImageIcon(getClass().getResource("emptyhole.jpg"));
image5 = new ImageIcon(getClass().getResource("map.jpg"));
label1 = new JLabel("Click the buttons to find the Treasure!");
label2 = new JLabel(image5);
label3 = new JLabel(image2);
buttons = new JButton[9];
buttons[0] = new JButton(image3);
buttons[1] = new JButton(image3);
buttons[2] = new JButton(image3);
buttons[3] = new JButton(image3);
buttons[4] = new JButton(image3);
buttons[5] = new JButton(image3);
buttons[6] = new JButton(image3);
buttons[7] = new JButton(image3);
buttons[8] = new JButton(image3);
thePanel.add(buttons[0]);
thePanel.add(buttons[1]);
thePanel.add(buttons[2]);
thePanel.add(buttons[3]);
thePanel.add(buttons[4]);
thePanel.add(buttons[5]);
thePanel.add(buttons[6]);
thePanel.add(buttons[7]);
thePanel.add(buttons[8]);
thePanel.add(label1);
thePanel.add(label2);
thePanel.add(label3);
buttons[0].addActionListener(this);
buttons[1].addActionListener(this);
buttons[2].addActionListener(this);
buttons[3].addActionListener(this);
buttons[4].addActionListener(this);
buttons[5].addActionListener(this);
buttons[6].addActionListener(this);
buttons[7].addActionListener(this);
buttons[8].addActionListener(this);
this.add(thePanel);
this.setVisible(true);
treasureLocation = new Random().nextInt(buttons.length);
System.out.println(treasureLocation);
}
public void actionPerformed(ActionEvent evt){
if (evt.getSource() == buttons[treasureLocation]) {
buttons[treasureLocation].setIcon(image1);
}
else
}
}
}
答案 0 :(得分:3)
public void actionPerformed(ActionEvent evt)
{
Object source = evt.getSource();
if (source == buttons[treasureLocation]) {
buttons[treasureLocation].setIcon(image1);
}
else
{
((JButton) source).setIcon(someImageFile);
}
}
这应该回答你的问题。 evt.getSource()返回触发事件的object
,在这种情况下是单击的按钮。在else
中,您必须将其强制转换为JButton
才能更改其图标(=调用setIcon()
方法)。
如果它是宝藏,你实际上也可以执行强制转换,而不是检索索引上的按钮。我没有改变它,因为我可以想象做一个演员是一个比在索引上检索它更昂贵的任务。