2017-11-28 4 views
-4

私はアマチュアのJavaコーダーで、SpaceInvadersに似たゲームを作りたいです。グラフィックが表示されないのはなぜですか?

paintControllerをパネルに追加しようとすると、フレームが空白になっているのですが、定期的にコードを追加すると、すべての結果が表示されます。

はここでグラフィックスがパネルなしで追加されたとき、私のオブジェクトクラスだと競合がない:

package SS; 
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 
import java.io.Serializable; 
import java.util.*; 
public class objects extends JPanel{ 
private int rand1, rand2, y; 
int x=0; 
Random rand = new Random(); 
public class picture extends JPanel{ 
@Override 
public void paintComponent(Graphics g){ 
    super.paintComponent(g); 
    this.setBackground(Color.BLACK); 
    for (int c=0;c<=1000;c++){ 
     g.setColor(Color.yellow); 
     rand1=rand.nextInt(1920); 
     rand2=rand.nextInt(720); 
     g.drawOval(rand1, rand2, 1, 1);} 
    g.setColor(Color.MAGENTA); 
    g.fillRect(1920/2-x,720-100+y, 50, 50); 
     } 
    } 
} 

今私のオブジェクトクラスのこのバージョンは

package SS; 
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 
import java.io.Serializable; 
import java.util.*; 
public class objects extends JPanel{ 
private int rand1, rand2, y; 
int x=0; 
Random rand = new Random(); 
public objects(){ 
    JPanel jp = new JPanel(); 
    picture p = new picture(); 
    jp.add(p); 
} 
public class picture extends JPanel{ 
@Override 
public void paintComponent(Graphics g){ 
    super.paintComponent(g); 
    this.setBackground(Color.BLACK); 
    for (int c=0;c<=1000;c++){ 
     g.setColor(Color.yellow); 
     rand1=rand.nextInt(1920); 
     rand2=rand.nextInt(720); 
     g.drawOval(rand1, rand2, 1, 1);} 
    g.setColor(Color.MAGENTA); 
    g.fillRect(1920/2-x,720-100+y, 50, 50); 
     } 
    } 
} 

の私の目的は空白のフレームを生成しpaintComponentの周りに外部クラスを作ることは、将来のキーバインドのためにコンポーネントを作成することができることです。

私は狂っている!私はこのサイトの周りを検索し、何も見つけることができません!誰もが、私はそれを深く感謝し、私に原因と解決策を伝えることができた場合:)

をこれが

package SS; 
import javax.swing.JFrame; 
public class mainframe { 
    public static void main(String[] args){ 
     JFrame mainFrame = new JFrame(); 
     mainFrame.setBounds(0, 0, 1920, 720); 
     mainFrame.setResizable(false); 
     mainFrame.getContentPane().add(new objects()); 
     mainFrame.setDefaultCloseOperation(mainFrame.EXIT_ON_CLOSE); 
     mainFrame.setVisible(true); 
    } 
} 

経由で私のメインクラスです私は批判、私はこの中で述べて何のための適切な文言に開いています役職。ちょうど私が何を意味するか反復する

私は、メインフレームクラスで私のフレームに

をそのJPanelのを追加し、私はJPとして記載されているのJPanelに自分のpaintComponentメソッドから作られたグラフィックスを追加したい。また申し訳ありません私が見逃したことがあれば、これはStackOverflowの私の最初の投稿です。あなたはobjectsコンストラクタで新しいjpパネルにpictureパネルを追加することが、新しいパネルがobjects自体に追加されていないことされた第2の例では

+0

私は、テキストボックスの書式を経由してコードを追加しようとしましたが、それは私がスクリーンショットを取ったので、私はそれを追加することはできませんでした。ごめんなさい! – eyelikeboats

+1

ようこそStackOverflowへ!リンクが将来死んでしまう可能性があるため、コードの画像を投稿することはお勧めしません。また、一般的に読むのが難しくなる可能性があります。あなたがコードブロックを使って直接答えにあなたのコードを投稿することができればよいでしょう。 編集:ちょうど上記のあなたのコメントを見た。試してみるとどのようなエラーが出ますか? –

+0

将来的には、コードを画像ではなくコードとして表示する必要があります。イメージをIDEにコピーして実行することはできません。コードが大きすぎるとサイトから通知された場合は、コードを短くしますが、まだコンパイルされて、[mcve]が実行されていることを確認してください。 [ヘルプ]のセクションを尋ねる方法を確認してください。 –

答えて

0

objectsコンストラクタの末尾に次の行を追加してみてください:this.add(jp);。推奨サイズを指定する方法の

更新:

public class picture extends JPanel{ 

      @Override 
      public Dimension getPreferredSize() { 
       return new Dimension(500, 500); 
      } 
... 
} 
+0

ありがとうございました!グラフィックスはフレームに表示されますが、フレームの中央上部には非常に小さな正方形として表示されます。さらなる支援が必要な場合は、投稿します。もう一度、ありがとう! – eyelikeboats

+0

あなたの 'ピクチャ'パネルにカスタムペイントロジックを追加していて、他のSwingコンポーネントを追加していないので、レイアウトマネージャはあなたのパネルをどれくらい大きくする必要があるか分かりません。 'getPreferredSize'をオーバーライドし、必要なサイズを指定してください。私の更新された答えを見てください。 – tsolakp

+0

こんにちは、私はこれを試して、それは私のソリューションを修正するようです。どうもありがとうございます! – eyelikeboats

関連する問題