我正在尝试制作一个非常简单的用户可以在其中移动的网格。通过我的研究,我得出结论:实现这一目标的最佳方法是使用二维数组来表示网格。但是我不确定如何将这个数组绘制到一个Jframe或Jpanel,如果我要制作一个矩形数组。是否有可能在Java中制作矩形阵列
许多问题#1似乎要问simmilar查询,但unforunately我发现非那完全解释如何绘制矩形的一个简单的网格。
我正在尝试制作一个非常简单的用户可以在其中移动的网格。通过我的研究,我得出结论:实现这一目标的最佳方法是使用二维数组来表示网格。但是我不确定如何将这个数组绘制到一个Jframe或Jpanel,如果我要制作一个矩形数组。是否有可能在Java中制作矩形阵列
许多问题#1似乎要问simmilar查询,但unforunately我发现非那完全解释如何绘制矩形的一个简单的网格。
你可以使所有的数组都不存在。注意如何实现一个数组是
*datatype* [] *arrayname* = new *datatype* [*lengthOfArray*];
可以说包含矩形的类的名称是RECTANGLE。所以,如果你想要一个数组,包含,可以说,5个矩形,它看起来有点像:
RECTANGLE [] rectangelArray = new RECTANGLE [5];
如果你想采取一个2维的级别,只需添加另一架:
RECTANGLE [][] rectangelMatrix = new RECTANGLE [4][5];
假设通过“绘制到JPanel”你的意思是你想要把矩形放到屏幕上,那么你将在for循环中有一个for循环,例如调用每个矩形来绘制自己:
for(int i = 0; i<rectangleMatrix.length; i++){
for(int j = 0; j<rectangleMatrix[i].length; j++){
rectangleMatrix[i][j].draw();
}
}
rectangleMatrix.draw()
调用将根据其坐标和大小绘制矩形的方法。你也可以用类似的方式调用一个方法来读取每个矩形的信息,然后根据这些信息绘制它。这将帮助你在你的类的信息和图纸的目的之间的独立,这始终是做一件好事:
for(int i = 0; i<rectangleMatrix.length; i++){
for(int j = 0; j<rectangleMatrix[i].length; j++){
drawRectangle(rectangleMatrix[i][j]);
}
}
的DrawRectangle(矩形toDraw)是你有法for循环的同一类英寸
您可以扩展JComponent
并覆盖其paint(Graphics)
方法使用Graphics.drawLine
来绘制网格。
如果您需要以某种方式交互网格单元格,那么您应该创建具有矩形边框的组件并使用网格布局来定位它们。
在像 gamePanel.setLayout(new GridLayout(ix, iy));
其中IX和IY是尺寸大小 你还需要在这种情况下,细胞的细胞private Cell[][] cells;
的阵列的网格组布局的父组件是根本
public class Cell extends JPanel{
//some game specific code, fields, constructors
}
现在用它
for (int i = 0; i < ix; i++) {
for (int j = 0; j < iy; j++) {
progres.setValue(progres.getValue() + 1);
cells[i][j] = new Cell(i, j, passer);
gamePanel.add(cells[i][j]);
}
}
现在如果在电池的构造函数中,您将设置一个边界this.setBorder(new LineBorder(Color.GRAY));
电网将出现。在单元格构造器或setter方法中,您还可以传递整个单元格,以便每个单元格都可以识别另一个单元格,并且能够与它们交互。但请注意,如果您在循环中传递它并创建单元格,则可能会遇到空值。
这种方式,您可以使用Swing组件,以便每个单元可以点击等
哇,这是一个真正有用的解释,已经交战了相当长的一段时间! – user3105372
你认为使用类似[Rectangle2D](http://docs.oracle.com/javase/7/docs/api/java/awt/geom/Rectangle2D.html)类的东西可能比创建我自己的东西更有益矩形类 – user3105372