Domanda

Quello che segue è vicino a quello che voglio, e fa quello che mi aspetto:

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

Tuttavia, se faccio la seguente modifica:

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

es. Modificare il componente spanning a crescere in x, così come y, la cella Etichetta 1 si sviluppa in x, anche se non dovrebbe.

Qualcuno sa un modo per aggirare questo?

È stato utile?

Soluzione

Trovato una soluzione, anche se non del tutto soddisfacente. Secondo il forum messaggio e questo forum alberino , MigLayout commuta da calcolare dimensioni dei componenti, per il calcolo delle dimensioni della colonna in cui è coinvolto un arco. Sostituzione "riempire" con "puledra" nei vincoli di layout, quindi l'aggiunta di vincoli di colonna con "crescere" per ogni colonna che dovrebbe essere permesso di crescere sembra risolvere il problema.

Codice di funzionamento:

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

Altri suggerimenti

Si potrebbe anche provare la mia MatrixLayout gestore di layout come alternativa. Il concetto è simile a quello del MiG layout - tabella basata. Non è così potente, ma sembra (a me, comunque) molto più semplice da utilizzare (con grande potere derivano grandi complessità). Ma, ad essere onesti, che potrebbe essere solo perché non ho provato difficile capire MiG layout.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top