2

こんにちは、とオブジェクトJavaを使用していくつかの描画例を作成しようとしています。描画と「その周り」には固定サイズの「ステージ」(400x300)が必要です。paintComponentGraphicswindow/frame

これが私のセットアップです:

public class MyJFrame extends JFrame{    
    public MyJFrame(){
        //setSize(new Dimension(400,300));
        setBackground(Color.green);
        Stage stage = new Stage();
        add(stage);
        
        this.pack();
        this.setResizable(false);
        this.setVisible(true);
        
        System.out.println(this.size());
        System.out.println(stage.size()); 
    }
}

public class Stage extends JPanel {
    
    public Stage(){
        setPreferredSize(new Dimension(400,300));
        //setSize(new Dimension(400,300)); 
    }
    
    @Override
    protected void paintComponent(Graphics g) {
        g.setColor(Color.BLACK);
        g.fillRect(0, 0, 400, 300); 
    }
}

印刷物の出力は次のとおりです。

java.awt.Dimension[width=416,height=338]
java.awt.Dimension[width=400,height=300]

しかし、結果は次のようになります。
ここに画像の説明を入力

黒い部分は400x300です。この余分なスペースがどこから来るのかわかりません。とレイアウト
のバリエーションをいくつか試しましたが、実際には何も機能しませんでした。setSize setPreferredSize

PSそこにJavaフィドルはありますか?

4

3 に答える 3

4
//this.pack();
this.setResizable(false);
this.pack();
于 2013-07-25T05:21:26.677 に答える
3

2つのこと。

  1. あなたの後に電話packしてくださいsetResizable。これは (一般的ではない) 既知のバグです
  2. マジックナンバーに頼らないでください。可能であれば、既知の値を使用する必要があります。これにより、後でこれらの値を変更することにした場合に、作業が楽になります。

たとえば、代わりにg.fillRect(0, 0, 400, 300);使用する必要がありますg.fillRect(0, 0, getWidth(), getHeight());

于 2013-07-25T05:24:11.567 に答える
2

BufferedImageこの場合、 をペイント サーフェスとして使用し、単純に で表示する方がよいと思いますJLabel簡単な (アニメーション化された) 例は、この回答で見ることができます。

于 2013-07-25T06:08:40.697 に答える