Java 如何在JDialog中动态添加组件?

Java 如何在JDialog中动态添加组件?,java,swing,jcombobox,jdialog,Java,Swing,Jcombobox,Jdialog,我正在尝试创建第一张图片中给出的GUI,但我无法做到这一点。 我只得到一个combo1、combo2、combo3和serialNoLabel,而不是5[5是列表的大小] ArrayList<String> list; // the size of the list is 5 JComboBox combo1[] = new JComboBox[list.size()]; JComboBox combo2[] = new JComboBox[list.size

我正在尝试创建第一张图片中给出的GUI,但我无法做到这一点。 我只得到一个combo1、combo2、combo3和serialNoLabel,而不是5[5是列表的大小]

    ArrayList<String> list; // the size of the list is 5
    JComboBox combo1[] = new JComboBox[list.size()];
    JComboBox combo2[] = new JComboBox[list.size()];
    JComboBox combo3[] = new JComboBox[list.size()];
    JLabel SerialNoLabel[] = new JLabel[list.size()];
    JPanel masterPanel[] = new JPanel[list.size()];

    JDialog masterDialog =  new JDialog();
    masterDialog.setVisible(true);
    masterDialog.setSize(800, 500);
    masterDialog.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
    masterDialog.setVisible(true);
    for(int j =0; j < list.size(); j++) {
        masterPanel[j] = new JPanel();
        SerialNoLabel[j] = new JLabel(list.get(j));
        masterPanel[j].add(SerialNoLabel[j]);
        combo1[j] = new JComboBox();
        masterPanel[j].add(combo1[j]);
        combo2[j] = new JComboBox();
        masterPanel[j].add(combo2[j]);
        combo3[j] = new JComboBox();
        masterPanel[j].add(combo3[j]);
        masterDialog.add(masterPanel[j]);
        masterDialog.revalidate();
    }
ArrayList列表;//列表的大小是5
JComboBox combo1[]=新的JComboBox[list.size()];
JComboBox combo2[]=新的JComboBox[list.size()];
JComboBox combo3[]=新的JComboBox[list.size()];
JLabel SerialNoLabel[]=新的JLabel[list.size()];
JPanel主面板[]=新的JPanel[list.size()];
JDialog masterDialog=新建JDialog();
masterDialog.setVisible(true);
masterDialog.setSize(800500);
masterDialog.setDefaultCloseOperation(JFrame.DO\u NOTHING\u ON\u CLOSE);
masterDialog.setVisible(true);
对于(int j=0;j
我认为这是一个布局问题,会导致主面板相互重叠

所以我会这样做:

JPanel mainPanel = new JPanel();
FlowLayout experimentLayout = new FlowLayout();
mainPanel.setLayout(experimentLayout);
for(int j =0; j < list.size(); j++) {
        masterPanel[j] = new JPanel();
        SerialNoLabel[j] = new JLabel(list.get(j));
        masterPanel[j].add(SerialNoLabel[j]);
        combo1[j] = new JComboBox();
        masterPanel[j].add(combo1[j]);
        combo2[j] = new JComboBox();
        masterPanel[j].add(combo2[j]);
        combo3[j] = new JComboBox();
        mainPanel.add(masterPanel[j]);
    }
JPanel主面板=新的JPanel();
FlowLayout=新的FlowLayout();
主面板设置布局(实验布局);
对于(int j=0;j
当然,您也可以选择其他布局。但是我相信你想要一个
FlowLayout
。请参阅有关
FlowLayout
的文档


您可以了解更多关于其他布局的信息

您没有适合自己的布局吗?你也能把你得到的打印出来吗?快速看一下,我真的相信这是一个布局问题。当你将一个主面板添加到masterDialog时,你将它添加到BorderLayout的中心。你正在有效地覆盖你的主面板,所以只有一个显示。您需要一个带有FlowLayout的主面板(JPanel)。您可以将主面板添加到主面板,最后将主面板添加到主对话框。@LBes我正在使用MigLayout for masterDialog。@GilbertLeBlanc您能简单地解释一下吗。。。我不熟悉swingI,但我没有使用MigLayout。我根据你的小代码片段做了一个假设。在您的问题中放置一个自包含(不要使用miglayet)的、可运行的问题示例,我会修复它,以便它在您的图形中生成GUI。@VarshalDavda当然!你能告诉我,我怎样才能把动作监听器添加到这个组合框中?Thanks@VarshalDavda这是一个完全不同的问题。在网上查一下,看看你是否能弄明白。如果没有,在这里再问一个问题。@VarshalDavda没问题。