2016-08-17 25 views
0

我試圖學習Java和我現在遇到了Jpanels,因爲我使用Netbeans,我可以使用他們的「構造函數」,我可以在我的框架內設計我想要的面板。Java Netbeans - 如何在Jpanel中使用Jpanel? (面板的構造函數)

與NetBeans我做我的面板內的面板上,現在我不知道:

我如何繪製面板的內部面板上?

(我要畫上的面板是EvoPanel)

This is my current design

深灰色框面板內的第二板,如果我嘗試從左上角畫一條線右下方我結束了this

我的代碼:

Vindue.java

package vindue; 
import javax.swing.*; 

/** 
* 
* @author BE56df 
*/ 
public class Vindue { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     // TODO code application logic here 

     paneler panel = new paneler(); 

     JFrame vindue = new JFrame("NEZ - Evolution Simulator v0.1"); 
     vindue.add(panel); 

     vindue.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 

     vindue.setResizable(false); 
     vindue.pack(); 
     vindue.setVisible(true); 

    } 

} 

Paneler.java

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

/** 
* 
* @author BE56df 
*/ 
public class paneler extends javax.swing.JPanel { 

    /** 
    * Creates new form paneler 
    */ 
    public paneler() { 
     initComponents(); 
    } 

    public void paintComponent(Graphics g){ 

     super.paintComponent(g); 

     g.drawLine(0, 0, 750, 550); 

    } 

    /** 
    * This method is called from within the constructor to initialize the form. 
    * WARNING: Do NOT modify this code. The content of this method is always 
    * regenerated by the Form Editor. 
    */ 
    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code">       
    private void initComponents() { 

     EvoPanel = new javax.swing.JPanel(); 
     jLabel1 = new javax.swing.JLabel(); 
     jSeparator1 = new javax.swing.JSeparator(); 
     jToggleButton1 = new javax.swing.JToggleButton(); 

     setMaximumSize(new java.awt.Dimension(750, 550)); 
     setMinimumSize(new java.awt.Dimension(750, 550)); 
     setPreferredSize(new java.awt.Dimension(750, 550)); 

     EvoPanel.setBackground(new java.awt.Color(200, 200, 200)); 
     EvoPanel.setMaximumSize(new java.awt.Dimension(550, 550)); 
     EvoPanel.setMinimumSize(new java.awt.Dimension(550, 550)); 

     javax.swing.GroupLayout EvoPanelLayout = new javax.swing.GroupLayout(EvoPanel); 
     EvoPanel.setLayout(EvoPanelLayout); 
     EvoPanelLayout.setHorizontalGroup(
      EvoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGap(0, 550, Short.MAX_VALUE) 
     ); 
     EvoPanelLayout.setVerticalGroup(
      EvoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGap(0, 550, Short.MAX_VALUE) 
     ); 

     jLabel1.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N 
     jLabel1.setText("Control panel"); 
     jLabel1.setVerticalAlignment(javax.swing.SwingConstants.BOTTOM); 
     jLabel1.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); 

     jToggleButton1.setText("Auto play"); 

     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); 
     this.setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addComponent(EvoPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) 
        .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() 
         .addGap(63, 63, 63) 
         .addComponent(jLabel1) 
         .addGap(0, 58, Short.MAX_VALUE)) 
        .addGroup(layout.createSequentialGroup() 
         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) 
          .addComponent(jSeparator1, javax.swing.GroupLayout.DEFAULT_SIZE, 190, Short.MAX_VALUE) 
          .addComponent(jToggleButton1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) 
       .addContainerGap()) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addComponent(EvoPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addGroup(layout.createSequentialGroup() 
       .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
       .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
       .addComponent(jToggleButton1)) 
     ); 
    }// </editor-fold>       


    // Variables declaration - do not modify      
    private javax.swing.JPanel EvoPanel; 
    private javax.swing.JLabel jLabel1; 
    private javax.swing.JSeparator jSeparator1; 
    private javax.swing.JToggleButton jToggleButton1; 
    // End of variables declaration     
} 
+1

可能的重複:[JPanels在JPanel](http://stackoverflow.com/questions/18202415/jpanels-in-jpanel) – DimaSan

+0

它似乎是合理的,但在我的情況下,我用Netbeans來設計從我可以佈局理解,他做了一切代碼,並添加代碼中的每個組件:) – user2984101

+1

爲什麼不在'EvoPanel'而不是'Paneler'中重寫'paintComponent()'? – trashgod

回答

1

顯然你畫的主要的JFrame(paneler面板)當你真的要畫上EvoPanel行了。您應該創建一個EvoPanel類(使用paintComponent方法)並在paneler#initComponents之後添加。

public paneler() { 
    initComponents(); 
    EvoPanel evoPanel = new EvoPanel(); 
    add(evoPanel) // properly in a layout 
} 

建議:簡單的GUI的不使用Mantisse(Netbeans的GUI Builder工具),它不會給你任何好處。

+0

感謝您的回答,請嘗試看看更新後的問題:) – user2984101

+0

@ user2984101 EvoPanel應該擴展'JPanel'而不是'paneler',這會產生一個無限循環,並且會得到'StackOverflowError'。 – PeterMmm