2016-11-21 15 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を持つ2番目のパネルを作成します。次に、このパネルを最初のパネルのBorderLayout.PAGE_STARTに追加します。これで、すべてのパネルが同じサイズになり、必要に応じて多くのスペースを占有し、必要に応じてスクロールバーが表示されます。あなたがもっと助けが必要な場合は、適切な[mcve]を投稿してください。数行のコードに基づいて何が起こっているのかわからないからです。 – camickr