为什么这个按钮仍然填满整个框架?

时间:2013-04-29 17:24:17

标签: 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 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

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:5)

JFrame的默认布局为BorderLayout。这就是为什么当您向其添加JButton时,它会将JButton添加到center并将其展开以覆盖整个窗口。 BorderLayout不尊重添加到其中的组件的setSize(..)方法。如果您仍想为要添加到JFrame的组件指定首选大小,则应将布局更改为FlowLayoutGridLayout或其他..然后使用setPreferredSize(..)将组件添加到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);
    }

}

答案 1 :(得分:-2)

它只是一个错误或某事。 添加到框架的最后一个元素Takes Whole of it。

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