2016-11-21 2 views
0

Я пытаюсь добавить обработанные экземпляры JPanel в более крупный JPanel в JScrollPane, но я не могу заставить его работать.Динамически добавлять экземпляры JPanel в JScrollPane

Я использую NetBeans для создания контейнера, а затем используя контекстное меню, чтобы включить его в панель прокрутки.

Чтобы добавить JPanel во время выполнения Я делаю это:

ActivityPanel actPanel; 

for(Reservation r: mainFrame.getKiosko().getReservations()) { 
    if(r.getUser().equals(user)) { 
     actPanel = new ActivityPanel(r.getActivity(),mainFrame); 
     actPanel.setHour(r.getHour()); 
     Dimension actDim = new Dimension(600, 100); 
     actPanel.setPreferredSize(actDim); 
     actPanel.setMaximumSize(actDim); 
     actPanel.setMinimumSize(actDim); 

     pnlReservations.add(actPanel);     
    } 
} 

Но это просто не работает. Должен ли я создавать ScrollPanel во время выполнения? Если да, то как мне это сделать?

pnlReservation имеет ось BoxLayout по оси страницы.

+0

Возможно, что-то не так с менеджером компоновки 'pnlReservations'? – Gabriel

ответ

1
actPanel.setPreferredSize(actDim); 

Не пытайтесь вручную управлять предпочтительным размером компонента. Размер панели должен определяться компонентами, которые вы добавляете на панель.

То же самое с вашим pnlReservation, не требуется твердый код предпочтительного размера. Менеджер компоновки определит свой предпочтительный размер на основе предпочтительного размера добавленных к нему компонентов.

Затем полосы прокрутки появятся автоматически, так как предпочтительный размер pnlReservation динамически изменяется при добавлении к нему компонентов.

+0

Это не так. Кроме того, если я не делаю хардкор размера, он изменяется в зависимости от количества элементов панели, и я не хочу этого. – Xhark

+0

@Xhark, Если вы не хотите, чтобы размер изменился, используйте GridLayout. Тогда все компоненты будут одного размера. Поэтому сначала создайте панель с помощью BorderLayout. которые вы добавляете в панель прокрутки. Затем вы создаете вторую панель с GridLayout, в которую вы добавляете все дочерние панели. Затем вы добавляете эту панель в BorderLayout.PAGE_START первой панели. Теперь все панели будут одинакового размера и занимают столько места, сколько необходимо, и полосы прокрутки появятся, когда потребуется. Поставьте правильный [mcve], если вам нужна дополнительная помощь. Потому что мы не можем сказать, что происходит на нескольких строках кода. – camickr

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