2009-07-06 10 views
1

JPanelで棒グラフに似たものを作成するために使用できるレイアウトマネージャはありますか? FlowLayoutはこのニーズをほぼ満たしています。追加されたコンポーネントの向きは左から右(デフォルトはFlowLayout)である必要がありますが、上部に余分なスペース(「FlowLayout」では使用できません)を使用してパネルの下部に「静止」する必要があります。また、コンポーネントはすべて同じ高さと幅になります。Java - レイアウトマネージャの選択

ありがとうございました。あなたのために働くかもしれないこの

答えて

3

A BoxLayoutは、トリックを行います。これは、左から右または上から下へのコンポーネントのレイアウトを可能にし、密接に結合されたBoxクラスは強制的なスペーシングの制約になります。

0

私は実際にFormLayoutを好んでいます。これは非常に柔軟ですが、多くのコードを書く必要があるからです。そして、最初はそのパーセンテージとピクセルのパラメータと少し混乱していました。

しかし、たとえば、コントロールが他のコントロールから5ピクセル左にあること(コントロールのレイアウトがメインエリア...ネイバーとの関係でコントロールをレイアウトしています)を指定すると、最後のスペースavailabelの100% 5ピクセルのボーダースペース(あなたは-5を使用する必要があります)。

私はそれがこの

FormData data = new FormData(); 
data.left = new FormAttachement(neighborControl, 5); 
data.right = new FormAttachement(100, -5); 
... 
button.setLayoutData(data); 

に幾分似だと思う。この例では、JFaceのためですが、Swingの実装では、同様にあります。 私は私が書いたコードが正しいかどうかを確認するために後でこの日の私の古いコードを検索します:)

Here'sa追加link

1

あなたが棒グラフのような何かをしようとしている場合は、あなたが望むかもしれませんComponentを一切使用しないことを検討してください。 (IIRC)paintComponentをオーバーライドする単一のJComponentを持ってください。不適切なレイアウトマネージャ抽象化を使用するのではなく、棒グラフに適した方法で計算を行う方が簡単です。

FWIWの場合、デフォルトではGridBagLayoutに設定されていますが、これはレイアウト管理が単純な場合でも、コードの整合性が向上します。

1

GridBagLayoutであなたが望むものを正確に行うことができます。はい、私は皆がGBLを嫌うことを知っています。はい、私はダウン投票されることを知っています。しかし、それは実際にであり、理解するのが難しいではなく、ほぼすべてのレイアウト目標に使用できます。

底に「付着」する成分を取得するトリックアンカーを使用し、(すなわちSOUTHNONE)適切GridBagConstraintsオブジェクトの特性を満たすことである

+0

GridBagLayoutのもいいです。しかし、最初から好きではなかったことを覚えています; FormLayoutは、実際のサイズ変更に関しては、より良い結果を生成することがあります。たとえば、ボタンやテキストボックスの高さが変わったときには好きではありません。または、これをGBLで修正するように設定することはできますか? とにかく+ :) – lostiniceland

+1

はい - 重さを0に設定し、アンカープロパティをNONEまたはHORIZONTALに設定して、テキストフィールドまたはコンボボックスに余分な垂直スペーシングがないことを確認できます –