2009-07-21 5 views
4

Ce qui suit est proche de ce que je veux, et est-ce que je pense:Bogue Span/Grow dans 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); 
    } 
} 

Cependant, si je fais le changement suivant:

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

ie. Modifier le composant étendu pour croître en x et y, la cellule Label 1 croît en x, même si ce n'est pas le cas.

Est-ce que quelqu'un sait comment contourner cela?

Répondre

3

Trouvé une solution de contournement, mais pas entièrement satisfaisante. Selon this forum post et this forum post, MigLayout bascule du calcul des tailles de composants, au calcul des tailles de colonne où une plage est impliquée. Remplacer "fill" par "Filly" dans les contraintes de mise en page, puis ajouter des contraintes de colonne avec "grow" pour chaque colonne qui devrait être autorisée à croître semble le réparer.

Code de travail:

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

Vous pouvez également essayer mon manager MatrixLayout de mise en page comme une alternative. Le concept est similaire à MiG Layout - basé sur une table. Ce n'est pas aussi puissant, mais il semble (pour moi, de toute façon) beaucoup plus simple à utiliser (avec une grande puissance vient une grande complexité). Mais, pour être honnête, c'est peut-être parce que je n'ai pas essayé de comprendre MiG Layout.