2013-07-31 3 views
3

Я новичок в MigLayout. Я пытаюсь создать макет, подобную этой:Возможно ли «перезагрузить» MigLayout

enter image description here

Там есть ряд равноотстоящих кнопок, а затем ряд со списком, который охватывает все столбцы и растет, чтобы заполнить имеющиеся вертикальные пробел, за которым следует заключительная строка с несколькими элементами управления.

Я могу получить первые два ряда без особых трудностей.

Однако, когда я добавляю содержимое последней строки, MigLayout (по праву) пытается сохранить столбцы первых двух строк. Я оставил что-то вроде этого:

enter image description here

Этикетка и кок в последней строке расширить ширину столбцов и я остался с неровными зазорами в верхнем ряду.

Есть ли способ сообщить MigLayout, что я хочу забыть о установленных/установленных рядах/столбцах и «начать новый», или это решение для создания вложенного макета?

Вот полный пример панели.

public class TestPanel extends JPanel { 

    JButton button1 = new JButton("Button 1"); 
    JButton button2 = new JButton("Button 2"); 
    JButton button3 = new JButton("Button 3"); 
    JButton button4 = new JButton("Button 4"); 
    JButton button5 = new JButton("Button 5"); 

    JList list = new JList(new String[]{"some", "fake", "data"}); 

    JLabel label = new JLabel("this is my long label"); 
    JSpinner spinner = new JSpinner(); 
    JCheckBox checkbox = new JCheckBox("Check me"); 

    public TestPanel() { 
     initComponents(); 
    } 

    private void initComponents() { 

     setLayout(new MigLayout()); 

     add(button1); 
     add(button2); 
     add(button3); 
     add(button4); 
     add(button5, "wrap"); 

     add(list, "span, growx, growy, wrap"); 

     // without these 3 lines, the row of buttons are equally spaced 
     // adding the long label extends the width of the first column 
     add(label); 
     add(spinner); 
     add(checkbox, "span, align right"); 
    } 
} 
+0

хорошо вы нашли решение - но я не могу воспроизвести неправильное поведение, вы можете описать (по крайней мере с фрагментом) – kleopatra

+0

я добавил полный пример и снимок экрана. Я не считаю это неправильным поведением - просто я не использую его должным образом. – zmb

+0

означало неправильное, как отличное от вашего ожидания :-) спасибо за полный пример, не пробовал длинную метку – kleopatra

ответ

2

Я смог достичь желаемого расположения путем слияния и разделения ячеек.

setLayout(new MigLayout()); 
add(button1); 
add(button2); 
add(button3); 
add(button4); 
add(button5, "wrap"); 
add(list, "span, growx, growy, wrap"); 

// merge 4 cells then split the combined cell in half 
// label goes in the first cell of the split 
// spinner goes in the second cell of the split 
add(label, "span 4, split 2); 
add(spinner); 
// check box goes in the 5th and final cell of the row (after the 4 merged cells) 
add(checkBox, "align right"); 

Вот результат:

enter image description here

Смежные вопросы