2

私はJFrame次のレイアウトとコンポーネントを持っています:

 _________________________________________ 
 |  __________________________________    | 
 |  |JTree   |   Panel2              | *  |
 |  |(Panel1)| (other controls)      |<-> |
 |  |________|_______________________|    |
 |__________*_____________________________|

これらは、メインのコンテンツ ペインにありJFrameます。
私が欲しいのは、ウィンドウを最大化したときに、これらのコンポーネントがそれに応じてサイズ変更されることです。
現在起こっていることは、それらが現在のサイズのままであり、矢印と星がある場所 (側面と下部) に大きなギャップがあることです。
詰め込み続けたいと思います。
コンテンツ ペインに null レイアウトを使用し、ビジュアル デザイナーからコンポーネントを削除しました。
mazimize 時にコントロールのサイズを常に変更するにはどうすればよいですか?

4

3 に答える 3

4

2 つのパネルを同じサイズにして、それぞれがメイン ウィンドウの半分を占めるようにする場合は、GridLayout を使用します。

getContentPane().setLayout(new GridLayout(1,2));
getContentPane().add(Panel1);
getContentPane().add(Panel2);

1 つのパネルの幅を一定にしたい場合は、BorderLayout を使用します。

getContentPane().setLayout(new BorderLayout());
getContentPane().add(Panel1,BorderLayout.EAST);
getContentPane().add(Panel2,BorderLayout.CENTER);

1:2 の幅の比率を維持するなど、より複雑な動作が必要な場合は、最も強力なレイアウトであると同時に最も複雑な GridBagLayout を使用する必要があります。

getContentPane().setLayout(new GridBagLayout());
getContentPane().add(Panel1,new GridBagConstaints(0,0,1,1,1,1,GridBagConstraints.CENTER,GridBagLayout.BOTH,new Insets(0,0,0,0),0,0);
getContentPane().add(Panel2,new GridBagConstaints(1,0,1,1,2,1,GridBagConstraints.CENTER,GridBagLayout.BOTH,new Insets(0,0,0,0),0,0);
于 2011-04-03T14:03:47.407 に答える
3

null レイアウトやフォーム デザイナーは使用せず、さまざまなレイアウト マネージャーを試してください。GridBagLayout は、必要に応じて GUI を作成するのに役立つマネージャーの 1 つかもしれませんが、必要でない限り、多くの人がこれを使用しないようにしています。また、多くの場合、JPanel はそれぞれ独自のレイアウト マネージャーでネストされているため、実際にはレイアウト マネージャーがネストされています。

于 2011-04-03T13:48:43.883 に答える
2

SOを検索すると、おそらく多くの異なる意見が得られます。ただし、共通の真実が1つあります。ビジュアルデザイナーの使用を検討する前に、特定のレイアウトマネージャーがどのように機能するかについて少なくとも基本的な理解が必要です。

そうは言っても、私が得た最高の結果、そして現在本番環境で使用しているのは、優れたWindowBuilderProとレイアウトマネージャーとしてのMigLayoutの組み合わせです。

私は実際にMigLayoutをテーブルレイアウトとして使用しています。コンポーネントをセルに配置し、各セルに「grow」などの属性を設定します。サイズ変更、最小/設定/最大サイズ、配置などを拡張する場合は、コンポーネントをセルにまたがるように設定できます。が欲しいです。

WindowBuilderの優れている点は、デザイナーを混乱させることなく生成されたコードを変更できることです。生成されたコードは実際にはきれいです:)

于 2011-04-03T14:15:30.800 に答える