我正在尝试制作一个非常简单的网格,用户可以在其中浏览。通过我的研究,我得出结论,实现这一目标的最佳方法是使用二维数组来表示网格。但是,如果我要制作一个矩形数组,我不确定如何将此数组绘制到Jframe或Jpanel。
许多Stackoverflow问题似乎都在询问simmilar查询但不幸的是我发现了非完全解释如何绘制一个简单的矩形网格。
答案 0 :(得分:1)
你可以用一切来制造阵列。请注意实现数组的方式是
*datatype* [] *arrayname* = new *datatype* [*lengthOfArray*];
让我们说包含矩形的类的名称是RECTANGLE。因此,如果你想要一个包含5个矩形的数组,它看起来有点像:
RECTANGLE [] rectangelArray = new RECTANGLE [5];
如果你想把它带到二维水平,只需添加另一个支架:
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(RECTANGLE toDraw)与使用for循环的方法在同一个类中。
答案 1 :(得分:1)
在网格集布局的父组件中
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方法中,您还可以传递整个单元格,以便每个单元格都能够识别另一个单元格,并能够与它们进行交互。但请注意 - 如果您在循环中传递它也会创建单元格,则可能会遇到空值。
这样你可以使用摇摆组件,这样每个单元都可以点击等。
答案 2 :(得分:0)
您可以扩展JComponent
并覆盖其paint(Graphics)
方法,以使用Graphics.drawLine
绘制网格。
如果您需要以某种方式交互网格单元格,那么您应该只创建具有矩形边框的组件并使用网格布局定位它们。