Java 为什么这个按钮仍然充满整个画面?

Java 为什么这个按钮仍然充满整个画面?,java,swing,jframe,jbutton,Java,Swing,Jframe,Jbutton,我有这个密码 package com.net.Forms; import javax.swing.JButton; import javax.swing.JFrame; public class MainForm { protected static JFrame window = new JFrame("Test Form"); protected static JButton btnOK = new JButton("OK!"); public static v

我有这个密码

package com.net.Forms;
import javax.swing.JButton;
import javax.swing.JFrame;

public class MainForm {

    protected static JFrame window = new JFrame("Test Form");
    protected static JButton btnOK = new JButton("OK!");

    public static void Main() {
        load();
        return;
    }
        public static void load() {
        window.setSize(500, 500);
        window.setVisible(true);
        //btnOK.setSize(50, 50); //here
        window.add(btnOK);
        btnOK.setEnabled(true);
        btnOK.setVisible(true);


        }

}
为什么按钮仍然填充框架,而不是像我上面所说的50 X 50


任何帮助都将不胜感激。JFrame的默认布局是。这就是为什么当您向它添加
JButton
时,它会将
JButton
添加到
中心
,并将其展开以覆盖整个窗口
BorderLayout
不考虑添加到其中的组件的
setSize(..)
方法。如果仍要为添加到
JFrame
的组件指定首选尺寸,则应将布局更改为或其他。。然后在将组件添加到
JFrame
时,对组件使用方法。例如,您的代码可以按照以下方式修改

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

public class MainForm {

    protected  JFrame window = new JFrame("Test Form");
    protected  JButton btnOK = new JButton("OK!");

    public static void main(String st[]) {
        SwingUtilities.invokeLater( new Runnable()
        {
            public void run()
            {
                MainForm mf = new MainForm();
                mf.load();
            }
        });

    }
    public void load() {
    Container c = window.getContentPane();
    c.setLayout(new FlowLayout());//Set layout to be FlowLayout explicitly.
    btnOK.setPreferredSize(new Dimension(100,50));//use set PreferredSize
    c.add(btnOK);
    c.setSize(500, 500);
    c.setVisible(true);
    }

}
只是个虫子什么的。 添加到框架的最后一个元素将占据整个框架

您需要做的一切:
声明一个新的简单组件,如JLabel()
将其添加到框架中。
不要为它设置边界或大小。只需一个新标签。
确保此标签是添加到框架的最后一个元素。

希望它能起作用。

请继续阅读。这是
JFrame
s的默认布局管理器。请参阅?@trashgod:那么您在这种情况下的建议是什么?最好是
pack()
封闭的
窗口
,以依赖UI委托的计算。如果重写
getPreferredSize()
,请使边界不小于可避免的范围。那么在这种情况下,您有何建议?1.为GUI创建公共方法,以避免main()2中的任何内容。调用新的MainForm()应该在invokeLater内部。3.public MainForm(){中的所有GUI创建都应在window.setVisible(true)中结束,4.更改代码行的顺序,5.请不要将Xxx放入JFrame,将JPanel放入该作业中6.可以在那里找到,其他3-5个非关键issues@mKorbel是的,我这样做了。但我已经请垃圾神建议一种方法,不使用
setPreferredSize
就可以实现OP想要的功能。欢迎使用SO!请查看页面re已经是这个问题的一个非常详细的答案,4年多前就被接受了。不幸的是,你的答案没有提供任何有助于OP或公众研究这个问题的额外信息。