2009-07-21 11 views
4

Das folgende ist in der Nähe, was ich will, und tut, was ich erwarten:Span/Grow Fehler in 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); 
    } 
} 

Wenn ich jedoch die folgende Änderung vornehmen:

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

dh. Ändern Sie die übergreifende Komponente so, dass sie sowohl in x als auch in y wächst. Die Zelle mit der Bezeichnung 1 wächst in x, obwohl dies nicht der Fall ist.

Kennt jemand einen Weg, wie ich das umgehen kann?

Antwort

3

Eine Problemumgehung gefunden, wenn auch nicht ganz zufriedenstellend. Nach this forum post und this forum post wechselt MigLayout von der Berechnung von Komponentengrößen zur Berechnung von Spaltengrößen, bei denen eine Spannweite beteiligt ist. Ersetzen Sie "fill" durch "filly" in den Layout-Beschränkungen, dann scheint das Hinzufügen von Spaltenbeschränkungen mit "grow" für jede Spalte, die wachsen darf, es zu beheben.

Arbeitscode:

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

Sie könnten auch meinen MatrixLayout Layout-Manager als Alternative versuchen. Das Konzept ist ähnlich wie bei MiG Layout - Tabellen basiert. Es ist nicht so mächtig, aber es scheint (für mich, jedenfalls) viel einfacher zu benutzen (mit großer Macht kommt große Komplexität). Aber, um ehrlich zu sein, könnte das nur daran liegen, dass ich nicht versucht habe, MiG Layout zu verstehen.

Verwandte Themen