2014-03-03 53 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); 
      } 
     }); 
    } 
} 

三個面板停靠在東面,北面和中心。間隙約束可以創建 面板之間的額外空間。

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