2012-01-01 17 views
4

私はこの糊の仕事をする方法のデモンストレーションを取得したいと思います。私はそれを働かせようとしていて、何も起こらないようにしようとしていました...GUI上のGlueを使用して、Java

良い例は、CenteringPanelクラスの実装です.JComponentを取得して中心に置き、中心にウィンドウ...私はそのような何かをコーディングしようとした:

import javax.swing.Box; 
import javax.swing.BoxLayout; 
import javax.swing.JComponent; 
import javax.swing.JPanel; 


public class CenteringPanel extends JPanel{ 
    private static final long serialVersionUID = 1L; 
    public CenteringPanel(JComponent toCenter) { 
     setLayout(new BoxLayout(this,BoxLayout.Y_AXIS)); 
     add(Box.createHorizontalGlue()); 
     add(Box.createVerticalGlue()); 
     add(toCenter); 
     add(Box.createVerticalGlue()); 
     add(Box.createHorizontalGlue()); 
    } 

} 
+0

どうしてBorderLayoutを使用せず、コンポーネントを中央に置くのですか? – LazyCubicleMonkey

+0

それは伸ばします、私は伸ばされるべきコンテンツを伸ばしたくありません。 –

+0

'BoxLayout'が垂直であるときに水平接着剤を使用するのは意味がありますか? – sarnold

答えて

4

あなたの目標は、コンポーネントを中央にある場合は、GridBagLayoutはうまく仕事をする:

public class CenteringPanel extends JPanel { 
    public CenteringPanel(JComponent child) { 
     GridBagLayout gbl = new GridBagLayout(); 
     setLayout(gbl); 
     GridBagConstraints c = new GridBagConstraints(); 
     c.gridwidth = GridBagConstraints.REMAINDER; 
     gbl.setConstraints(child, c); 
     add(child); 
    } 
} 

GridBagLayoutのは、その1つのセルを作成します。パネルを塗りつぶす。制約のデフォルト値は、セル内の各コンポーネントを水平方向と垂直方向の両方でセンタリングし、どちらの方向も埋めることはありません。

BoxLayoutでGlueを使用してコンポーネントを中央に配置することを目標とすると、ジョブは少し複雑になります。コンポーネントが垂直に積み重ねられているため(水平BoxLayoutの場合も同様です)、垂直のBoxLayoutを使用して水平のグルーを追加しても効果はありません。その代わりに、子のサイズを制限し、その配置を使用する必要があります。私はそれを試していないが、垂直BoxLayoutのために、このような何かが動作するはずです:

public class CenteringPanel { 
    public CenteringPanel(JComponent child) { 
     setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); 
     GridBagConstraints c = new GridBagConstraints(); 
     child.setMaximumSize(child.getPreferredSize()); 
     child.setAlignmentX(Component.CENTER_ALIGNMENT); 
     add(Box.createVerticalGlue()); 
     add(child); 
     add(Box.createVerticalGlue()); 
    } 
} 
+0

私はまだ糊について学びたいと思っていますが、それもいいです、あなたがそこで何をしたのか少し説明できますか? –

+0

@OfekRon - 私の答えを更新しました –

関連する問題