0

JPanelウィズGridBagLayoutセットを持っています。2 列 1 行 (2 セル) です。すべてのセルには、1 つJPanelを含むものがありますJLabel(コンポーネントのタイプは重要ではありません)。

左のセルのJLabelwidth 属性は 100px に設定されています。右側のセルのJLabelwidth 属性は 50px に設定されています。このような場合、左のセルは少し伸び、右のセルよりも広くなります。

GridBagLayout含まれるコンポーネントがスペースを取りすぎる場合にのみセルを拡張すると思いました。GBLのバグですか?

この問題を解決する方法はありますか?

4

2 に答える 2

1

GridBagLayout列と行がこのように配置されていないため、これは答えるのが難しい質問です。2 つの列と 2 つのコンポーネントがある場合、列はそれらの列に配置された最大のコンポーネントのサイズに合わせてサイズ変更されます。左のコンポーネントが大きいため、左の列が大きくなります。

GridBagConstraintsコンポーネントの対応する属性を調整することで、セルが占める予備スペースの量を調整できます。重み属性 ( weighty& ) は、列 (​​ ) と行 ( ) がweightx占有する予備スペースの量を制御します。たとえば、が呼び出されたオブジェクトを使用していて、次のコードを使用して相対的なサイズを変更できる場合。weightxweightyJPanelGridBagConstraintsrightGbcleftGbc

leftGbc.weightx = 0.5;
rightGbc.weightx = 1;

これは、右の列が左の列の 2 倍の予備スペースを占有することを意味し、したがって (うまくいけば) コンポーネントのサイズの違いを補うことができます。

ウェイト アトリビュートの使用は、非常に抽象的なプロセスのように感じられる場合があり、慣れるまでに時間がかかる場合がありますが、しばらく使用し始めると理解できます。使用しているコンポーネントに応じて、重み属性が列/行に与える影響に影響を与える可能性のある他の癖があります。

于 2013-08-22T11:28:46.650 に答える
1

この問題を解決する方法はありますか?

Java Swing は、CSS/HTML と同じようには機能しません。Swing でコンポーネントを作成し、GUI にサイジングを任せます。

あなたが達成しようとしていることを知らなくても、Swing コンポーネントを定義して、GridBagLayoutにレイアウトを管理させることしかできません。

グリッド領域を同じサイズにする場合は、GridLayout を使用します。

于 2013-08-16T13:05:47.620 に答える