哪个布局管理器用于SOUTH和NORTH面板?

时间:2014-02-14 18:03:33

标签: java swing layout-manager

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

screen layout

在这里使用BorderLayout我们放置了三个面板:SOUTH,CENTER,NORTH。

为南面板和北面板选择哪种布局? North有两个组件(标签): -justified, -justified。 South在中心中有一个组件(按钮)。

我还想让整个屏幕在合理范围内重新调整大小。

在我看来,我必须使用GridLayout来处理很多空单元格。或者,我可以在整个屏幕上使用单个GridBagLayout(但这种方法会强制我使用比例宽度的标签和按钮)。

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

2 个答案:

答案 0 :(得分:2)

您可以根据需要对JPanel进行分层/嵌套,并为每个都提供自己独特的布局管理器。如果你深入挖掘兔子洞并将4个以上的经理深入分层,这有时会导致令人困惑的行为,但在这种情况下,它会使事情更加清晰。

使用JPanel将您的两个标签添加到BorderLayout,并将其指定到WESTEAST位置。

{/ em> JPanel添加到顶级NORTH的{​​{1}}位置,该位置还有JPanel。您的主面板会进入BorderLayout

为南方做一首类似的歌曲和舞蹈 - 将你的按钮放入一个JPanel,你可以使用你想要的任何布局管理器(CENTER可能很好,你不必添加FlowLayout胶水)然后将Box放入顶级面板的JPanel位置。完成! :)

答案 1 :(得分:1)

试试这个。

  • North - BorderLayout
  • 南 - FlowLayout

enter image description here

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);

            }
        });
    }
}