【问题标题】:JFrame size affecting JButton size but only vertically?JFrame 大小影响 JButton 大小但仅垂直?
【发布时间】:2020-12-01 09:16:18
【问题描述】:

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

【问题讨论】:

    标签: java swing layout jframe jbutton


    【解决方案1】:

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

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

    框架的内容窗格的默认布局管理器是BorderLayout,所以以上是不必要的。

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

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

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

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

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

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

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

    您应该在调用 pack() 之前设置 resizable 属性。

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

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

    【讨论】:

    • 感谢您的信息。我没有注意到borderlayout的属性导致了这个。
    猜你喜欢
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 2019-08-09
    • 1970-01-01
    • 1970-01-01
    • 2017-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多