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