Как мне предотвратить изменение размера JButton?

Я пытаюсь сделать простую игру, в которой вы можете установить плитки, которые составляют кельтский дизайн, и я не могу заставить кнопки оставаться одинакового размера. Вот код:

public class CTGContent {

    public static JPanel content = new JPanel();
    private static JButton board[][] = new JButton[20][20];

    static private Random random = new Random();

    public static int CTGcolumn = random.nextInt(14)+1;
    public static int CTGRow = 15;
    private static GridLayout boardLayout;

    public final int getBoardWidth(){
        return CTGcolumn*40;
    }

    public final int getBoardHeight(){
        return CTGRow*40;
    }

    public static void initializeBoard(){
        int row = 0;
        int column = 0;

        int defaultCOL = 0;
        int defaultROW = 0;

        boardLayout = new GridLayout(CTGRow, CTGcolumn);
        content.setLayout(boardLayout);

        Random determine = new Random(); 

        while (row < CTGRow){
            column = 0;
            while (column < CTGcolumn){
                board[row][column] = new JButton(new ImageIcon("images\\template.gif"));
                board[row][column].setPreferredSize(new Dimension(40, 40));
                board[row][column].setMaximumSize(new Dimension(40, 40));
                board[row][column].setMinimumSize(new Dimension(40, 40));
                content.add(board[row][column]);
                column++;
            }
            row++;
        }
    }

    private static void build(){

        initializeBoard();

        JFrame window = new JFrame("testing the menubar");
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setContentPane(content);
        content.add(new JLabel("My Label"));
        window.pack();
        window.setVisible(true);    

    }

    public CTGContent() {

    }

    public CTGContent(JFrame window){

        initializeBoard();
        window.add(content);

    }

    public static void main(String[] args) {

        javax.swing.SwingUtilities.invokeLater( new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                    build();
            }
        });
    }
}

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

2 ответа

Решение

Изменить:

window.setContentPane(content);

Для того, чтобы:

JPanel contentCenter = new JPanel(new GridBagLayout());
contentCenter.add(content);
window.setContentPane(contentCenter);

Есть и другие способы сделать это, например, сделать макет FlowLayout, но GBL будет держать его по центру - как вертикально, так и горизонтально.

подсказки

  1. Пожалуйста, изучите общие соглашения об именах Java (в частности, случай, используемый для имен) для имен классов, методов и атрибутов и используйте их последовательно.
  2. Для лучшей помощи, скорее, отправьте MCVE. Этот код нужно было импортировать только для того, чтобы сделать его MCVE.
  3. Смотрите также этот ответ на Центрирование JLabel на JPanel

Ты используешь GridLayout потому что ваши кнопки изменяют размер по горизонтали / вертикали всегда, чтобы заполнить всю ячейку сетки. Для предотвращения этого вы можете использовать другой LayoutManager, например GridBagLayout,

Всегда читайте о настройке размера для компонентов.

Другие вопросы по тегам