JFrame的大小会影响JButton的大小,但只能垂直显示吗?

问题描述

我对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);
    }
}

解决方法

我对JFrame如何垂直扩展JButton以匹配JFrame最小大小而不是水平匹配感到困惑。

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

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

无论如何,它垂直延伸的原因是因为这是将组件添加到BorderLayoutWEST的规则。

Layout Managers上的Swing教程中阅读本节。 BorderLayout的部分将说明向WEST添加组件的规则。

我希望它不会向任一方向延伸

然后,您需要使用其他布局管理器。

例如,您可以使用FlowLayout。该按钮将在框架顶部居中。

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

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

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

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

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...