6

私はそれを保持してJButtonいるのサイズを満たすために拡張したいものをJPanel持っています。私はこれをいくつかの異なる方法で試しましたが、運がありませんでした。ここにいくつかの試みがあります:

  1. ここで推奨されている手動サイズ設定-ボタンのサイズは変更されませんでした。

    panel  = new JPanel(new CardLayout());
    button = new JButton();
    button.setPreferredSize(new Dimension(BUTTON_SIZE, BUTTON_SIZE)); 
    panel.add(button);
    
  2. ここで示唆されているように、を使用しBorderLayoutてボタンを展開しようとしています。サイズは変わりませんでした。

    panel  = new JPanel(new BorderLayout());
    button = new JButton();
    panel.add(button, BorderLayout.CENTER);
    

私はおそらく何か間違ったことをしているので、どんな助けでも大歓迎です。

編集

これがそれを解決したものの要約です。うまくいったことが2つあります

  1. new JPanel(の呼び出しで)LayoutManagerを削除します。これは、OracleによるとデフォルトでBorderLayoutになっています。
  2. 受け入れられた回答のように、呼び出しにディメンションを追加します(つまりnew BorderLayout(0,0))。
4

3 に答える 3

7

2回目の試行は機能するはずですが、それは、最上位のコンテナー全体が、JPanelを含むによって満たされることを意味するわけではありませんJButton。コンテナ内に他のコンポーネントがない場合BorderLayout、中央のコンポーネントが拡張してコンテナ全体を埋めます。

http://docs.oracle.com/javase/tutorial/uiswing/layout/border.html

ウィンドウを拡大すると、中央の領域に可能な限り多くの空きスペースができます。

アプリを実行したときに表示されている画像を投稿できますか?以下に実際の例を示します。注目に値することの1つは、一番上までのすべてのコンテナJFrameもを使用していることBorderLayoutです。あなたの試みでは、いくつかの上位レベルのコンテナがあなたのサイズを制限している可能性がJPanelあり、したがってJButton内部も制限している可能性があります。

frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel panel = new JPanel();
panel.setLayout(new BorderLayout(0, 0));
JButton button = new JButton("I'm a button!");
panel.add(button);

frame.getContentPane().add(panel, BorderLayout.CENTER);

ここに画像の説明を入力してください

于 2012-12-09T23:24:37.037 に答える
4

BorderLayout最も簡単な解決策です。

おそらくあなたが抱えている問題は、親パネルがどのように配置されているかということです。を使用するパネルにボタンを追加してから、を使用するパネルBorderLayoutにパネルを追加しても、目的FlowLayoutの効果は得られません。

ここに画像の説明を入力してください

public class ExpandButtonTest {

    public static void main(String[] args) {
        new ExpandButtonTest();
    }

    public ExpandButtonTest() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new JButton("I'm a big button"));
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

}
于 2012-12-09T23:28:08.347 に答える
3

使用するときは私には問題ないようですBorderLayout

ここに画像の説明を入力してください

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Test {

    public Test() {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel panel = new JPanel() {
            @Override
            public Dimension getPreferredSize() {
                return new Dimension(300, 300);
            }
        };
        panel.setLayout(new BorderLayout());

        JButton button = new JButton("Button");

        panel.add(button);

        frame.add(panel);

        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Test();
            }
        });
    }
}

特定の問題を示すためにSSCCEを投稿してください。

于 2012-12-09T23:27:39.587 に答える