Компонент центральной панели внутри Java-свинга BoxLayout - PullRequest
0 голосов
/ 23 декабря 2018

Я пытаюсь использовать BoxLayout для отображения 2 панелей по вертикали, и я искал, как центрировать компоненты на этих панелях.На данный момент мои компоненты размещены в верхней центральной части каждой панели, и я хочу, чтобы они располагались в центре X и Y.

Я добавил нужные компоненты на 2 панели, затем добавилпанели в моем BoxLayout.Таким образом, они отображаются вертикально так, как я хочу, но, как я уже сказал, я не хочу, чтобы они были в центре вверху.

Я пытался использовать такие методы, как setAlignementY и setLocation, но любой из нихна самом деле перемещает компоненты.Я также видел, что BoxLayout будет пытаться установить компоненты такими же широкими, как и самый широкий компонент, но, поскольку у меня есть только 2 панели одинакового размера, я не совсем понимаю.

Это в основном то, как яЯ добавил свои компоненты (не пытаясь отцентрировать):

private void initPanels ()
    {
        this.titlePanel.add(this.title);

        this.bookInputPanel.add(bookTitle);
        this.bookInputPanel.add(bookInput);

        this.authorInputPanel.add(by);
        this.authorInputPanel.add(authorInput);
        this.authorInputPanel.add(this.authorsTable);

        this.buttonsPanel.add(confirm);

        this.contentPanel.setLayout(new BoxLayout(this.contentPanel,     BoxLayout.Y_AXIS));
        this.contentPanel.add(bookInputPanel);
        this.contentPanel.add(authorInputPanel);

        this.add(this.titlePanel, BorderLayout.NORTH);
        this.add(this.contentPanel, BorderLayout.CENTER);
        this.add(this.buttonsPanel, BorderLayout.SOUTH);
    }

Я сделал снимок, чтобы показать вам именно то, что я хочу, но, похоже, мне нужно 10 повторений, чтобы сделать это, извините за это.

1 Ответ

0 голосов
/ 23 декабря 2018

Таким образом, они отображаются вертикально так, как я хочу, но, как я уже сказал, я не хочу, чтобы они были в центре вверху.

Один из способов - добавить«приклеить» к верхней / нижней части панели.Этот «клей» расширится, чтобы заполнить дополнительное пространство, доступное для панели:

this.contentPane.add(Box.createVerticalGlue());
this.contentPanel.add(bookInputPanel);
this.contentPanel.add(authorInputPanel);
this.contentPane.add(Box.createVerticalGlue());

Прочтите раздел из учебника Swing по Как использовать BoxLayout для получения дополнительной информации о функцииa BoxLayout.

Другим вариантом может быть использование панели «оболочки», в которой используется другой менеджер макета.Например, GridBagLayout с ограничениями по умолчанию автоматически центрирует компонент по горизонтали / вертикали:

//this.add(this.contentPanel, BorderLayout.CENTER);
JPanel wrapper = new JPanel( new GridBagLayout() );
wrapper.add( contentPanel );
this.add(wrapper, BorderLayout.CENTER);
...