11

ボタン、ラベル、テーブルなどを追加するJPanelサブクラスがあります。画面に表示するには、次を使用しますJFrame

MainPanel mainPanel = new MainPanel(); //JPanel subclass

JFrame mainFrame = new JFrame();
mainFrame.setTitle("main window title");
mainFrame.getContentPane().add(mainPanel);
mainFrame.setLocation(100, 100);
mainFrame.pack();
mainFrame.setVisible(true);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

しかし、ウィンドウのサイズを変更しても、パネルのサイズは変わりません。サイズを変更してもパネルのサイズをウィンドウのサイズと同じにする方法は?

4

5 に答える 5

16

BorderLayout のようなレイアウト マネージャーを設定してから、パネルの配置場所をより具体的に定義できます。

MainPanel mainPanel = new MainPanel();
JFrame mainFrame = new JFrame();
mainFrame.setLayout(new BorderLayout());
mainFrame.add(mainPanel, BorderLayout.CENTER);
mainFrame.pack();
mainFrame.setVisible(true);

これにより、パネルがフレームの中央領域に配置され、フレームのサイズ変更時にパネルが自動的に拡大されます。

于 2008-12-28T15:10:23.847 に答える
3

使用する JFrame のレイアウト マネージャーを設定する必要があります。これは、コンポーネントの配置方法を扱います。便利なものは BorderLayout マネージャーです。

次のコード行を追加するだけで、問題が解決するはずです。

mainFrame.setLayout(new BorderLayout());

(JFrame にコンポーネントを追加する前にこれを行ってください)

于 2008-12-28T14:18:12.843 に答える
2

友人が提供する BorderLayout オプションが機能しない場合は、ComponentListerner を JFrame に追加して、componentResized(event) メソッドを実装してみてください。JFrame オブジェクトのサイズが変更されると、このメソッドが呼び出されます。したがって、このメソッドで JPanel のサイズを設定するコードを記述すれば、目的の結果が得られます。

ええ、私はこの「解決策」が良くないことを知っていますが、セーフティネットとして使用してください. ;)

于 2009-01-03T10:04:00.503 に答える
1

私の経験から、GridLayout を使用しました。

    thePanel.setLayout(new GridLayout(a,b,c,d));

a = 行番号、b = 列番号、c = 水平方向のギャップ、d = 垂直方向のギャップ。


たとえば、次のようにパネルを作成したい場合:

  • 無制限の行 (a = 0 を設定)
  • 1 列 (b = 1 に設定)
  • 垂直ギャップ = 3 (d = 3 に設定)

コードは以下のとおりです。

    thePanel.setLayout(new GridLayout(0,1,0,3));

このメソッドは、JPanel に JScrollPane を追加する場合に役立ちます。JScrollPane 内の JPanel のサイズは、いくつかのコンポーネントを追加すると自動的に変更されるため、JScrollPane はスクロール バーを自動的にリセットします。

于 2013-07-24T06:27:55.897 に答える