为什么SetMinimumSize设置最小高度而不是宽度?

时间:2010-03-30 12:08:40

标签: java user-interface swing jpanel resize

这是我的代码:

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 个答案:

答案 0 :(得分:3)

正如How to Use BoxLayout: Box Layout Features中所讨论的,这是自上而下的框布局BoxLayout.Y_AXIS的预期行为。将轴更改为从左到右的框布局BoxLayout.X_AXIS,您将看到高度缩小。有关详细信息,请参阅How to Use BoxLayout: Specifying Component Sizes