Поэтому я хотел бы иметь три JButtons
все друг на друга, но не на большие по ширине и высоте. Я не слишком хорошо знаком с макетами Java, и, честно говоря, я не слишком увлечен ими. Пожалуйста, просмотрите изображение кода ниже, чтобы объяснить мне, как, спасибо.
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();
}
});
}
}
Ознакомьтесь с документацией Java для разных менеджеров макетов. Я знаю, что вы не знакомы с ними, поэтому вы, вероятно, должны начать. Как только вы привыкнете к ним, нет никакой пользы. В документации много отличной информации, и я уверен, что вы многому научитесь. Лично я рекомендую посмотреть на макет коробки:
Создайте JPanel, который использует GridLayout
и добавляет все кнопки в панель. GridLayout автоматически увеличит размер кнопок одинакового размера.
Установите layout manager
в главном окне, чтобы использовать GridBagLayout
.
добавьте панель в главное окно, используя GridBagConststints по умолчанию. Затем панель будет автоматически центрироваться как по горизонтали, так и по вертикали.
Чтобы не использовать Box или GridBag, я думаю, что такая комбинация может сложиться:
Я думаю, что это должно приводить к тому, что кнопки располагаются друг над другом с небольшим количеством прокладок, не растягиваясь по ширине и показывая в центре экрана.
JPanel mainCard = new JPanel(new BoxLayout(mainCard, BoxLayout.PAGE_AXIS));
Я изменил его на макет коробки, и он возвращает ошибку и подчеркивает вторуюmainCard
, как так?