2012-01-01 4 views
4

나는이 접착제 일을 만드는 방법에 대한 데모를 얻고 싶습니다; 나는 그것을 작동 시키려고 노력했지만 아무 일도 일어나지 않았다.GUI에서 접착제를 사용하여, 자바

좋은 예제는 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

그것은 stretchs, 나는 콘텐츠가 늘어나고 싶지 않아 –

+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에가 단일 셀을 만들 것이다 그 패널을 채 웁니다. 구속 조건의 기본값은 셀의 각 구성 요소를 수평 및 수직으로 가운데에 배치하고 어느 방향으로도 채우지 않는 것입니다.

목표가 BoxLayout에서 접착제를 사용하여 구성 요소를 가운데로 맞추는 것이라면 작업이 좀 더 복잡해집니다. 수직 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 - 내 대답 업데이트 –