Creating Cells for GridLayout in Java

我的梦境 提交于 2019-12-23 18:25:24

问题


I'm trying to create a grid for my snakes and ladders game in java, but I have a small problem where there is an unwanted space in the grids I've created

Does anyone know how I can get rid of that?

This is the code I have for the client side (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));

This is the code I have for the cells(Cells.java), it also extends 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);

} 

回答1:


Your first problem is here...

GridLayout GameBoard = new GridLayout(10, 10, 1, 1); //Create GridLayout

As described in the JavaDocs...

public GridLayout(int rows,
int cols,
int hgap,
int vgap)

Creates a grid layout with the specified number of rows and columns. All components in the layout are given equal size.

In addition, the horizontal and vertical gaps are set to the specified values. Horizontal gaps are placed between each of the columns. Vertical gaps are placed between each of the rows.

One, but not both, of rows and cols can be zero, which means that any number of objects can be placed in a row or in a column.

What this means is, you are supplying the gap by supplying non-zero values to the hgap and vgap parameters.

If you used something like...

GridLayout GameBoard = new GridLayout(10, 10); //Create GridLayout             

You would end up with something like...

As has already been mentioned, I would avoid using GameArea.setPreferredSize(new Dimension(590,560)); and instead, override the getPreferredSize method the Cell class. Because of the way that GridLayout works, this won't stop the cells from been resized, but this might be desirable anyway...




回答2:


I can't see your image, but I suspect that you have a layout issue. Does your Cell extend JPanel by the way? Do you set its layout manager or do you use the default FlowLayout?

Consider:

  • You should not call setPreferredSize(...) on the GameBoard as that will then dictate your grid cell size, which is too big.
  • Rather, the Cells themselves should be dictating the size of themselves and the entire grid.
  • Consider having Cell override getPreferredSize() and returning the dimension of the JLabel's image (if one is present) or else returning the super's result.
  • Be sure to call pack() on your top-level window after adding all components and before setting it visible.
  • Consider having Cell use a BorderLayout and adding your JLabel to the BorderLayout.CENTER position so that it fills the cell (if that's what you want it to do).

For more help and better help, consider creating and posting an sscce.



来源:https://stackoverflow.com/questions/20646015/creating-cells-for-gridlayout-in-java

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!