2014-05-20 39 views
0

我正在尝试制作一个非常简单的用户可以在其中移动的网格。通过我的研究,我得出结论:实现这一目标的最佳方法是使用二维数组来表示网格。但是我不确定如何将这个数组绘制到一个Jframe或Jpanel,如果我要制作一个矩形数组。是否有可能在Java中制作矩形阵列

Example

许多问题#1似乎要问simmilar查询,但unforunately我发现非那完全解释如何绘制矩形的一个简单的网格。

回答

1

你可以使所有的数组都不存在。注意如何实现一个数组是

*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循环的同一类英寸

+0

哇,这是一个真正有用的解释,已经交战了相当长的一段时间! – user3105372

+0

你认为使用类似[Rectangle2D](http://docs.oracle.com/javase/7/docs/api/java/awt/geom/Rectangle2D.html)类的东西可能比创建我自己的东西更有益矩形类 – user3105372

0

您可以扩展JComponent并覆盖其paint(Graphics)方法使用Graphics.drawLine来绘制网格。

如果您需要以某种方式交互网格单元格,那么您应该创建具有矩形边框的组件并使用网格布局来定位它们。

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方法中,您还可以传递整个单元格,以便每个单元格都可以识别另一个单元格,并且能够与它们交互。但请注意,如果您在循环中传递它并创建单元格,则可能会遇到空值。

这种方式,您可以使用Swing组件,以便每个单元可以点击等