2011-06-23 5 views
1

で適切な場所にだから私のコードではありません。JSeparator次のように私のJPanel

JPanel mainPanel = new JPanel(); 

mainPanel.setBorder(new EmptyBorder(50,50,0,10)); 

BoxLayout layout = new BoxLayout(mainPanel, BoxLayout.Y_AXIS); 
mainPanel.setLayout(layout); 

JSeparator separate = new JSeparator(SwingConstants.HORIZONTAL); 
mainPanel.add(separate); 

mainPanel.add(new JButton()); 
mainPanel.add(new JButton()); 

私は持っておくの問題ではなく、私のパネルのように見えるということです。

______________ 
|    | 
| ------  | 
| Button  | 
| Button  | 
|    | 
|    | 
|    | 
______________ 

それがために何らかの理由でボタンとセパレータの間に1トンのスペースが入るので、次のようになります。

______________ 
|    | 
| ------  | 
|    | 
|    | 
|    | 
| Button  | 
| Button  | 
______________ 

私の人生にとって私はできませんJSeparatorの隣にあるボタンを手に入れてください。

+1

[BoxLayoutを使用する方法](http://download.oracle.com/javase/tutorial/uiswing/layout/box.html)私は手動で設定するにはどうすればよい – mre

答えて

4

BoxLayoutはコンポーネントの最大サイズを表します。利用可能なスペースが増えると、コンポーネントは余分なスペースを占めるようになります。あなたは成長しているから、セパレータを防ぐために必要があります。

JSeparator separate = new JSeparator(SwingConstants.HORIZONTAL); 
System.out.println(separate.getPreferredSize()); 
System.out.println(separate.getMaximumSize()); 
Dimension d = separate.getPreferredSize(); 
d.width = separate.getMaximumSize().width; 
separate.setMaximumSize(d); 
+0

hmmm信じられない+1 – mKorbel

+0

完璧、ありがとう! – Grammin

0

Yアラインメント(.getAlignmentY())が同じでない場合、BoxLayoutはファンキーなことを起こしがちです。アライメントを手動で最上部に設定してみてください。 (同じことがBoxLayoutのX位置合わせで起こります。)

+0

アラインメント? – Grammin

+0

[整列の問題の修正](http://download.oracle.com/javase/tutorial/uiswing/layout/box.html#alignment)では、配置方向がレイアウトの方向と直交することが示されています。私はこれが助けになるとは思わない。 – trashgod

関連する問題