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

How can be components added dynamically in the JDialog?

我正在尝试创建第一张图片中给出的 GUI,但我做不到。here is the image 我只得到一个 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();
    }

我认为是布局问题导致您的 masterPanel 彼此重叠。

所以我会这样做:

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]);
    }

当然您也可以使用其他布局。但我相信你想去 FlowLayout。请参阅有关 FlowLayout here.

的文档

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