3

私はこのコードを持っています

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 ではなく、ボタンがまだフレームを埋めているのはなぜですか

どんな助けでもいただければ幸いです

4

2 に答える 2

5

のデフォルトのレイアウトはJFrameですBorderLayout。そのため、 を追加するJButtonと、 が に追加さJButtonれ、centerウィンドウ全体をカバーするように拡張されます。それらに追加されるコンポーネントBorderLayoutの方法を尊重しません。setSize(..)追加するコンポーネントに適切なサイズを指定したい場合はJFrame、レイアウトをFlowLayoutorGridLayoutまたは other..に変更し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);
    }

}
于 2013-04-29T17:43:34.997 に答える
-1

それは単なるバグまたはsthです。フレームに最後に追加された要素は、フレーム全体を取ります。


JLabel() のような新しい単純なコンポーネントを宣言し、
それをフレームに追加するだけです。
境界やサイズを設定しないでください。新しいラベルだけです。
このラベルがフレームに追加された最後の要素であることを確認してください。
それがうまくいくことを願っています。

于 2017-07-21T13:46:20.220 に答える