2014-03-03 4 views
0

저는 오른쪽, 위쪽 및 나머지 공간을 채우는 3 개의 패널로 구성된 MigLayout을 사용하여 레이아웃을 만들려고했습니다. 이처럼MigLayout 특정 레이아웃

: 가능한 몇 가지 솔루션이 있습니다

enter image description here

답변

1

. 나는 두 가지 예를 제시한다. 두 예제 모두 패널의 너비와 높이를 각각 으로 설정했습니다. 일반적으로 패널은 아이들이 에서 선호하는 패널을 가져옵니다.

첫 번째 레이아웃은 dock 제약 조건으로 수행됩니다.

package com.zetcode; 

import java.awt.EventQueue; 
import javax.swing.BorderFactory; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import net.miginfocom.swing.MigLayout; 


public class MigLayoutThreePanels extends JFrame { 

    public MigLayoutThreePanels() { 

     initUI(); 

     setTitle("Three panels"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLocationRelativeTo(null); 
    } 

    private void initUI() { 

     setLayout(new MigLayout()); 

     JPanel pnl1 = new JPanel(); 
     pnl1.setBorder(BorderFactory.createEtchedBorder()); 
     JPanel pnl2 = new JPanel(); 
     pnl2.setBorder(BorderFactory.createEtchedBorder()); 
     JPanel pnl3 = new JPanel(); 
     pnl3.setBorder(BorderFactory.createEtchedBorder()); 


     add(pnl2, "w 40, dock east"); 
     add(pnl1, "h 40, dock north"); 
     add(pnl3, "w 250, h 200, dock center"); 

     pack(); 
    } 


    public static void main(String[] args) { 

     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       MigLayoutThreePanels ex = new MigLayoutThreePanels(); 
       ex.setVisible(true); 
      } 
     }); 
    } 
} 

3 개의 패널이 동쪽, 북쪽 및 중앙에 도킹됩니다. 간격 제한으로 패널 사이의 추가 공백을 만들 수 있습니다. 두 번째 예에서

First solution

, 우리는 격자 구조를 활용 사용.

package com.zetcode; 

import java.awt.EventQueue; 
import javax.swing.BorderFactory; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import net.miginfocom.swing.MigLayout; 


public class MigLayoutThreePanels2 extends JFrame { 

    public MigLayoutThreePanels2() { 

     initUI(); 

     setTitle("Three panels"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLocationRelativeTo(null); 
    } 

    private void initUI() { 

     setLayout(new MigLayout("gap 3 3")); 

     JPanel pnl1 = new JPanel(); 
     pnl1.setBorder(BorderFactory.createEtchedBorder()); 
     JPanel pnl2 = new JPanel(); 
     pnl2.setBorder(BorderFactory.createEtchedBorder()); 
     JPanel pnl3 = new JPanel(); 
     pnl3.setBorder(BorderFactory.createEtchedBorder()); 

     add(pnl1, "h 40, growx"); 
     add(pnl2, "w 40, spany 2, growy, wrap"); 
     add(pnl3, "w 250, h 200, grow, push"); 

     pack(); 
    } 


    public static void main(String[] args) { 

     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       MigLayoutThreePanels2 ex = new MigLayoutThreePanels2(); 
       ex.setVisible(true); 
      } 
     }); 
    } 
} 

이 예에서는 셀과 컨테이너 인세 트 사이에 몇 가지 간격을 설정합니다.

Second example