2009-07-21 69 views
4

以下是接近我想要什麼,做什麼,我希望:跨度/在MigLayout中增加錯誤?

import javax.swing.JComboBox; 
import javax.swing.JPanel; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JTextField; 

import net.miginfocom.swing.MigLayout; 

public class MigBug extends JFrame { 

    public static void main(String args[]) { 
     MigBug migbug = new MigBug(); 
     migbug.pack(); 
     migbug.setVisible(true); 
    } 

    public MigBug() { 
     JPanel content = new JPanel(); 
     content.setLayout(new MigLayout("fill, debug")); 

     content.add(new JLabel("Label 1")); 
     content.add(new JComboBox()); 

     content.add(new JLabel("Label 2")); 
     content.add(new JTextField(25), "growx, wrap"); 

     content.add(new JLabel("BIG"), "span, w :400:, h :200:, growy"); 

     setContentPane(content); 
    } 
} 

但是,如果我做了以下變化:

content.add(new JLabel("BIG"), "span, w :400:, h :200:, grow"); 

即。將spanned組件更改爲x和y一樣,Label 1單元格以x增長,即使它不應該。

有沒有人知道我可以繞過這條路?

回答

3

找到了解決方法,雖然不完全令人滿意。根據this forum postthis forum post,MigLayout從計算組件大小切換到計算涉及跨度的列大小。在佈局約束條件中用「filly」代替「填充」,然後爲應該允許增長的每列添加列約束和「增長」似乎可以解決它。

工作代碼:

import javax.swing.JComboBox; 
import javax.swing.JPanel; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JTextField; 

import net.miginfocom.swing.MigLayout; 

public class MigBug extends JFrame { 

    public static void main(String args[]) { 
     MigBug migbug = new MigBug(); 
     migbug.pack(); 
     migbug.setVisible(true); 
    } 

    public MigBug() { 
     JPanel content = new JPanel(); 
     content.setLayout(new MigLayout("filly, debug", "[][grow][][grow]")); 

     content.add(new JLabel("Label 1")); 
     content.add(new JComboBox()); 

     content.add(new JLabel("Label 2")); 
     content.add(new JTextField(25), "growx, wrap"); 

     content.add(new JLabel("BIG"), "span, w :400:, h :200:, grow"); 

     setContentPane(content); 
    } 
} 
1

您也可以嘗試我MatrixLayout佈局管理器作爲替代。這個概念與米格佈局 - 表格相似。它沒有那麼強大,但對我來說似乎(對我而言)使用起來要簡單得多(因爲功率很大,所以很複雜)。但說實話,這可能只是因爲我沒有努力去理解米格佈局。