Вопрос
Следующее близко к тому, что я хочу, и делает то, что я ожидаю:
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, хотя это не должно.
Кто -нибудь знает, как я могу обойти это?
Решение
Нашел обходной путь, хотя и не совсем удовлетворительный. Согласно с этот пост форума а также этот пост форума, 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("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);
}
}
Другие советы
Вы также можете попробовать мой Matrixlayout Менеджер макета в качестве альтернативы. Концепция похожа на макет MIG - таблица. Это не так мощно, но кажется (для меня, во всяком случае) гораздо проще в использовании (с большой силой приходит большая сложность). Но, честно говоря, это может быть просто потому, что я не изо всех сил пытался понять макет MIG.