0

JPanle と JFrame を使用してゲームを作成しようとしています。フレームの中にパネルを設置しました。パネルの長方形のサイズが 0,0 のパネルにペイントすると。長方形は、いくつかのピクセルで上下にシフトします。この問題を解決するにはどうすればよいですか? 私はグーグルでインセットメソッドを見ましたが、描画するたびに座標を計算したくありません。

ここにコードがあります

public class Game extends JFrame{

public Game(){
    this.getContentPane().setPreferredSize(new Dimension(800,600));  
    pane p = new pane();
    this.getContentPane().add(p,BorderLayout.CENTER);
    p.setPreferredSize(new Dimension(800,600));
    pack();
    setResizable(false);
    setVisible(true);


}


public static void main(String[] args){
    new Game();
}

}

public class pane extends JPanel{

public pane(){

setDoubleBuffered(false);
setBackground(Color.black);
setPreferredSize( new Dimension(800, 600));

setFocusable(true);
requestFocus(); 
}

@Override
public void paint(Graphics g) {
    g.setColor(Color.white);
    g.fillRect(0, 0, 800, 600);
    g.setColor(Color.black);
    g.fillRect(0, 0, 800, 600);

}
}

スクリーンショットのリンク

4

1 に答える 1

1

実際にはパネルのシフトはなく、0,0 にあります。問題は、パネルが実際には 800,600 ではなく 810,610 のサイズになることです。何らかの理由で (これまでのところ見つけることができず、誰かが知りたいアイデアを持っている場合)、 を呼び出すsetResizable(false)JFrame、そのインセットが変更され、最終的にコンテンツ ペインが予想よりも大きくなります (少なくとも JDK6/Win7 では)。setResizable(false)コンポーネントを追加してフレームをパッキングする前に呼び出すと、機能します。

また、パネルのサイズの長方形をペイントすることも検討してください (g.fillRect(0, 0, getWidth(), getHeight());何が起こっても、領域全体を確実に塗りつぶすことができます。

背景を白で塗りつぶしてから黒に置き換える理由はありますか?

于 2012-07-05T09:19:07.017 に答える