2011-12-15 68 views
1

我有一個叫做survival的類,它包含main方法,初始化程序。與其將圖形的代碼放入這個類中,我怎樣才能將它移動到與生存分離的新類中?在主類之外使用Java的2D圖形

這裏是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 2011-12-15 02:30:53

+0

要小心:如果面板報告自己是不透明的(如默認情況下那樣),則paintComponent無效 – kleopatra 2011-12-15 12:39:54

回答

3

好像你可以add()Survival構造函數的GraphicsDisplay實例。

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

在這種情況下,GraphicsDisplay作爲你的隱式的,圓形模型視圖。你可以看看example如何分離Model–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

您可以修改我添加的代碼來描述您顯示的內容嗎? – 2011-12-15 05:12:35

0

構造函數中的成分(JPanel中)加入到容器(JFrame中):

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

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

    setVisible(true); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
}