2016-08-23 4 views
-5

Я пытаюсь создать графический интерфейс, как показано на первой картинке, но я не могу этого сделать. here is the image Я получаю только один Combo1, combo2, combo3 и serialNoLabel вместо 5 [5, размера списка]Как можно динамически добавлять компоненты в JDialog?

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(); 
    } 
+0

У вас нет макета для вас masterDialog? Также вы можете распечатать экран, что вы получаете? С быстрым взглядом я действительно верю, что это вопрос макета. – LBes

+0

Когда вы добавляете одну из masterPanels в masterDialog, вы добавляете ее в центр BorderLayout. Вы эффективно накладываете свои мастер-панели, так что только один показывает. Вам нужно иметь mainPanel (JPanel) с FlowLayout. Вы должны добавить masterPanels к mainPanel и, наконец, добавить mainPanel в masterDialog. –

+0

@LBes Я использую MigLayout для masterDialog. –

ответ

3

Я считаю, что это вопрос расположения ведущим свое masterPanels быть друг на друг.

Так что я хотел бы сделать что-то вроде этого:

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. См. Документацию о FlowLayouthere.

Вы можете узнать больше о других раскладках here

+0

Это сработало Спасибо за помощь, очень ценю это .... –

+0

@ VarshalDavda конечно! – LBes

+0

Не могли бы вы рассказать мне, как я могу добавить слушателей действий к этим спискам? Спасибо –