真的很感谢上一个问题的帮助,但仍有一些错误。我正在制作寻宝游戏,用户点击gui来试图揭示宝箱的位置。我正在使用动作监听器在按钮上显示一个宝箱的图像,如果找到了位置,但这是一个固定的位置,我想随机化它。有一些建议在按钮和随机数生成器上使用数组然后使用if / else来检查。有编译器错误,我将对下面的代码发表评论。一个好的程序员可能会在几秒钟内找到我的新手错误!
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 {
JLabel label1, label2, label3;
ImageIcon image1, image2, image3, image4, image5;
JTextField textResult;
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);
JButton [] 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);
this.add(thePanel);
this.setVisible(true);
int treasureLocation = new Random().nextInt(buttons.length);
System.out.println(treasureLocation);
在编译器上,它给出了一条错误消息,说它在下面的if else语句中不知道“buttons”或“treasureLocation”。
}
public void actionPerformed(ActionEvent evt) {
if (evt.getSource() == buttons[treasureLocation]) {
}
else {
}
}
}
答案 0 :(得分:1)
您是否可以拥有不同的Listener类?
public class Test extends JFrame {
public Test(){
Button[] buttons;
int treasureLocation;
}
private class ButtonListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
if (evt.getSource() == buttons[treasureLocation]) {
}
}
}
这会导致错误,buttons
和treasureLocation
不在范围内。如果情况并非如此,那对我来说似乎仍然是一个范围问题。尝试将变量声明为类成员
public class Test extends JFrame {
Button[] buttons;
int treasureLocation;
public Test(){
}
}
答案 1 :(得分:0)
您实际上在构造函数中定义了buttons
和treasureLocation
,这实际上是not
推荐的。因此,它们的生命周期和访问权限仅限于此方法。在课堂上定义它们并初始化它们。
答案 2 :(得分:0)
JLabel label1, label2, label3;
ImageIcon image1, image2, image3, image4, image5;
JTextField textResult;
JButton [] buttons; // Move the declaration here
int treasureLocation; // Move the declaration here
并更改
JButton [] buttons = new JButton[9];
到
buttons = new JButton[9];
和
int treasureLocation = new Random().nextInt(buttons.length);
到
treasureLocation = new Random().nextInt(buttons.length);
答案 3 :(得分:0)
您需要将buttons
和treasureLocation
定义为属性。所以不要在方法或构造函数中定义它们,在
ImageIcon image1, image2, image3, image4, image5;