1

コンストラクターの外側からを使用resizeするにはどうすればよいですか?JFramestatic method

なぜこれが必要なのか説明しましょう。

Java でゼルダのようなゲームをプログラミングしていて、ダンジョンがあります。俺のダンジョンには普通の部屋とボス部屋がある。私の質問は、JFrameボス部屋の寸法が他の部屋とは異なるため、後でゲームのサイズを変更することは可能ですか? に直接描いていJFrameます。

を使ってみsetSize(int,int)ましたが、 としてしか使えませんnon-static

私が尋ねていることが明確でない場合はお知らせください。

読んでくれてありがとう

4

2 に答える 2

4

コンストラクターの外側から静的メソッドを使用して JFrame のサイズを変更するにはどうすればよいですか?

  • JFrame をローカル変数として作成し、JFrame を拡張しないでください

私の質問は、ボス部屋の寸法が他の部屋と異なるため、ゲームの後で JFrame のサイズを変更することは可能ですか?

  • はい、setSize(int, int) または setPreferredSize(new Dimension(int, int)) よりも JFrame.pack() を使用して、JFrame.pack(その子が適切な PreferredSize を返し、適切な LayoutManager によって配置される) を優先します。言及された3つの選択肢はすべて、すべての場合に実行時に機能します

JFrame に直接描画しています。

  • これは間違った判断です。ペイントに JPanel を使用し、JFrame.pack() の JPanels getPreferredSize をオーバーライドします。JFrame とカスタム ペイントのすべての座標は、getPreferredSize に基づいて計算されます。

setSize(int,int) を使ってみたのですが非静的でしか使えません。

  • SSCCEがないとわからない
于 2013-07-17T13:25:49.143 に答える
0

静的コンテキストで setSize(int,int) を使用する場合は、次のようにする必要があります

public class Main {

    static JFrame f;

    public static void main(String args[]) {
        f = new JFrame();
        f.add(new JLabel("prova"));
        f.setVisible(true);
        f.setSize(900, 900);
    }
}

JFrame を static として宣言することにより、静的コンテキストと非静的コンテキストの両方で setSize を呼び出すことができます。

あなたがやろうとしているなら

public class MyFrame extends JFrame() {

    public static void changeSize(int a, int b) {
        setSize(a,b);
    }

    ....
}

静的メソッドは非静的オブジェクト (クラス MyFrame の現在のインスタンスなど) を参照できないため、これを行うことはできません。静的メソッドは、次のような静的オブジェクトにのみアクセスできます。

public class MyFrame extends JFrame() {

    static int l;

    public static void changeSize(int a, int b) {
        l = 10;
    }

    ....
}
于 2013-07-18T19:41:08.023 に答える