2014-01-15 5 views
1

Я использую MigLayout для добавления компонентов в JPanel в Java. Моя проблема заключается в том, что, несмотря на добавление «обертывания» к ограничениям ячеек, оно не работает последовательно. Некоторые компоненты обертывают, а некоторые нет - обратите внимание конкретно на изображение последней строки (которая должна быть 2 строки).MugLayout «wrap» не ведет себя последовательно

JPanel panel = new JPanel(new MigLayout("gap 0, insets 0", "","")); 

JButton delete = new JButton("Delete"); 
JButton zoomSel = new JButton("Zoom Sel"); 
JButton zoomReset = new JButton("Zoom Reset"); 

panel.add(delete, "span 2 2, grow"); 
panel.add(zoomSel, "spanx 2, growx, wrap"); 
panel.add(zoomReset,"growx,wrap 5"); 

JButton cut = new JButton("Cut"); 
JButton copy = new JButton("Copy"); 
JButton paste = new JButton("Paste"); 
JButton loopSelRgn = new JButton("Loop Sel. Rgns"); 
JButton selRgnRow = new JButton("Sel Rgns Row"); 

panel.add(cut); 
panel.add(copy); 
panel.add(loopSelRgn, "spanx 2, growx, wrap"); 
panel.add(paste, "spanx 2, growx"); 
panel.add(selRgnRow, "spanx 2,growx,wrap 5"); 

JButton duplicate = new JButton("Duplicate"); 
JButton selectAll = new JButton("Select All"); 
JButton mute = new JButton("Mute"); 
JButton shift = new JButton("Shift"); 

panel.add(duplicate, "span 2 2, grow"); 
panel.add(selectAll, "span 2 2, grow, wrap"); 

panel.add(mute, "spanx 2, growx"); 
panel.add(shift, "spanx 2, growx"); 

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

ответ

1

Я не могу понять, почему вы используете wrap 5, когда это выглядит, как вам нужно 4. Я считаю, что достиг того, что вы хотите просто

  • добавления wrap 4 к первому аргумента конструктора
  • с использованием wrap (без аргументов) для каждого последнего компонента строки, когда это необходимо
+0

правильного направления, только пара замечаний: а) «завернуть 5» имеет другое значение, как макет vs. component: только первое означает «обернуть после 5 ячеек», в то время как последнее означает «обернуть с шириной строки 5» b), если обертка определена в макете, обычно нет необходимости добавлять их в компоненты – kleopatra

+0

@ kleopatra: Спасибо за информацию, очень ценим! Я довольно новичок в этом и хотел помочь, поскольку в течение 10 дней ответа не было. – maaartinus

-1

технической причина заключается в рядном пролет кнопки дубликата/SelectAll (что намерено?): вы оберточной первый из пролетного ро w, оставив второе для следующих компонентов. Вы можете сделать этот факт видимым, добавив пробел в обертку, например f.i.

panel.add(duplicate, "span 2 2, grow"); 
panel.add(selectAll, "span 2 2, grow, wrap 10"); 

Технически, вы можете решить эту проблему с помощью новой строки ограничения:

panel.add(mute, "newline, spanx 2, growx"); 
panel.add(shift, "spanx 2, growx"); 

Реальное решение будет рефакторинга ограничения:

  • двигаться как можно больше в макете (как @martinuus уже предложил)
  • сделать их максимально простыми: поскольку почти все кнопки охватывают ячейки, более простая альтернатива заключается в том, чтобы сделать эти норма (ака: 1 колонок) и разделить вырезать/копировать

что-то вроде:

JPanel panel = new JPanel(new MigLayout("gap 0, insets 0, wrap 2", "","")); 

panel.add(delete, "spany 2, grow"); 
panel.add(zoomSel, "growx"); 
panel.add(zoomReset,"growx"); 

panel.add(cut, "split 2"); 
panel.add(copy); 
panel.add(loopSelRgn, "growx"); 
+0

Мне нравится трюк 'split'. Я думал об использовании трех столбцов, но не знал, как сделать последнюю ширину, как первый, так и второй, а также пробел. Есть ли способ? – maaartinus

+0

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