使用Borderlayout在Jpanels中设置组件大小

问题描述 投票:1回答:1

我有一个项目来复制谷歌登录GUI here。到目前为止,我仍然在寻找我将要开始的内容,但经过一些研究后,我认为BorderLayout可以做到这一点。我通过边界重新调整一切来了解它是如何工作的,我喜欢它,因为与每个组件的每个setBounds的null布局和编码相比,它非常敏感。

我一直在想象使用背景面板,填充表单面板,以及为每对标签和文本字段创建面板以正确创建空间并将它们堆叠(或嵌套)在另一个之上。我们的老师告诉我们要剪掉图像,如果我们知道如何设计出一些不合时宜的东西,她只是想要。那并且还将输入保存到文本文件中。

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

此外,我一直在寻找另一种方式,我认为这个项目也将使用GridBaglayout。然而很多人说GridBagLayout太复杂了。您认为什么会更容易?

java swing layout-manager
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.