2012-01-21 3 views
3

의 하단에 머물 버튼을 필요, 나는 ;-)내가 원래 miglayout 포럼에서 534 개보기없이 대답 한 후이 질문을 게시 내 대화

나는 "초기를 확장하는 시도가 그것을 시도하기로 결정 예 "를 MigLayout 백서에서 선택하여 대화 상자의 맨 아래에 항상있는"확인 "버튼을 추가하십시오.

불행하게도, 내가 찾은 유일한 해결책은 성장할 것 "가짜 패널"을 추가했다 :

public class TestResize extends JDialog { 
    protected JPanel contentPane; 

    public TestResize() { 
     super((Dialog) null, "Test resize", true); 
     setupUI(); 
     setContentPane(contentPane); 
    } 

    private void setupUI() { 
     contentPane = new JPanel(new MigLayout()); 
     contentPane.add(new JLabel("Enter size:"), ""); 
     contentPane.add(new JTextField(""), "grow, pushx, wrap"); 
     contentPane.add(new JLabel("Enter weight:"), ""); 
     contentPane.add(new JTextField(""), "grow, pushx, wrap"); 
     // fake panel that is allowed to grow 
     contentPane.add(new JPanel(), "span 2, grow, pushy, wrap"); 
     JButton okButton = new JButton("Ok"); 
     JPanel buttonPanel = new JPanel(new MigLayout("", "[center, grow]")); 
     buttonPanel.add(okButton, ""); 
     contentPane.add(buttonPanel, "dock south"); 
    } 

    public static void main(String[] args) { 
     TestResize dialog = new TestResize(); 
     dialog.pack(); 
     dialog.setVisible(true); 
    } 
} 
정말 모두이 방식을 좋아하지 않아 ...하지만 더 나은 방법이

?

(나는 사진을 업로드 할 수 없습니다 것 같은 같은데,하지만 난 얻을하려는 UI는 in my original post 볼 수 있습니다)

감사합니다!

new MigLayout(
     "",     // Layout Constraints 
     "[][]",    // Column constraints 
     "[][][]:push[]"); // Row constraints 

합니다 (cheatsheet의 "열/행 제한"절을 참조하십시오) : 행의 두 사람 사이에 "푸시"당신이 명시 적 그리드로 MigLayout를 구성하는 경우

+0

* "성장할 것"가짜 패널 "불행하게도, 내가 찾은 유일한 해결책은 추가 할 수 있었다"*에 대한 불행한 무엇입니까 그? 추가 패널은 중첩 된 레이아웃에서 상당히 일반적입니다. 문제 없어. –

+1

@AndrewThompson 고급 LayoutManager의 전반적인 개념은 중첩 패널이나 접착제 나 다른 더미 구성 요소와 같은 해킹을 사용하지 않는 것입니다 .-) MigLayout의 중첩 및 더미 구성 요소는 로랑 느낌과 마찬가지로 무언가를 잘못하는 매우 강력한 지표입니다. – kleopatra

+0

@ kleopatra Ehh .. 작은 접착제와 오리 테이프에 문제 없습니다. ;) 그러나 더 진지하게, 나는 당신의 요점을 본다. 나는 더 큰 그림을보기 위해 J2SE 레이아웃을 핵심으로 삼기도한다. –

답변

4

, 당신은있을 수 있습니다

편집 :

는 사실, 더 나은 솔루션은 이전 행의 마지막에 "랩 푸시"를 사용하는 것입니다. 그럼 당신은 명시 적으로 그리드의 행 수를 설정할 필요가 없습니다 :

contentPane.add(new JPanel(), "span 2, grow, pushy, wrap push"); 
+0

예, 정확히 내가 필요한 것 : bye "fake panel"과 감사합니다. 러셀! –

+0

또는 마지막 구성 요소에서 프레임의 맨 아래로 밀어 넣으려는 "개행 푸시"를 사용할 수 있습니다. –