【发布时间】:2014-05-24 15:24:03
【问题描述】:
我正在尝试为使用 gridLayout 的 JPanel 制作的游戏创建地图。在我的第一个测试中,我使用 5x5 网格并创建我的小面板,它是 JPanel 的子类。我的程序可以很好地创建它们,但是当我将所有面板添加到较大的面板中并显示它时,只显示第一个正方形,其余的为空白。为什么这样做? 这是我的 MapSpace(小面板)代码:
import javax.swing.*;
import java.awt.*;
public class MapSpace extends JPanel{
private int ownerTag;
private int xPos, yPos;
public MapSpace(){
xPos = 0;
yPos = 0;
ownerTag = 0;
setBackground(Color.WHITE);
}
public MapSpace(MapSpace m){
xPos = m.getX();
yPos = m.getY();
ownerTag = m.getID();
setBackground(m.getColor());
}
这是我的地图代码:
import javax.swing.*;
import java.awt.*;
import java.util.*;
public class Map extends JPanel{
private int cols, rows;
private int randCol, randRow;
private MapSpace[][] spaces;
Random gen = new Random();
public Map(int w, int h){
cols = h;
rows = w;
setLayout(new GridLayout(cols, rows));
setBackground(Color.WHITE);
spaces = new MapSpace[cols][rows];
for(int i = 0; i < cols; i++){
for(int j = 0; j < rows; j++){
MapSpace panel = new MapSpace(i, j);
spaces[i][j] = panel;
}
}
assignSpaces(3);
setColors();
for(int i = 0; i < cols; i++){
for(int j = 0; j < rows; j++){
MapSpace spot = new MapSpace(spaces[i][j]);
add(spot);
}
}
setSize(400, 400);
}
第二个嵌套 for 循环是添加所有 mapSpaces 的地方,但是当我将地图放入 JFrame 并在 GUI 窗口中显示时,只出现左上角的一个小方块。
【问题讨论】:
-
在
Map类中将MapSpace替换为JLabel,看看它显示了什么? -
否则,创建一个stackoverflow.com/help/mcve,那么这个问题可能会在几分钟内解决。
-
@Braj 我用 JLbael 替换了 MapSpace,它将标签放在窗口上一个漂亮的 5x5 网格中。这是什么意思?
标签: java swing jpanel awt grid-layout