2016-11-21 91 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