我正在尝试为java中的蛇和梯子游戏创建一个网格,但我有一个小问题,即我创建的网格中有一个不需要的空间
有谁知道我怎么能摆脱它?
这是我为客户端编写的代码(Client.java):
//Initialize Grid Cells
private Cell[][] cell = new Cell[10][10];
//Create Grid Layout
GridLayout GameBoard = new GridLayout(10, 10, 1, 1); //Create GridLayout
GameArea.setLayout(GameBoard); //Add GridLayout
GameArea.setPreferredSize(new Dimension(590,560));
GameArea.setOpaque(false);
//Add Cells to Grid
for (int v = 0; v < 10; v++)
for (int h = 0; h < 10; h++)
GameArea.add(cell[v][h] = new Cell(v, h, this));
//Individual Image on Each Cell
cell[1][0].add(new JLabel(GreenGrid));
这是我对单元格(Cells.java)的代码,它还扩展JPanel :
//Indicate the row and column of this cell in the board
private int GridRow;
private int GridColumn;
private Client parent;
public Cell(int GridRow, int GridColumn, Client GUI) {
this.GridRow = GridRow;
this.GridColumn = GridColumn;
this.parent = GUI;
setBorder(new LineBorder(Color.orange, 1)); // Set cell's border
setBackground(Color.gray);
}
答案 0 :(得分:2)
我无法看到您的图片,但我怀疑您有布局问题。您的Cell是否会延长JPanel?您是否设置了布局管理器,还是使用默认的FlowLayout?
考虑:
setPreferredSize(...)
,因为这将决定你的网格单元格大小,这太大了。getPreferredSize()
并返回JLabel图像的维度(如果存在)或者返回超级结果。pack()
。要获得更多帮助和更好的帮助,请考虑创建并发布sscce。
答案 1 :(得分:1)
你的第一个问题就在这里......
GridLayout GameBoard = new GridLayout(10, 10, 1, 1); //Create GridLayout
如JavaDocs中所述...
public GridLayout(int rows,
int cols,
int hgap,
int vgap)
创建具有指定行数和列数的网格布局。 布局中的所有组件都具有相同的大小。
此外,水平和垂直间隙设置为指定的 值。在每列之间放置水平间隙。 在每行之间放置垂直间隙。
行和列中的一个但不是两个都可以为零,这意味着任何行 对象数量可以放在一行或一列中。
这意味着,您通过向hgap
和vgap
参数提供非零值来提供差距。
如果你使用像...这样的东西。
GridLayout GameBoard = new GridLayout(10, 10); //Create GridLayout
你最终会得到像......
正如已经提到的,我会避免使用GameArea.setPreferredSize(new Dimension(590,560));
,而是覆盖getPreferredSize
类Cell
类。由于GridLayout
的工作方式,这不会阻止细胞大小调整,但无论如何这可能都是可取的......