2011-12-15 8 views
1

メインメソッドを含むsurvivalというクラスがあり、プログラムが初期化されます。このクラスのグラフィックス用のコードを入れる代わりに、どうやって生存とは別の新しいクラスに移動できますか?ここでメインクラス以外のJavaの2次元グラフィックスを使用する

はSurvival.javaです:ここでは

package survival; 
import javax.swing.*; 

public class Survival extends JFrame { 
    private static int applicationWidth = 1024; 
    private static int applicationHeight = 768; 

    public Survival() { 
     setTitle("Survival"); 
     setResizable(false); 
     setSize(applicationWidth, applicationHeight); 
     setVisible(true); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
    } 

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

はGraphicsDisplay.javaです:

package survival; 
import java.awt.*; 
import javax.swing.*; 

public class GraphicsDisplay extends JPanel { 
    @Override public void paintComponent(Graphics g) { 
     g.fillOval(50, 50, 100, 100); 
    } 
} 
+0

あなたは、あなたの質問をしてください言い換えるする必要があります。 – adatapost

+0

注意:パネルが不透明であると報告した場合、paintComponentは無効です(既定ではそうです)。 – kleopatra

答えて

3

に思えるようなことができますだけでadd()SurvivalコンストラクタでGraphicsDisplayのインスタンス。この場合

... 
setResizable(false); 
add(new GraphicsDisplay()); 
setSize(applicationWidth, applicationHeight); 
... 

、あなたの暗黙の、円形 モデルビューとして GraphicsDisplay行為。この exampleModel–View–Controllerパターンのクラスをどのように区切っているかを見てみるとよいでしょう。

GraphicsDisplayは、プログラムによって完全にレンダリングされるカスタムコンポーネントなので、getPreferredSize()をオーバーライドしてパネルのジオメトリを定義することを検討してください。次に、囲み枠は、ゲームで使用される他の表示パネルについて何も知らずに、pack()を使用することができます。このLissajousPanelは例です。コンストラクタで

2

あなたはJPanelの(JComponentの)を拡張し、paintComponent(Graphics g)メソッドをオーバーライドする必要があります。例えば

は、

public class MyPanel extends JPanel 
{ 
    @Override 
    public void paintComponent(Graphics g) { 
     super.paintComponent(g); // suggestion of @kleopatra 
    } 
} 
+0

表示している内容を説明するために追加したコードを変更できますか? –

+0

-1 a)空のpaintComponentオーバーライドb)getGraphics - それは_not_ Swingでカスタムペインティングが行われる方法 – kleopatra

+0

編集の有無、getGraphicsは解決法ではありません。 – kleopatra

0

は、コンテナ(JFrameの)にコンポーネント(JPanelの)を追加します。

public Survival() { 
    setTitle("Survival"); 
    setResizable(false); 
    setSize(applicationWidth, applicationHeight); 

    this.getContentPane().add(new GraphicsDisplay()); 

    setVisible(true); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
} 
+1

"コンビニエンス' add'とその変種として、 'remove'と' setLayout'が転送されるようにオーバーライドされました必要に応じて 'contentPane'に追加します。 " - [' JFrame'](http://docs.oracle.com/javase/7/docs/api/javax/swing/JFrame.html) – trashgod

関連する問題