2016-08-04 6 views
1

私は現在、データベースシステム用のGUIのウィンドウで作業しています。私は同じJFrameにJScrollPaneとJPanelの両方を持つようにしています。私は基本的に、ユーザーがデータをスクロールできる部分と、ソートを変更するボタンがあるところでスクロールしないボトムの部分を必要とします。現在、ウィンドウを開こうとすると、JPanelだけが表示されます。 JPanelが追加された部分をコメントアウトすると、JScrollPaneがうまく動作するため、JScrollPane自体が動作することが分かります。ここJPanelとJScrollingPaneの両方をJFrameに追加する

public class ViewWindow 
{ 
    DataContainer data; 
    JFrame viewWin; 
    DaysUntil days; 
    JPanel contentPane; 
    JScrollPane scroll; 
    EmptyBorder border; 
    DateFormat dateformat; 
    Integer[] map; 
    SortTest sor; 
    JButton dayUntil, index, name; 

    public ViewWindow(DataContainer da) 
    { 
     data= da; 
     days= new DaysUntil(); 
     sor= new SortTest(data,days); 
     viewWin= createWindow(); 
     JScrollPane main= createMainPanel(); 
     JPanel sortPane= createSortPanel(); 
     viewWin.getContentPane().add(main); 
     viewWin.getContentPane().add(sortPane); 
     viewWin.pack(); 
     viewWin.setVisible(false); 

    } 

createMainPanelのコード(の一部)

public JScrollPane createMainPanel() 
    { 
     DateFormat dateformat =new SimpleDateFormat("MM/dd/yy"); 
     border = new EmptyBorder(10,20,10,20); 
     JPanel mainPane= new JPanel(); 
     mainPane.setLayout(new BoxLayout(mainPane, BoxLayout.Y_AXIS)); 

     JPanel titlePane= new JPanel(); 
     titlePane.setLayout(new BoxLayout(titlePane, BoxLayout.Y_AXIS)); 

     contentPane= new JPanel(); 
     contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.X_AXIS)); 

     JPanel indexPane= new JPanel(); 
     indexPane.setLayout(new BoxLayout(indexPane, BoxLayout.Y_AXIS)); 
     JLabel indexTitle= new JLabel("index"); 
     indexTitle.setBorder(border); 
     indexPane.add(indexTitle); 

     ..... 
     mainPane.add(titlePane); 
    mainPane.add(contentPane); 
    JScrollPane mainn= new JScrollPane(mainPane, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); 
    return mainn; 
} 

JPanelのは以下の通りである:

public JPanel createSortPanel() 
    { 
     JPanel sortPanel = new JPanel(); 
     sortPanel.setLayout(new BoxLayout(sortPanel, BoxLayout.X_AXIS)); 

     dayUntil= new JButton("Sort by Due Date"); 
     index= new JButton("Sort by index"); 
     name= new JButton("Sort by name"); 
     sortPanel.add(dayUntil); 
     sortPanel.add(index); 
     sortPanel.add(name); 
     return sortPanel; 
    } 

誰もそれが非常に高く評価されることができます。

答えて

2

JFameのデフォルトのレイアウトは、この要件をサポートしてBorderLayoutです:

基本的なロジックは次のとおりです。

frame.add(scrollPane, BorderLayout.CENTER) 
frame.add(anotherPanel, BorderLayout.PAGE_END); 

は、より良い助けにあなたを作業例についてLayout Manager上のSwingのチュートリアルからセクションを読みますBorderLayoutの仕組みを理解してください。

+0

デフォルトのレイアウトをボックスレイアウトのように切り替えると機能しますか? –

+0

@ J.Shupperd、あなたは何でもできますが、あなたが描いている要件については、フレームレイアウトのコンテンツペインのレイアウトをデフォルトのBorderLayoutから変更する必要がないことを強く示唆しています。 BorderLayoutは、BoxLayoutよりもフレームのサイズ変更を処理する方が効果的です。子パネルで異なるレイアウトマネージャを使用することができます。チュートリアルを読んで、サンプルをダウンロードして遊んで、それぞれのレイアウトの仕組みを理解してください。 – camickr

+0

@ J.ShupperdはCamickrの答えを少し拡張します:BorderLayoutでは、JFrameが両方向に伸びるように中央のペインが伸びます。 'page_end' 'ペイン'は水平方向にのみ伸びます。これは通常、求められるものであり、あなたが記述しているものと一致します。さまざまなレイアウトマネージャーで遊ぶことは良い考えです。 – arcy

関連する問題