Почему SetMinimumSize устанавливает минимальную высоту, а не ширину? - PullRequest
1 голос
/ 30 марта 2010

Вот мой код:

import javax.swing.*;
import java.awt.*;

public class PanelModel {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Colored Trails");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel mainPanel = new JPanel();
        mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));

        JPanel firstPanel = new JPanel();
        firstPanel.setLayout(new GridLayout(4, 4));
        firstPanel.setMaximumSize(new Dimension(4*100, 4*100));
        firstPanel.setMinimumSize(new Dimension(4*100, 4*100));
        JButton btn;
        for (int i=1; i<=4; i++) {
            for (int j=1; j<=4; j++) {
                btn = new JButton();
                btn.setPreferredSize(new Dimension(100, 100));
                firstPanel.add(btn);
            }
        }

        mainPanel.add(firstPanel);
        frame.add(mainPanel);

        frame.setSize(520,600);
        //frame.setMinimumSize(new Dimension(520,600));
        frame.setVisible(true);
    }
}

Когда я увеличиваю размер окна (с помощью мыши), я вижу, что моя панель не увеличивает его размер.Это ожидаемое поведение (потому что я установил максимальный размер панели).Однако, когда я уменьшаю размер окна, я вижу, что ширина панели тоже уменьшается (при постоянной высоте).

Итак, setMinimumSize работает только частично.Это почему?

1 Ответ

3 голосов
/ 30 марта 2010

Как обсуждено в Как использовать BoxLayout: Особенности Box Layout , это ожидаемое поведение для макета сверху вниз, BoxLayout.Y_AXIS. Измените ось на поле слева направо, BoxLayout.X_AXIS, и вы увидите, что высота уменьшится. См. Как использовать BoxLayout: указание размеров компонентов для получения более подробной информации.

...