Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为许多对象初始化引用变量?_Java_Swing - Fatal编程技术网

Java 为许多对象初始化引用变量?

Java 为许多对象初始化引用变量?,java,swing,Java,Swing,我在为Java类的战舰游戏构建网格时遇到了一些问题。到目前为止,我可以轻松地为创建一个循环,将JPanel或JButton对象添加到JFrame中。然而,我的问题是,在玩游戏时,我需要再次使用这些面板或按钮(比如点击按钮,看看你的对手是否在那个广场上放置了一艘船,等等)。Java中有没有一种简单的方法来初始化许多对象的引用变量?或者我必须单独声明它们吗?您可以随时扩展JButton来跟踪您需要的信息。一个简单的例子: class MyButton extends JButton{ pri

我在为Java类的战舰游戏构建网格时遇到了一些问题。到目前为止,我可以轻松地为创建一个
循环,将JPanel或JButton对象添加到JFrame中。然而,我的问题是,在玩游戏时,我需要再次使用这些面板或按钮(比如点击按钮,看看你的对手是否在那个广场上放置了一艘船,等等)。Java中有没有一种简单的方法来初始化许多对象的引用变量?或者我必须单独声明它们吗?

您可以随时扩展
JButton
来跟踪您需要的信息。一个简单的例子:

class MyButton extends JButton{
    private MyGameInfo mygameInfo;
    private int buttonId;
    //More fields....
    //Getters/Setters
}

然后,不要创建
JButton
对象并将其添加到布局中,而是创建
MyButton
对象(这也是一个JButton,因此布局不会受到影响),并将其额外功能用于游戏逻辑。

您可以尝试一个多维JPanel数组(或任何其他对象)。创建一个与网格大小相同的数组。下一行初始化一个包含5行5列的数组

JPanel[][] battleField = new JPanel[5][5];
使用嵌套for循环在阵列中创建面板

for (int rowIndex = 0; rowIndex < battleField.length; rowIndex++)
{
    for (int cellIndex = 0; cellIndex < battleField[rowIndex]; cellIndex++)
    {
         battleField[rowIndex][cellIndex] = new JPanel();
    }
}
for(int-rowIndex=0;rowIndex

如果以后要引用战场阵列,只需将其设置为实例变量。

对于战舰游戏,您最有可能希望在单击is后检索按钮的位置。可以使用按钮作为键并将其所在的点作为值来创建哈希表

HashMap<JButton, Point> buttonMap = new HashMap<JButton, Point>();

for (int x = 0; x < COLUMNS; x++)
{
  for (int y = 0; y < ROWS; y++)
  {
     JButton btn = new JButton();
     btn.addActionListener(this);
     buttonMap.put(btn, new Point(x, y));
     //then add the button to your container
  }
}

当然,您需要正确处理错误情况,例如源不是按钮或按钮不在地图中…

作为参考,这里有一个使用按钮网格的相关示例。这个相关的例子演示了模型-视图-控制器模式在一个简单游戏中的应用。

是2D阵列(x,y)的布局,就像战场[1][2]是位置(1,2)?没关系,我回答了我自己的问题。非常感谢你的帮助,这正是我想要的!!别开玩笑了,他对之前的问题有一些不错的答案。。。另外,考虑一下你找到的有用的投票答案,因为没有遵守正确的礼仪,你会后悔的。既然我已经考虑到了这一点,我将确保更密切地关注它。让我赞扬你们对每个答案的深思熟虑的回答。噢。。。我不知道我能做到!非常感谢,我一定会好好利用它的!这对我需要的东西绝对有用,非常感谢!我需要使用类似这样的东西来获取按钮的网格位置,这样我就可以判断我是否撞到了船。再次感谢你!谢谢这很好,我将不得不考虑在我的项目中可能实现MVC!
JButton btn = (JButton)actionEvent.getSource();
Point p = buttonMake.get(btn);