2016-08-28 5 views
0

現在、非常に単純なゲームを作成しようとしていますが、すぐに問題に遭遇しました。描画するボックスは部分的にしか表示されません。限られた領域にしか表示されないようですが、これが何を引き起こしたのか、どのように解決できるのか分かりません。JComponentは部分的にしか表示されません

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

    public Game() 
    { 
    JFrame gameFrame = new JFrame(); 
    JPanel somePanel = new JPanel(); 
    Box testBox = new Box(10, 10, 20, 20); 
    somePanel.add(testBox); 
    gameFrame.add(somePanel); 
    gameFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    gameFrame.add(testBox); 
    gameFrame.setResizable(true); 
    gameFrame.setBounds(500, 500, 600, 350); 
    gameFrame.setVisible(true); 
    } 
} 

public class Box extends JComponent 
{ 
    private int x; 
    private int y; 
    private int width; 
    private int height; 

    public Box(int x, int y, int width, int heigth) 
    { 
     this.x = x; 
     this.y = y; 
     this.width = width; 
     this.height = heigth; 
    } 

    public void paintComponent(Graphics g) 
    { 
     g.drawRect(x, y, width, height); 
    } 
} 

持つクラスと矩形を描画されたクラス(「NT)。
注:これは初めてのStackoverflowを使用しているので、何か問題があった場合は教えてください。

ここ

は、フレームの画像です:JPanelのを拡張するクラスを持つボックスを描画

http://i.imgur.com/PT9Yg14.png

が動作しているようですが、それは私が望んでいないのですが、少なくともそれが動作します。我々はそれをクリックせずに画像を見ることができるように

+0

コードを正しくインデントして、問題を再現する完全な最小限のプログラムを投稿してください。このコードはコンパイルされず、g2dの名前をgに変更してもうまくいきます(ただし、somePanelは無意味ですが、ボックスを追加するので、フレーム自体に追加してから使用できます)。また、Java命名規則を尊重する。変数は小文字で始まります。 –

+0

あなたはtestboxを2度追加します - somepanelに1回、gameframeに1回。 – Kylar

+0

@Kylarその行を削除しようとしましたが、何も変更されていないようです。 – aulerelyn

答えて

0

これはStackOverflowのを使用して、私の最初の時間です...

スクリーンショットが質問に含まれるべきです。新しいユーザーとして私はイメージを含めるとは思わないが、あなたの質問の一部としてリンクを含めることができます。誰かが一般的に画像をあなたのために質問に追加します。

Boxコンポーネントがフレームに直接追加されたとき、コードはうまく動作します。

あなたが提供する画像は意味をなさない。あなたのペイントされた線のサイズは20ピクセルよりはるかに大きいので、画像は投稿されたコードと一致するようです。投稿されたコードの実行時に画像が生成されていることを確認してください。

通常、カスタムペイントを行うときはJPanelpaintComponent(...)メソッドをオーバーライドし、最初のステートメントとしてsuper.paintComponent(...)を呼び出します。詳細と例については、Custom PaintingのSwingチュートリアルのセクションを読んでください。特にgetPreferredSize()メソッドをオーバーライドする必要があることに注意してください。そうしないと、レイアウトマネージャーはサイズが(0、0)だと思ってペイントするものはないでしょう。

JPanelを拡張しない場合は、デフォルトのペイントが行われていないため、JComponentの背景をペイントする必要があります。基本コードは次のようなものです:

また、クラスボックスと呼んではいけません。その名前ですでにSwingコンポーネントがあるので、混乱するでしょう。クラス名はよりわかりやすいものにする必要があります。

関連する問題