2011-09-22 8 views
6

私はSwing GUIに取り組んでいて、JSeperatorを追加した後に奇妙で望ましくないギャップを取りました。またはこれをうまく達成するための他のオプション!JSeperatorを使用しているときに異常なギャップ - Java

ビジュアル説明

enter image description here

ギャップがJLabel "スピード" の前と後にJSlider明らかです。

関連のコード

control.setLayout(new BoxLayout(control, BoxLayout.X_AXIS)); 

...another code omitted... 

control.add(orientation); //JLabel 
control.add(norm); //JRadioButton 
control.add(back); //JRadioButton 
control.add(new JSeparator(SwingConstants.VERTICAL)); 
control.add(speedLabel); //JLabel 
control.add(speed); //JSlider 
control.add(new JSeparator(SwingConstants.VERTICAL)); 
control.add(turnOutLabel); //JLabel 
control.add(right); //JRadioButton 
control.add(straight); //JRadioButton 
control.add(left); //JRadioButton 

私がしたいことすべてが中心とJSeperatorで区切られていることです、

ビジュアル説明

enter image description here

ありがとうございます。

+0

あなたは 'JSeparator'インスタンスに水平の接着剤を試しましたか、空の境界線を実装しましたか? – mrkhrts

+0

@mrkhrtsグルーは助けにならない、それは無限大の単純なもう1つのコンポーネントだ;-) – kleopatra

答えて

7

ん:@kleopatraが説明したように

JSeparator separator = new JSeparator(JSeparator.VERTICAL); 
Dimension size = new Dimension(
    separator.getPreferredSize().width, 
    separator.getMaximumSize().height); 
separator.setMaximumSize(size); 

を、JSeparatorは無制限最大サイズを持っています(双方向で)、ここでは、最大幅を好ましい幅に制限するが、最大高さは変更しない(好ましい高さは0なので)。

+0

ノノノノノ...決してsetXXSize - そのルールは...うまくいっているし、いつもどんな人でも() – kleopatra

+0

それは実際に働いていましたが、今はBig Oと一緒にO(no)noと言ったようにしてはいけません、私はHowardの勧告を試してみるでしょう、それはうまくいくはずですね♪ – doNotCheckMyBlog

+0

@kleopatraまあ!それを行うことができます;-)真剣に、私は上記のスニペットでは重要ではありません(ハードコードされたピクセルサイズが表示されない限り、私にptable)。 – jfpoilpret

1

変更BoxLayout to new FlowLayout(FlowLayout.LEFT)。これはうまくいくはずです。残念ながら、私はBoxLayoutがあなたにとってうまくいかない理由を実際に説明していません。

+0

私はFlowLayoutを使っているならば、スイングはJSeperatorをまったく見せてくれないだろうか(非常に興味深い。 – doNotCheckMyBlog

0

と別のパネルにcontrolを置くことができます。

更新:残念ながら、セパレータの好適な高さがゼロであるとセパレータが消えているので、動作しません

control.setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0)); 

経由で直接FlowLayoutのためにcontrolを設定します。

+0

私がFlowLayoutを使うならば、 :(非常に面白い – doNotCheckMyBlog

+0

@SkeetOverFlowあなたはそうだから、常に別のコンテナに入れることができる。 – Howard

4

BoxLayoutは、それらのギャップを追加している理由は、

  • あなたのフレーム(パネル)の幅は子供
  • JSeparatorとJSliderの合計県サイズよりも大きい場合は、事実上、それはです(無制限を持っているということですShort.Max)他のすべてがので、すべての過剰これら3つ

REAS間に分散されます、BoxLayoutは最大サイズを尊重コンテンツ依存最大

  • を有し、一方、最大幅追加:FlowLayoutの上のすべてのセパレータが表示されない、

    • JSeparatorは0
    • FlowLayoutのが簡単な方法アウトがHowareの最初の提案で、すべての子どもの県サイズ

    を与えるの県高さを持っていますflowLayoutを持つパネルへの完全なコントロール。より堅牢なソリューションは、より強力なLayoutManagerに切り替えることです:-)

    (もう一度編集を削除、BorderLayout。南/北のちょうど次の行(したい場合は、この方法でそれらを置くことができる)とnew JSeparator(...)代わるものではありませ;-)

  • 関連する問題