2016-01-03 4 views
1

Я пытаюсь динамически нарисовать JPanel (который находится внутри ScrollPane), кучу ярлыков и RadioButtons. Я получаю ArrayList с объектами «Advice», и я хочу перебирать их, чтобы представить их таким образом, что у меня есть ярлык, который их описывает, а затем два переключателя (для выбора «Да» или «Нет»).Добавление компонентов по коду

Но на данный момент, с этим кодом в конструктор JFrame, он не работает должным образом:

// My constructor 
public CoachingFrame(AdvicesManager am) { 
    initComponents(); 
    this.am = am; 

    // I set the layout for the inner panel (since ScrollPane doesn't allow BoxLayout) 
    JPanel panel = new JPanel(); 
    panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); 

    // Iterate over the arraylist 
    for(int i=0;i<am.advices.size();i++){ 

     //Add elements to the panel 
     panel.add(new JLabel(am.advices.get(i).getQuestion())); 
     ButtonGroup group = new ButtonGroup(); 

     // Group the RadioButtons inside another panel, so I can use FlowLayout 
     JPanel buttonsPanel = new JPanel(); 
     buttonsPanel.setLayout(new FlowLayout()); 
     JRadioButton rad1 = new JRadioButton(); 
     JRadioButton rad2 = new JRadioButton(); 
     group.add(rad1); 
     group.add(rad2); 
     buttonsPanel.add(rad1); 
     buttonsPanel.add(rad2); 

     // Add the radiobuttons' panel to the main one, and revalidate 
     panel.add(buttonsPanel); 
     panel.revalidate(); 
    } 
    // Finally, add the panel to the ScrollPane. 
    questions.add(panel); 
} 

Я получаю ArrayList правильно; Я уже проверил это. Кажется, что проблема заключается в окраске компонентов.

Поскольку я всегда использую создателя GUI NetBeans, я не очень привык добавлять компоненты через код. Кто-нибудь может мне помочь? Наверное, я что-то пропустил.

Редактировать: Обратите внимание, что «вопросы» - это объект ScrollPane!

редактировать 2: Это «вопросы» панели должны иметь все эти компоненты окрашены: http://i.imgur.com/tXxROfn.png

+0

попробуйте 'pack()' метод на вашей панели – coolguy

+0

Попробуйте показать нам вашу лучшую попытку [mcve] (пожалуйста, проверьте ссылку). Также размещайте изображения того, что вы видите и чего вы пытаетесь достичь. Это поможет нам лучше понять вашу проблему. –

+0

Я думаю, что теперь более понятно и проще отлаживать – Zerok

ответ

2

Как Kiheru сказал, ScrollPane не допускает представления (как мой JPanel), которые будут добавлены с .Add(), вместо того, Мне пришлось использовать .setViewportView (Component). Теперь он отлично работает, спасибо!

Смежные вопросы