2013-10-22 23 views
1

有人會知道爲什麼我的類PF的函數paintComponent未被調用?內部類的paintComponent未調用

public class Fenetre 
{ 

    private JFrame jframe; 

    public Fenetre() 
    { 
     jframe = new JFrame(" works"); 
     jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     jframe.setLayout(new BorderLayout()); 
     jframe.setLocationRelativeTo(null); 
     jframe.setContentPane(new P()); 
     jframe.pack(); 
     jframe.setVisible(true); 
    } 

    public class P extends JComponent 
    { 
     public P() 
     { 
      this.setPreferredSize(new Dimension(WI,HI)); 
      this.add(new PF()); 
     } 

     public class PA extends JComponent 
     { 
      @Override protected void paintComponent(Graphics g) { 

       DrawX(g); 
       DrawY(g); 
      } 

      public void DrawX(Graphics g) 
      { 
       \* .. */ 
      } 

      public void DrawY(Graphics g) 
      { 
       \* ..*/ 
      } 

     } 

     public class PF extends PA 
     { 

      @Override protected void paintComponent(Graphics g) { 
       super.paintComponent(g); 
       drawS(g); 
       drawT(g); 
      } 

      public void drawS(Graphics g) 
      { \* .. */ 
      } 

      public void drawT(Graphics g) 
      { 
       \* ... */ 
      } 

     } 

它的工作原理,當我在PF構造函數設置的setSize功能,但有必要對setPreferredSize工作太多,但不允許類PF是可調整大小,如果我調整我的JFrame中,PF抽籤不調整是說..

希望有人能幫助我,謝謝。

回答

3

的可能的問題可能與事實PAPF沒有首選大小(默認爲爲0x0)和JComponent在默認情況下沒有佈局管理器

塗料子系統的事實做已經確定子組件不需要被繪,因爲它們在技術上是不可見的在屏幕上

首先通過設置P的佈局管理器並覆蓋的getPreferredSize方法。

當你重寫你的方法時,總是呼叫super.paintComponent是非常重要的。當你處理像JComponent這樣的透明組件時,這是非常重要的,因爲這會引入非常討厭的油漆文物,如果你不是

+0

謝謝你的回答。它真的幫助我! 所以現在我畫PA,很好,但是在節目的午餐時間裏,jframe的尺寸很小..但是調整大小效果很好 – Choubidou

+1

包裝應該嘗試並遵守內容的首選尺寸.. 。 – MadProgrammer