Java 南面板和北面板使用哪种布局管理器?

Java 南面板和北面板使用哪种布局管理器?,java,swing,layout-manager,Java,Swing,Layout Manager,在Swing应用程序中,我希望有以下屏幕布局: 使用BorderLayout这里我们放置了三个面板:南、中、北 要为南面板和北面板选择哪些布局?North有两个组件(标签):左对齐和右对齐。南方在中心有一个组件(按钮) 我还希望在合理的范围内重新调整整个屏幕的大小 在我看来,我将不得不使用GridLayout来处理这两个有大量空单元格的问题。或者,我可以在整个屏幕上使用一个GridBagLayout(但这种方法将迫使我使用具有比例宽度的标签和按钮) 是否有更好(可能更容易)的选项?您可以根据需

在Swing应用程序中,我希望有以下屏幕布局:

使用
BorderLayout
这里我们放置了三个面板:南、中、北

要为南面板和北面板选择哪些布局?North有两个组件(标签):左对齐和右对齐。南方在中心有一个组件(按钮)

我还希望在合理的范围内重新调整整个屏幕的大小

在我看来,我将不得不使用
GridLayout
来处理这两个有大量空单元格的问题。或者,我可以在整个屏幕上使用一个
GridBagLayout
(但这种方法将迫使我使用具有比例宽度的标签和按钮)


是否有更好(可能更容易)的选项?

您可以根据需要分层/嵌套
JPanel
s,并为每个面板提供自己独特的布局管理器。这有时会导致混乱的行为,如果你进入兔子洞太深,把东西分层4+层,但在这种情况下,它使事情更干净

将两个标签添加到带有
边框布局的
JPanel
,并将它们指定到
西部
东部
位置

JPanel
添加到顶级
JPanel
NORTH
位置,该位置也具有
边框布局。主面板进入
中心

为南方做一个类似的歌舞表演-将你的按钮放入一个JPanel,使用你想要的任何布局管理器(
FlowLayout
可能很好,你不必添加
Box
glue),然后将
JPanel
放入顶层面板的
south
位置。完成!:)

试试这个

  • 北边界布局
  • 南水北调


带水平胶的A可能更容易选择。@JBNizet我刚意识到它对North有效,回来后你已经建议过了。但仍然不确定南方是什么。南方是一个胶水,后面是一个按钮,后面是胶水。@JBNizet-对南方来说,
FlowLayout.CENTER
不是更容易吗?再说一次,为什么我在发布我的问题之前没有想到呢???我想是的,是的。测试它。是的,我已经为整个屏幕选择了
BorderLayout
。您建议对North也使用
BorderLayout
,这非常有趣。一些我根本没有考虑过的东西。就嵌套而言,我的主面板已经有3层了。是的,到目前为止,这似乎是最简单的配置。
import java.awt.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import javax.swing.border.*;

public class TestLayout {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    Logger.getLogger(TestLayout.class.getName()).log(Level.SEVERE, null, ex);
                }

                JButton northLeft = new JButton("Button");
                JButton northRight = new JButton("Button");
                JButton south = new JButton("Button");
                JTextArea text = new JTextArea(10, 40);

                JPanel northPanel = new JPanel(new BorderLayout());
                northPanel.setBorder(new EmptyBorder(10, 0, 10, 0));
                JPanel northWest = new JPanel();
                northWest.add(northLeft);
                JPanel northEast = new JPanel();
                northEast.add(northRight);
                northPanel.add(northWest, BorderLayout.WEST);
                northPanel.add(northEast, BorderLayout.EAST);

                JPanel southPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
                southPanel.setBorder(new EmptyBorder(10, 0, 10, 0));
                southPanel.add(south);

                JPanel main = new JPanel(new BorderLayout());
                main.setBorder(new TitledBorder("BorderLayout"));
                main.add(northPanel, BorderLayout.NORTH);
                main.add(text);
                main.add(southPanel, BorderLayout.SOUTH);

                JOptionPane.showMessageDialog(null, main);

            }
        });
    }
}