2016-04-23 69 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