2013-07-17 42 views
1

我想繪製由.form創建的子面板。有一個「mainPanel」,它包含三個名爲panel1(top),panel2(bottom-left)和panel3(bottom-right)的子面板。如何繪製由.form創建的子面板?

現在我想在subPanel「panel1」上畫一些東西,但它不起作用。當我運行該程序時,它只顯示三個子面板,但沒有繪製「paintComponent()」方法。

我粘貼我的代碼在這裏,任何人都可以幫助我檢查是什麼問題?非常感謝。

public class PanelDrawTest extends JFrame { 
    private JPanel mainPanel; 
    private JPanel panel1; 
    private JPanel panel2; 
    private JPanel panel3; 

    public PanelDrawTest(){ 
     getContentPane().add(mainPanel); 
     setPanel1(new MyPanel1()); 
    } 

    public JPanel getMainPanel() { 
     return mainPanel; 
    } 

    public JPanel getPanel1() { 
     return panel1; 
    } 

    public void setPanel1(JPanel panel1) { 
     this.panel1 = panel1; 

    } 

    private class MyPanel1 extends JPanel { 

     public MyPanel1(){ 

     } 
     @Override 
     public void paintComponent(Graphics g){ 
      g.drawString("This is Panel 1",20,20); 
      g.drawRect(0,200,100,200); 

     } 
    } 

    public static void main(String args[]){ 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       createAndShowGUI(); 
      } 
     }); 
    } 

    private static void createAndShowGUI() { 
     PanelDrawTest frame = new PanelDrawTest(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setBounds(50, 50, 1200, 700); 
     frame.setPreferredSize(new Dimension(1200,800)); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

} 
+0

當「的mainPanel」開始時,我的問題仍然是開放的。因爲我在GUI設計中通過.Form構建了帶有子面板的mainPanel。但是,我不知道如何在不同的子面板中繪製圖形。這個例子有助於(http://stackoverflow.com/questions/8661973/drawing-inside-multiple-jpanels?rq=1),但subPanels是在代碼中構建的,而不是在.form中。我認爲我的問題應該是如何調用GUI .form設計中構建的子面板。 – luluValley

回答

1

注意:代碼發佈會拋出NullPointerException,因爲mainPanel從未初始化。

構造函數不會將您的自定義面板添加到佈局,這就是爲什麼它不能被看到。 試試這個,你會看到你的圖紙:

public PanelDrawTest() { 
    mainPanel = new JPanel(); 
    getContentPane().add(mainPanel,BorderLayout.NORTH); 
    panel1 = new MyPanel1(); 
    getContentPane().add(panel1,BorderLayout.CENTER);  
} 
+0

感謝您的回覆。但是,在此更新中,panel1似乎覆蓋了mainPanel(即,僅顯示panel1)。我怎麼能看到兩個面板?或者我如何繪製和顯示幾個子面板?謝謝。 – luluValley

+0

您可以使用IDE來幫助您繪製佈局,這是我認爲如果您有.form文件時您正在做的事情。 Netbeans有一個很好的視覺搖擺編輯器。如果你像上面那樣用直接代碼來完成,你需要使用佈局。 BorderLayout允許您將組件放置在框架或面板的NORTH,SOUTH,CENTER,EAST,WEST位置。 – Thorn

1

你的版本是不可運行的我,但這個工程:

public class PanelDrawTest extends JFrame { 
    private JPanel mainPanel = new JPanel(); // I added a constructor to avoid NullPointerexception 
    private JPanel panel1; 
    private JPanel panel2; 
    private JPanel panel3; 

    public PanelDrawTest(){ 
    getContentPane().add(mainPanel); 
    setPanel1(new MyPanel1()); 
    add(panel1); // and I added the panel 
    } 

    public JPanel getMainPanel() { 
    return mainPanel; 
    } 

    public JPanel getPanel1() { 
    return panel1; 
    } 

    public void setPanel1(JPanel panel1) { 
    this.panel1 = panel1; 

    } 

    private class MyPanel1 extends JPanel { 

    public MyPanel1(){ 

    } 
    @Override 
    public void paintComponent(Graphics g){ 
     g.drawString("This is Panel 1",20,20); 
     g.drawRect(0,200,100,200); 

    } 
    } 

    public static void main(String args[]){ 
    SwingUtilities.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
     createAndShowGUI(); 
     } 
    }); 
    } 

    private static void createAndShowGUI() { 
    PanelDrawTest frame = new PanelDrawTest(); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setBounds(50, 50, 1200, 700); 
    frame.setPreferredSize(new Dimension(1200,800)); 
    frame.pack(); 
    frame.setVisible(true); 
    } 
}