JFrame расположите три кнопки одну под другой в центре

1

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

Изображение 174551

package com.aqagame.harrykitchener;

import javax.swing.*;

import java.awt.*;
import java.awt.event.*;
import java.io.*;

public class Main 
{

    private JButton playGame, playerNames, exitGame;

    public Main()
    {

        JPanel mainCard = new JPanel(new BorderLayout(8, 8));
        playGame = new JButton("Play Game");
        playerNames = new JButton("Player Names");
        exitGame = new JButton("Exit Game");


        mainCard.add(playGame, BorderLayout.NORTH);
        mainCard.add(playerNames, BorderLayout.CENTER);
        mainCard.add(exitGame, BorderLayout.SOUTH);

        JFrame window = new JFrame("Harry AQA game");
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.getContentPane().add(mainCard);
        window.setSize(900, 800);
        window.setLocationRelativeTo(null);
        window.setVisible(true);

    }

    public static void main(String args[])
    {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Main();
            }
        });
    }

}
Теги:
user-interface
swing
layout-manager
jbutton

3 ответа

4

Ознакомьтесь с документацией Java для разных менеджеров макетов. Я знаю, что вы не знакомы с ними, поэтому вы, вероятно, должны начать. Как только вы привыкнете к ним, нет никакой пользы. В документации много отличной информации, и я уверен, что вы многому научитесь. Лично я рекомендую посмотреть на макет коробки:

Изображение 174551

  • 0
    JPanel mainCard = new JPanel(new BoxLayout(mainCard, BoxLayout.PAGE_AXIS)); Я изменил его на макет коробки, и он возвращает ошибку и подчеркивает вторую mainCard , как так?
  • 1
    Вы читали документацию? У меня такое чувство, что вы пытались подключить и разместить, что на самом деле не очень хорошо работает. Вам нужно будет настроить его с помощью менеджеров компоновки, как описано в ссылках, которые я разместил.
Показать ещё 6 комментариев
4
  1. Создайте JPanel, который использует GridLayout и добавляет все кнопки в панель. GridLayout автоматически увеличит размер кнопок одинакового размера.

  2. Установите layout manager в главном окне, чтобы использовать GridBagLayout.

  3. добавьте панель в главное окно, используя GridBagConststints по умолчанию. Затем панель будет автоматически центрироваться как по горизонтали, так и по вертикали.

1

Чтобы не использовать Box или GridBag, я думаю, что такая комбинация может сложиться:

  • У главной панели (позвоните ей) A есть BorderLayout
  • Создайте еще одну панель (пусть ее называют B), с FlowLayout, с конструктором, выравнивающим компоненты к центру
  • Создайте еще одну панель (пусть ее называют C), с GridLayout, 1 столбец 3 строки
  • Добавьте каждую кнопку в новый JPanel с FlowLayout (1 JPanel за кнопку, поэтому кнопки обернуты FlowLayout), а затем добавьте каждую из этих JPanels в C
  • Добавить C в B
  • Добавить B в (центральное положение)

Я думаю, что это должно приводить к тому, что кнопки располагаются друг над другом с небольшим количеством прокладок, не растягиваясь по ширине и показывая в центре экрана.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню