将Java JPanel动态添加到Java中的另一个JPanel Swing

问题描述:

我对Java swing很新颖,java也是如此。我使用netbeans的窗口构建器来设计GUI。我有一个名为orderListPanel的JPanel,它包含一个名为orderListRowPanel的JPanel。现在,我得到了一个JPanel列表,并且我想将这些JPanels插入到orderListPanel中。将Java JPanel动态添加到Java中的另一个JPanel Swing

http://postimage.org/image/ex00whf69/
orderListPanel是在中间,orderListRowPanel是一样的地方像orderListPanel

http://postimage.org/image/dbrtn33sj/
现在我想插入许多JPanels到orderListPanel,使它看起来像一个列表。红色正方形是JPanel侧面的组件。

我尝试使用BorderLayout,当我使用 foreach循环orderListPanel.add(List pList)时,我看不到orderListPanel中的任何结果。有人知道如何解决它吗?

请勿使用Netbeans自动GUI构建器。在Java社区中拖放GUI构建技术是不可接受的。您尚未提供代码,因此我们无法进行代码编辑。您的图片不可用。

但是,这是你如何做到的。这是一个纯手工代码

import java.awt.*; 
import java.util.ArrayList; 
import javax.swing.*; 
import java.util.List; 

public class GUIBuilder extends JFrame 
{ 
    private JPanel orderList; 
    private JPanel orderListRow; 
    private JPanel additionalPanel; 

    private List panels = new ArrayList(); //Your List 

    private JLabel label1, label2, label3; 

    public GUIBuilder() 
    { 
     label1 = new JLabel("Label 1"); //Create the JLabels 
     label2 = new JLabel("Label 2");//Create the JLabels 
     label3 = new JLabel("Label 3");//Create the JLabels 


     orderList = new JPanel(); //Creating the orderList JPanel 
     orderList.setLayout(new BoxLayout(orderList, BoxLayout.Y_AXIS)); //Setting Box layout, and set the direction to Y axis. 


     orderListRow = new JPanel(); //Creating the orderListRow JPanel   
     orderListRow.add(label1); 

     additionalPanel = new JPanel(); //Creating the additionalPanel JPanel  
     additionalPanel.add(label2); 

     orderList.add(orderListRow); //Adding orderListRow into orderList 
     orderList.add(additionalPanel); //Adding additionalPanel into orderList 

     this.setLayout(new GridLayout(1,1)); 
     this.add(orderList); //Setting orderList into JFrame 

     this.pack(); //Setting JFrame size. This will only take required space 
     this.setVisible(true); //Making JFrame Visible 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //When you hit the 'X' button, the program will exit 
    } 

    public static void main(String[]args) 
    { 
     try 
     { 
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); //Setting the UI into your native platform UI 
      new GUIBuilder(); //Calling your program 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); //If any error occured in setting up UI, print the stack trace 
     } 
    } 
} 

如果你有一个列表里面的面板,然后用这个

import java.awt.*; 
import java.util.ArrayList; 
import javax.swing.*; 
import java.util.List; 

public class GUIBuilder extends JFrame 
{ 
    private JPanel orderList; 
    private JPanel orderListRow; 
    private JPanel additionalPanel; 

    private List<JPanel> panels = new ArrayList<JPanel>(); //Your List 

    private JLabel label1, label2, label3; 

    public GUIBuilder() 
    { 
     label1 = new JLabel("Label 1"); //Create the JLabels 
     label2 = new JLabel("Label 2");//Create the JLabels 
     label3 = new JLabel("Label 3");//Create the JLabels 


     orderList = new JPanel(); //Creating the orderList JPanel 
     orderList.setLayout(new BoxLayout(orderList, BoxLayout.Y_AXIS)); //Setting Box layout, and set the direction to Y axis. 


     orderListRow = new JPanel(); //Creating the orderListRow JPanel   
     orderListRow.add(label1); 
     panels.add(orderListRow); // Add the panel to the List 

     additionalPanel = new JPanel(); //Creating the additionalPanel JPanel  
     additionalPanel.add(label2); 
     panels.add(additionalPanel); // Add the panel to the List 


     for(int i=0;i<panels.size();i++) 
     { 
      orderList.add(panels.get(i)); 
     } 



     this.setLayout(new GridLayout(1,1)); 
     this.add(orderList); //Setting orderList into JFrame 

     this.pack(); //Setting JFrame size. This will only take required space 
     this.setVisible(true); //Making JFrame Visible 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //When you hit the 'X' button, the program will exit 
    } 

    public static void main(String[]args) 
    { 
     try 
     { 
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); //Setting the UI into your native platform UI 
      new GUIBuilder(); //Calling your program 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); //If any error occured in setting up UI, print the stack trace 
     } 
    } 
} 
+0

真的谢谢!!得多将布局设置为BoxLayout之后,它的效果非常好。我真的很感激。我将开始学习swing的基础,而不是使用windows builder。 – user2117945 2013-03-02 00:36:57

+0

@ user2117945:不客气。如果我的回答对您有帮助,请点击我问题左侧的“右侧”标记,将其标记为答案:) – 2013-03-02 04:37:37

+0

为什么不使用netbeans编辑器? – claudio495h 2015-02-19 20:02:40