Установка размеров компонентов внутри Jpanels с помощью Borderlayout - PullRequest
1 голос
/ 15 марта 2019

У меня есть проект, чтобы скопировать графический интерфейс входа в Google здесь .До сих пор я все еще ищу, с чего я начну, но после некоторого исследования я думаю, что на BorderLayout возможно сделать это.Я понимаю, как это работает, перенастраивая все через границы, и мне это нравится, потому что он довольно отзывчивый по сравнению с нулевым макетом и кодированием каждого setBounds для каждого компонента.

Я представлял себе использование фоновой панели, панели для заполненной формы и создание панелей для каждой пары надписей и текстовых полей для правильного создания пространства и размещения (или вложения) их поверхДругой.Наша учительница только что сказала нам вырезать изображение, она просто хочет, если мы знаем, как создать что-то с нуля.Это, а также сохранение ввода в текстовом файле.

Тем не менее, я не могу понять концепцию увеличения размера компонента внутри границ, чтобы имитировать промежутки между текстовыми полями, как что-то вродезаполнение между компонентами?Использование setSize не работает, и пока мой поиск приводит только к изменению размеров границ, или, возможно, я все еще не ввел правильный термин для этого?

Кроме того, я искал другой путь, и я думаю, что этот проект такжеработать с помощью GridBaglayout.Однако многие люди говорят, что GridBagLayout слишком сложен.Как вы думаете, будет проще?

1 Ответ

2 голосов
/ 15 марта 2019

По моему опыту, почти каждая (99%) панелей, использующих GridBagLayout, может быть спроектирована с использованием всех других макетов. Так, кто-то может сказать, что 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

...