JFrame 大小影响 JButton 大小但仅垂直?

JFrame size affecting JButton size but only vertically?

我对 JFrame 如何垂直扩展 JButton 以匹配 JFrame 最小尺寸而不是水平扩展感到困惑。我希望它不会向任何一个方向延伸,并且知道它为什么会延伸或不会延伸。

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

public class somestring {
    public static void main(String []args){
        JFrame frame = new JFrame();
        Container content = frame.getContentPane();
        content.setLayout(new BorderLayout());
        
        
        Toolkit toolkit = Toolkit.getDefaultToolkit();
        Dimension max = toolkit.getScreenSize();
        frame.setMinimumSize(new Dimension(1000,1000));
        frame.setSize(max);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JButton s = new JButton("generate somestring");
        s.setPreferredSize(new Dimension(400,400));
        content.add(s, BorderLayout.WEST);
        frame.pack();
        frame.setResizable(false);
        frame.setVisible(true);
    }
}

I am confused about how JFrame extends the JButton vertically to match JFrame min size but not horizontally.

content.setLayout(new BorderLayout());
...
content.add(s, BorderLayout.WEST);

框架内容窗格的默认布局管理器是BorderLayout,因此不需要上面的内容。

无论如何,它垂直延伸的原因是因为当您将组件添加到 WEST.

时,这是 BorderLayout 的规则

阅读 Layout Managers 上的 Swing 教程部分。 BorderLayout 部分将解释向 WEST 添加组件的规则。

I would like for it to not extend in either direction

那么你需要使用不同的布局管理器。

例如,您可以使用 FlowLayout。该按钮将位于框架顶部的中央。

或者您可以使用 GridBagLayout(使用默认的 GridBagConstraints)。该按钮将水平和垂直居中。

frame.pack();
frame.setResizable(false);

您应该在调用 pack() 之前设置可调整大小 属性。

frame.setMinimumSize(new Dimension(1000,1000));
frame.setSize(max);

不确定为什么要设置最小大小并调用 setSize()。如果您希望按钮以其首选大小显示,则只需调用 pack()。