新手,请多多包涵。我正在用 Java 编写一个推箱子游戏,我启动了游戏,但是我遇到了 pack() 的问题。我希望我的框架根据关卡的大小自行调整大小,不同的关卡有不同的大小。面板正在为不同的尺寸正确绘制,所以如果我只是最大化框架,那么一切都很好,但是我如何调用 pack() 来自动调整框架的大小?我试图将 pack() 放在我的 Main 方法中,但我怀疑解决方案不是那么简单(可能我构建程序的方式也无济于事)。将 pack() 放在 Main 方法中会生成附加的图像,一个非常小的矩形,基本上只有最小、最大和关闭按钮。
我想实施的推荐解决方案如下:
编写 Sokoban 构造函数,使其将周围的 JFrame 作为引用参数,然后对象在字段中记住该参数。然后,在您更改推箱子组件的首选大小后,调用此存储的周围 JFrame 的方法包。
我附上了我的构造函数和 Main 方法的代码。
public class Sokoban extends JPanel {
LevelReader lReader = new LevelReader();
private static final int SQUARESIZE = 50; // square size in pixels
int currentLevel = 0;
int height = 0;
int width = 0;
int x = 0;
int y = 0;
Contents [][] mapArray;
public Sokoban(String fileName) {
lReader.readLevels(fileName);
initLevel(currentLevel);
KeyListener listener = new MyKeyListener();
addKeyListener(listener);
this.setPreferredSize(new Dimension(500,500));
setFocusable(true);
}
public static void main(String[] args) {
JFrame frame = new JFrame("Sokoban");
Sokoban sokoban = new Sokoban("m1.txt");
frame.add(sokoban);
frame.setVisible(true);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}