2014-01-25 31 views
2

我想創建一個帶有底部狀態行的項目的垂直列表,這樣當它被調整大小時,項目和底線之間的空間就會增加。使用MigLayout這必須是非常微不足道的,但不知道它不是。如何在MigLayout中增加空隙

下面的代碼不正是我想要的,但我不得不使用一個組件做間距:

final JFrame frame = new JFrame(); 
final JPanel panel = new JPanel(new MigLayout("wrap, debug", "[grow, fill]", "")); 
for (int i=0; i<5; ++i) { 
    final JEditorPane line = new JEditorPane(); 
    line.setText("a" + i); 
    panel.add(line); 
} 
panel.add(new JLabel(), "push"); // This should be a gap! 
final JLabel status = new JLabel("status line"); 
panel.add(status, ""); 
frame.add(panel); 
frame.pack(); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
frame.setVisible(true); 

我想我可以指定第三個構造函數參數的差距越來越大,但名單長度是可變的。這也可以全部解決,但我懷疑這是最佳做法。我所希望的是,像gaptop push,但它似乎什麼也沒做。

我在做什麼錯?有什麼我想要的論據嗎?

回答

1

MigLayout確實是一個非常強大的管理者。這可以通過多種方式完成 。我提供三種解決方案。

溶液1

我們把第5行和第6

package com.zetcode; 

import java.awt.EventQueue; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JTextField; 
import net.miginfocom.swing.MigLayout; 


public class MigLayoutGapGrow extends JFrame { 

    public MigLayoutGapGrow() { 

     initUI(); 

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


    private void initUI() { 


     setLayout(new MigLayout("wrap", "[grow, fill]", "[][][][][]20:push[]")); 

     add(new JTextField("a"+1)); 
     add(new JTextField("a"+2)); 
     add(new JTextField("a"+3)); 
     add(new JTextField("a"+4)); 
     add(new JTextField("a"+5)); 

     final JLabel status = new JLabel("status line"); 
     add(status); 


     pack(); 
    } 


    public static void main(String[] args) { 

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

溶液2

之間的間隙貪婪我們放大,其中標籤被放置在最後一個單元。標籤然後對齊到底部 。

package com.zetcode; 

import java.awt.EventQueue; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JTextField; 
import net.miginfocom.swing.MigLayout; 


public class MigLayoutGapGrow2 extends JFrame { 

    public MigLayoutGapGrow2() { 

     initUI(); 

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


    private void initUI() { 

     setLayout(new MigLayout("wrap, debug", "[grow, fill]")); 

     add(new JTextField("a"+1)); 
     add(new JTextField("a"+2)); 
     add(new JTextField("a"+3)); 
     add(new JTextField("a"+4)); 
     add(new JTextField("a"+5)); 

     final JLabel status = new JLabel("status line"); 
     add(status, "pushy, bottom"); 

     pack(); 
    } 


    public static void main(String[] args) { 

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

溶液3

標籤粘貼到使用相對定位的底部。相對 定位似乎不適用於pack()方法,這可能是 是一個問題。

package com.zetcode; 

import java.awt.EventQueue; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JTextField; 
import net.miginfocom.swing.MigLayout; 


public class MigLayoutGapGrow3 extends JFrame { 

    public MigLayoutGapGrow3() { 

     initUI(); 

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


    private void initUI() { 

     setLayout(new MigLayout("wrap", "[grow, fill]")); 

     add(new JTextField("a"+1), "id a1"); 
     add(new JTextField("a"+2)); 
     add(new JTextField("a"+3)); 
     add(new JTextField("a"+4)); 
     add(new JTextField("a"+5)); 

     final JLabel status = new JLabel("status line"); 
     add(status, "pos a1.x visual.y2-p"); 

     pack(); 
    } 


    public static void main(String[] args) { 

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

Gaps

0

如果您在組件上添加推送,則它具有不同的semnatic。從docs

使組件所在的行和/或列與「weight」一起增長。這可以用來代替在列/行約束中具有「增長」關鍵字。

所以你必須添加push關鍵字作爲行約束。