2

私はJavaとSwingを使用してminesweeperをプログラミングしており、ユーザーが希望のサイズでゲームを再起動したときにコードが何をすべきかを検討しています。1つの(int、int)コンストラクターを持ち、JPanelの拡張であるクラスMyGridがあります。グリッドを描画し、それで何が起こるか(クリック、爆弾の配置など)を処理します。そのため、ゲームクラスには、ユーザーが新しいゲームを開始するときのActionListerがあり、ユーザーの入力を検証してから、JFrame(ここではmyPaneと呼びます)に新しいグリッドをペイントします。だから私はこのようにsthをします:

        myPane.remove(mswGrid);
        MyGrid mswGrid = new MyGrid(nowaSzerokosc, nowaWysokosc);
        myPane.getContentPane().add(mswGrid, BorderLayout.CENTER);
        myPane.repaint();
        myPane.validate();

また、最初はうまくペイントされますが、それ以外の場合は前のグリッドの上または下にペイントされるため、3x3、次に15x15の場合、ウィンドウのサイズを変更してこれらのセルを表示し、前の3x3の下にペイントする必要があります。グリッド。グリッドが消えないのはなぜですか?つまり、オブジェクトは新しいものを作成するときに長い間なくなっているので、remove()のおかげでグラフィックス表現になるはずです。なんでじゃないの?

4

1 に答える 1

5

この順番でお電話ください。

    myPane.revalidate();
    myPane.repaint();
于 2013-01-11T11:44:25.117 に答える