无用的布局管理器人又回来了,我似乎无法理解这些布局,让它们以我想要的方式工作。
无论如何,我想要一个JFrame,顶部有一个大面板(我称之为标题),它从框架北部框架的左侧到右侧,然后是它下方的四个面板,两个位于标题下方,两个位于标题之下,最后是一个“页脚”面板,与标题面板基本相同,仅在框架的南部。
像这样:
我有四个中间面板工作正常的代码,但是标题面板搞砸了所有内容,我已经测试了GridBagLayout,GridLayout和BoxLayout的演示布局管理器代码。我无法按照自己的意愿去工作。
为了在这里了解你,你可能会注意到我已经有一个与此相关的问题,如果不允许有两个类似的问题,请告诉我,我会将此移至我之前的问题,这可以关闭。
public Shop() {
shopUI = new JFrame("Shop Menu");
shopUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
shopUI.setBounds(100, 100, 700, 500);
shopUI.setResizable(false);
allPanels = new JPanel();
headerPanel = new JPanel();
headerPanel.setLayout(new BorderLayout());
headerPanel.setBackground(Color.cyan);
mainPanel = new JPanel();
mainPanel.setLayout(new GridLayout(2,2));
topLeft = new JPanel();
topLeft.setBackground(Color.pink);
topRight = new JPanel();
topRight.setBackground(Color.black);
bottomLeft = new JPanel();
bottomLeft.setBackground(Color.green);
bottomRight = new JPanel();
bottomRight.setBackground(Color.blue);
footerPanel = new JPanel();
footerPanel.setLayout(new BorderLayout());
footerPanel.setBackground(Color.magenta);
mainPanel.add(topLeft);
mainPanel.add(topRight);
mainPanel.add(bottomLeft);
mainPanel.add(bottomRight);
allPanels.add(headerPanel, BorderLayout.NORTH);
allPanels.add(footerPanel, BorderLayout.SOUTH);
allPanels.add(mainPanel);
shopUI.add(allPanels);
shopUI.setVisible(true);
}
答案 0 :(得分:3)
我建议学习边框布局。
根据需要,将标题放在边框面板的NORTH中,将页脚放在SOUTH中。你如何做其他面板取决于你想要他们做什么;如果你总是希望它们彼此相同,你可以使用gridlayout;如果没有,您可以使用boxlayout水平放置两对或垂直放置两对,同样取决于您在框架调整大小时要执行的操作。
我认为通过首先决定你想要发生什么来简化使用布局管理器,包括调整帧大小时会发生什么。这无论如何都是布局的重要组成部分 - 什么是拉伸,什么排列等等。
反正。你有什么看起来像经典BorderLayout给我。如果您需要进一步的帮助,请告诉我们。顺便说一句,BorderLayout是JFrame的默认值...
...编辑
当你在面板中添加某些内容时,这会变得更有趣......
package simpleborderlayout;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Main
{
public static void main(String[] args)
{
Main main = new Main(args);
main.go();
}
public Main(String ... args)
{}
public void go()
{
JPanel headerPanel = getPanel(Color.RED);
JPanel footerPanel = getPanel(Color.BLUE);
JPanel p1 = getPanel(Color.GRAY);
JPanel p2 = getPanel(Color.GRAY);
JPanel p3 = getPanel(Color.GRAY);
JPanel p4 = getPanel(Color.GRAY);
GridLayout gridLayout = new GridLayout(2,2);
JPanel middlePanel = new JPanel(gridLayout);
middlePanel.add(p1);
middlePanel.add(p2);
middlePanel.add(p3);
middlePanel.add(p4);
JFrame mainFrame = new JFrame();
mainFrame.add(headerPanel, BorderLayout.NORTH);
mainFrame.add(middlePanel, BorderLayout.CENTER);
mainFrame.add(footerPanel, BorderLayout.SOUTH);
mainFrame.pack();
mainFrame.setVisible(true);
}
private JPanel getPanel(Color c)
{
JPanel result = new JPanel();
result.setBorder(BorderFactory.createLineBorder(c));
return result;
}
}