我想实现以下布局。
有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);
如何实现图像中所示的设计?我需要将所有面板安排在mainPanel内。我不能使用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);
我得到了什么:
答案 0 :(得分:4)
将lefsideToolBarPanel
和descriptionPanel
添加到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);
需要增加
propertiesPanel
的宽度和tablePanel
的高度。我使用了setSize()
...
对于propertiesPanel
,您可以覆盖getPreferredSize()
,如所讨论的here。对于tablePanel
,覆盖getPreferredScrollableViewportSize()
以自定义example封闭JScrollPane
的表格的大小。
答案 1 :(得分:0)
我建议使用 JLabel 作为“布局”,以使用setBounds(x,y,width,height)精确定位yout对象。它看起来与此类似:
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);
我知道这只是一个快速的例子,但我认为它应该用于解释......所以只需在背景 JLabeland上添加所有内容即可。{{3} }。