使用Borderlayout在Jpanels中设置组件尺寸

时间:2019-03-15 12:33:38

标签: java swing layout-manager

我有一个项目可以复制Google登录GUI here。到目前为止,我仍在搜索将要开始的内容,但是经过一些研究,我认为可以在BorderLayout上做到这一点。我通过边界重新调整所有内容来了解​​它的工作原理,我有点喜欢它,因为与具有null布局和为每个组件编码每个setBounds相比,它具有响应能力。

我一直在想象使用背景面板(用于填写表格的面板), 并为每对标签和文本字段创建面板,以正确创建空间并将它们堆叠(或嵌套)在另一个之上。我们的老师只是告诉我们要剪裁图像,她只是想知道我们是否从头开始设计某些东西。然后将输入保存到文本文件中。

但是,我似乎无法掌握增加边框内的组件大小以模仿文本字段之间的间隙的概念,就像组件之间的某种填充一样?使用setSize不起作用,到目前为止,我的搜索仅导致调整边框大小,或者也许我还没有输入正确的可搜索术语?

此外,我一直在寻找另一种方法,我认为该项目也可以使用GridBaglayout进行工作。但是很多人说GridBagLayout太复杂了。您认为会更容易些吗?

1 个答案:

答案 0 :(得分:2)

根据我的经验,使用GridBagLayout的几乎所有面板(99%)都可以使用所有其他布局进行设计。因此,有人可以说GridBagLayout是可选的

根据您的情况,避免使用GridBagLayout很容易。看下面的代码:

public class NoGridBagLayout extends JFrame {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new NoGridBagLayout().setVisible(true));
    }

    public NoGridBagLayout() {
        super();
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setExtendedState(MAXIMIZED_BOTH);

        JPanel borderPanel = new JPanel(new BorderLayout());
        borderPanel.setBorder(new TitledBorder("borderPanel - BorderLayout"));
        JLabel label = new JLabel("Create a google account.");
        label.setHorizontalAlignment(JLabel.CENTER);
        label.setFont(label.getFont().deriveFont(25f));
        borderPanel.add(label, BorderLayout.PAGE_START);
        setContentPane(borderPanel);

        JPanel gridPanel = new JPanel(new GridLayout(1, 2));
        gridPanel.setBorder(new TitledBorder("gridPanel - GridLayout"));
        getContentPane().add(gridPanel, BorderLayout.CENTER);

        JPanel leftBoxedPanel = new JPanel(); // Fill it with panels using BoxLayout.X_AXIS
        leftBoxedPanel.setLayout(new BoxLayout(leftBoxedPanel, BoxLayout.Y_AXIS));
        leftBoxedPanel.setBorder(new TitledBorder("leftBoxedPanel - BoxLayout.Y_AXIS"));
        gridPanel.add(leftBoxedPanel);

        JPanel rightBoxedPanel = new JPanel(); // Fill it with panels using BoxLayout.X_AXIS
        rightBoxedPanel.setLayout(new BoxLayout(rightBoxedPanel, BoxLayout.Y_AXIS));
        rightBoxedPanel.setBorder(new TitledBorder("rightBoxedPanel - BoxLayout.Y_AXIS"));
        gridPanel.add(rightBoxedPanel);
    }
}

预览:

preview