Java:在框架中间显示BoxLayout面板

时间:2015-10-02 08:29:56

标签: java swing jframe jpanel boxlayout

我最近开始使用Java,我不太确定如何将BoxedLayout面板放在我的`JFrame中间。目前,我有以下内容:

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

JLabel quizLabel = new JLabel("Java Quiz",SwingConstants.CENTER);
quizLabel.setForeground(Color.BLUE);
quizLabel.setFont(new Font("Arial", Font.BOLD, 20));
quizLabel.setOpaque(true);
panel.add(quizLabel);

JLabel newLineLabel = new JLabel(" ",SwingConstants.CENTER);
newLineLabel.setOpaque(true);
panel.add(newLineLabel);

JLabel createdByLabel = new JLabel("Created By",SwingConstants.CENTER);
createdByLabel.setOpaque(true);
panel.add(createdByLabel);

JLabel nameLabel = new JLabel("XXX",SwingConstants.CENTER);
nameLabel.setOpaque(true);
panel.add(nameLabel);

contentPane.add(panel, BorderLayout.CENTER);

contentPane取自我的框架。这给了我以下输出:

enter image description here

我希望面板内的三个标签出现在Frame的中间。

2 个答案:

答案 0 :(得分:1)

因为它是屏幕上唯一的面板,所以BoxLayout将填充整个框架,因此根据您在面板中创建JComponents的方式,它也会在框架上显示它。

如果我是你,我会做什么,创建一个BorderLayout作为BoxLayout的容器。

This is how BorderLayour works, so for the center component your BoxLayout will fill the middle of the screen.

这样,您可以将BoxLayout设置为Borderlayout的中心。 看看这段代码是否有效:

//This will fill your frame
JPanel containerPanel = new JPanel(new BorderLayout());
contentPane.add(containerPanel);

//this is the BoxPanel you wnat your components to be organized in 
JPanel boxPanel = new JPanel(new BoxLayout());
//Add all your components to the boxPanel

//add your panel with all the components to the container panel
containerPanel.add(boxPanel, BorderLayout.CENTER);

答案 1 :(得分:1)

最简单的方法是使用GridBagLayout。使用默认约束,单个组件将在面板中居中:

//contentPane.add(panel, BorderLayout.CENTER);
contentPane.setLayout( new GridBagLayout() );
contentPane.add(panel, new GridBagConstraints());