3

JPanel を JFrame に追加するのは初めてで、少し助けが必要です。私が作成したあるクラスでは、大きな長方形が描かれています。このクラスは JPanel のサブクラスです。もう 1 つのクラスは、JFrame のサブクラスです。そのクラスの新しい JPanel オブジェクトを作成すると、長方形がフレームに表示されますが、通常よりも途方もなく小さく、正しい位置にありません。これがコードです、何が問題なのですか?

    public void gameRender() {

    if( dbImage == null ) {
        dbImage = createImage( dbWIDTH, dbHEIGHT );
        if( dbImage == null )
            return;
    }
    //else
        dbg = dbImage.getGraphics();


    dbg.setColor( Color.white );
    dbg.fillRect( 0, 0, dbWIDTH, dbHEIGHT );
    dbg.setColor( Color.black );

これは、プログラムの早い段階で while ループ (アニメーション ループなど) によって常に呼び出されるメソッドの一部です。これは JPanel サブクラスの一部であり、このコードのチャンクはダブル バッファリングに使用されます。dbWIDTH は 500 で、dbHEIGHT は 400 です。

このコードは、JPanel サブクラスのオブジェクトを作成しようとしている JFrame サブクラスからのものです (JPanel サブクラスは WalkAndJump3 と呼ばれます)。

    wj = new WalkAndJump3();

    Container c = getContentPane();
    c.setLayout( new FlowLayout() );

    c.add( wj );

paintComponent をオーバーライドして JPanel サブクラスで行ったことを試してみましたが、うまくいきませんでした。WalkAndJump3 wj をインスタンス変数として宣言したので、最初の行は問題になりません。どうしたの?ここでも問題は、描画された長方形が小さすぎて場違いなことです。

4

1 に答える 1

3

パネルのコンテナ (Container c = getContentPane()) レイアウトとして FlowLayout (c.setLayout( new FlowLayout() )) があるため、小さいです。これは、そのコンテナーに追加するすべてのコンポーネントが、デフォルトの最小サイズで「1 つずつ」整列されることを意味します (実際、これはフローです :)。あなたの場合、最小サイズはほぼゼロだと思います。

2 つのオプションがあり
ます

c.setLayout( new BorderLayout() );

これは役に立ちますが、ここでレイアウトがどのように機能するかについての Swing の紹介を読むことを強くお勧めします: http://docs.oracle.com/javase/tutorial/uiswing/layout/using.html

于 2012-04-10T11:07:51.803 に答える