代码之家  ›  专栏  ›  技术社区  ›  Draemon

在miglayout中扩展/增长bug?

  •  4
  • Draemon  · 技术社区  · 15 年前

    以下内容接近我想要的,并按我的期望执行:

    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");
    

    也就是说,将跨距组件改为X和Y增长,标签1单元格在X增长,尽管它不应该。

    有人知道我能绕过这个吗?

    2 回复  |  直到 15 年前
        1
  •  3
  •   Draemon    15 年前

    找到了一个解决办法,虽然不是完全令人满意。根据 this forum post this forum post ,miglayout从计算组件大小切换到计算涉及跨度的列大小。在布局约束中将“fill”替换为“filly”,然后为应允许增长的每一列添加“grow”列约束似乎可以解决问题。

    工作代码:

    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);
        }
    }
    
        2
  •  1
  •   L. Cornelius Dol    15 年前

    你也可以试试我的 MatrixLayout 作为备选方案的布局管理器。这个概念类似于基于MIG布局表。它没有那么强大,但是(对我来说)使用起来似乎要简单得多(强大的力量带来巨大的复杂性)。但是,老实说,那可能只是因为我没有努力理解米格的布局。