2014-10-20 30 views
-1

我有一個類Game,它擴展了JFrame並創建了我想要繪製的窗口。然後我有這個類Die,它繪製我想要的。從Game我可以在Die類中調用setup()方法,但是如何調用paint()方法?從不擴展JFrame的類中調用paint方法

public class Die 
{ 
    private int xA, yA;     
    private int dieNumber; 

    public void setup(int someX, int someY, int someValue) { 
     dieNumber = someValue; 
     xA = someX; 
     yA = someY; 
    } 

    public void paint(Graphics pane) { 

     drawBlank(pane);     

     if (dieNumber == 1){   
      drawOne(pane); } 
     else if (dieNumber == 2){ 
      drawTwo(pane); } 
     else if (dieNumber == 3){ 

      ...... 
+3

你剛纔不是問這個?無論如何,您應該嘗試創建併發佈一個我們可以運行和編譯的小程序[最小示例程序或MCVE](http://stackoverflow.com/help/mcve),這會向我們展示您的問題。還有很多相關代碼需要向我們展示 - 但沒有向我們展示太多的代碼,這是MCVE的幫助。你可能在JPanel的'paintComponent(...)'方法中做圖形,如果是,應該調用你的Die對象的paint方法在paintComponent方法中。但是,我只是在瘋狂地猜測。請展示更多。 – 2014-10-20 21:50:09

+0

[Again](http://stackoverflow.com/questions/26472497/java-calling-paint-method-from-different-class)?我[說](http://stackoverflow.com/questions/26474594/java-calling-paint-method-from-window-method-in-another-class)。 – 2014-10-20 21:54:58

+0

@HovercraftFullOfEels我正在做一個JFrame的繪圖(...)。我在描述中提到了它。如果不夠清楚,我很抱歉。但爲什麼我不能從setup()調用paint()? – John 2014-10-20 21:55:25

回答

2

你可能會做你的顯卡在JPanel的protected void paintComponent(Graphics g)方法覆蓋,並且該方法中,呼籲你需要作出任何模具對象die.paint(g)

例如,

class DrawingPanel extends JPanel { 
    private Die die1 = new Die(); 
    private Die die2 = new Die(); 
    //..... 

    @Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     die1.paint(g); 
     die2.paint(g); 

    } 

} 

對於更加具體和詳細的​​幫助,請嘗試創建和發佈minimal example program or MCVE,一個小程序,我們可以運行和編譯,這將告訴我們您的問題。還有很多相關代碼需要向我們展示 - 但沒有向我們展示太多的代碼,這是MCVE的幫助。

也不要在JFrame或Frame的paint方法中做圖形,也不應該使用Frame或AWT組件。在繼續閱讀之前,請閱讀Swing圖形教程。至於爲什麼你不能從設置調用油漆 - 擺動圖形是被動的,不能根據命令調用。你應該照我的建議去做,並且建議繪製管理者通過調用JPanel上的repaint()來完成繪畫。但是,再次,這在教程中解釋,你還沒有閱讀。所以首先,解決這個問題 - 閱讀教程。

擺動教程可以從這個鏈接找到:Swing Info

2

這是一個更爲更好的方法,如果你的芯片擴展JPanel並進行自定義繪製重寫的paintComponent:

public class Die extends JPanel 
{ 
    private int xA, yA;     
    private int dieNumber; 

    public void setup(int someX, int someY, int someValue) { 
     dieNumber = someValue; 
     xA = someX; 
     yA = someY; 
    } 

    @Override 
    public void paintComponent(Graphics pane) { 
     super.painComponent(pane);    

     if (dieNumber == 1){   
      drawOne(pane); } 
     else if (dieNumber == 2){ 
      drawTwo(pane); } 
     else if (dieNumber == 3){ 

     ...... 
    }