2016-04-23 67 views
3

我想實現下面的佈局。邊框佈局不按預期工作

enter image description here

有6個板。頂部的4個按鈕是一個面板,圖像右側的3個按鈕也位於一個面板中。除了這兩個邊界之外,還有另外4個小組。我嘗試了下面的代碼,但以分散的方式顯示所有內容。

mainPanel.add(topToolBarPanel,BorderLayout.PAGE_START); 
mainPanel.add(lefsideToolBarPanel,BorderLayout.LINE_START); 
mainPanel.add(descriptionPanel,BorderLayout.LEFT); 
mainPanel.add(mapPanel,BorderLayout.CENTER); 
mainPanel.add(propertiesPanel,BorderLayout.EAST); 
mainPanel.add(tablePanel,BorderLayout.PAGE_END); 

如何才能達到圖像所示的設計?我需要將所有面板安排在該主面板內。我不能使用null佈局。請指教。

trashgod的回答後:

JPanel gridPanel = new JPanel(new GridLayout(1, 0)); 
    gridPanel.add(jInternalFrame1); 
    gridPanel.add(descriptionPanel); 
    mainPanel.add(gridPanel, BorderLayout.LINE_START); 
    mainPanel.add(topToolBarPanel,BorderLayout.PAGE_START); 
    mainPanel.add(tablePanel,BorderLayout.PAGE_END); 
    mainPanel.add(mapPanel,BorderLayout.CENTER); 
    mainPanel.add(PropertiesPanel,BorderLayout.LINE_END); 

我能得到什麼:

enter image description here

+0

無論將地圖面板包裹在另一個面板上,將左邊的描述面板留下,或者使用填充整個框架的網格面板 – ScriptKiddy

+0

時,您可以放置​​2件東西左邊(東)。網格窗格不這樣安排它 – mayooran

+0

你不明白... – ScriptKiddy

回答

4

添加lefsideToolBarPaneldescriptionPanel具有GridLayout面板;將新面板添加到BorderLayout

Panel p new Panel(new GridLayout(1, 0)); 
p.add(lefsideToolBarPanel); 
p.add(descriptionPanel); 
//mainPanel.add(lefsideToolBarPanel, BorderLayout.LINE_START); 
//mainPanel.add(descriptionPanel, BorderLayout.LEFT); 
mainPanel.add(p, BorderLayout.LINE_START); 

沒有BorderLayout.LEFT。另請參閱A Visual Guide to Layout Managers

附錄:您更新的問題顯示topToolBarPanel的元素,應將其添加到PAGE_START而不是LINE_START

//mainPanel.add(topToolBarPanel,BorderLayout.LINE_START); 
mainPanel.add(topToolBarPanel,BorderLayout. PAGE_START); 

image

propertiesPanel和的tablePanel需要高度的寬度必須增加。我用setSize() ...

對於propertiesPanel,可以覆蓋getPreferredSize(),所討論的here。對於tablePanel,覆蓋getPreferredScrollableViewportSize()可自定義表格的封閉尺寸JScrollPane,對於example

+0

它不起作用。我用我試過的代碼編輯了問題,正如你所建議的那樣,輸出結果是:( – mayooran

+0

我已經編輯了這個問題,這一次它的結束,但仍然不是正確的設計。: – mayooran

+0

'GridLayout(3,0 )'意味着_three_行和儘可能多的列;''GridLayout(1,0)'意味着「_one_行和儘可能多的列。」請參閱[嵌套佈局](http://stackoverflow.com/a/) 5630271/230513) – trashgod

0

我建議使用JLabel作爲您的「佈局」,使用setBounds(x,y,寬度,高度)對象的精確定位。這將類似於此:

JButton button = new JButton("Text or Image"); 
JLabel backgr = new JLabel(); 
JFrame frame = new JFrame("JLabel as Layout"); 

button.setBounds(100, 200, 340, 40); 

backgr.add(button); 

frame.add(backgr); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
frame.setSize(600, 600); 
frame.setLocation(40, 40); 
frame.validate(); 
frame.setVisible(true); 

我知道,這是隻爲你一個簡單的例子,但我認爲它應該做的解釋...所以只需添加一切在backgr JLabeland你的好走。 Quick and dirty example but the a way to go

+0

請不要宣傳空佈局。 – trashgod