初心者なので、我慢してください。Java で倉庫番ゲームを作成しています。ゲームを起動して実行しましたが、pack() に問題があります。レベルのサイズに応じてフレームのサイズを変更したいのですが、レベルごとにサイズが異なります。パネルはさまざまなサイズで正しくペイントされているため、フレームを最大化するだけで問題ありませんが、pack() を呼び出してフレームのサイズを自動的に変更するにはどうすればよいでしょうか? メイン メソッドに pack() を入れようとしましたが、解決策はそれほど単純ではないと思います (おそらく、プログラムを構成した方法も役に立たないでしょう)。Main メソッドに pack() を配置すると、添付された画像が生成されます。これは、基本的に最小、最大、閉じるボタンだけの非常に小さな四角形です。
実装したい推奨ソリューションは次のとおりです。
オブジェクトがフィールドに記憶する参照パラメーターとして周囲の 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);
}