Выровняйте один компонент справа и несколько других мертвых точек - PullRequest
0 голосов
/ 25 февраля 2011

Мне нужно расположить несколько компонентов, используя только стандартные менеджеры разметки Swing или Mig.

У меня есть элемент управления, аналогичный элементу управления трек-панели медиаплеера и кнопкам управления (т. Е. Перемотка назад, воспроизведение, быстрая перемотка вперед нижеполоса трека, указывающая текущую позицию):

<-----------------[CURRENT POSITION]----------------------------------------->
[-------------------------------[RW][PLAY][FF]------------------------------->

Кнопка воспроизведения должна оставаться на 100% центрированной по отношению к полосе трека.Однако мне нужно ввести дополнительный флажок, который выровнен по правому краю без смещения других кнопок, например:

<-----------------[CURRENT POSITION]----------------------------------------->
[-[CB]--------------------------[RW][PLAY][FF]------------------------------->

Ответы [ 3 ]

1 голос
/ 25 февраля 2011

Вы можете использовать GridLayout с 1 строкой и парой столбцов; GridLayout автоматически распределяет ваши компоненты равномерно, чтобы соответствовать Panel.

Так что вы можете иметь что-то вроде

controlsPanel.setLayout(new GridLayout(1, 5));

controlsPanel.add(checkbox);
controlsPanel.add(rewindButton);
controlsPanel.add(playButton); //in the center
controlsPanel.add(fastForwardButton);
controlsPanel.add(new JLabel()); //placeholder for the grid

и GridLayout автоматически сделает все те же размеры и интервалы.

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

controlsPanel.setLayout(new GridLayout(1, 7));

controlsPanel.add(checkbox);
controlsPanel.add(new JLabel); //left placeholder
controlsPanel.add(rewindButton);
controlsPanel.add(playButton); //in the center
controlsPanel.add(fastForwardButton);
controlsPanel.add(new JLabel); //right placeholder
controlsPanel.add(new JLabel()); //final placeholder
1 голос
/ 25 февраля 2011
[-[CB]--------------------------[RW][PLAY][FF]---------------------------[DC]> 

Добавьте «фиктивный компонент» (DC) к правой стороне панели. Установите его ширину равной ширине с флажком. Это будет держать ваши кнопки в центре экрана. Вы должны быть в состоянии использовать Box.createHor horizontalStrut (...) для этого компонента.

Вы можете сделать макет строки, используя горизонтальный BoxLayout. Добавьте флажок, затем немного горизонтального клея, затем кнопки, еще немного горизонтального клея и, наконец, горизонтальную стойку.

0 голосов
/ 02 марта 2011

Я использовал следующее:

setLayout(new MigLayout("fillx", "[200][][200]", ""));
JPanel buttonPanel = new JPanel();
buttonPanel.add(firstButton);
buttonPanel.add(reverseButton);
buttonPanel.add(playButton);
buttonPanel.add(forwardButton);
buttonPanel.add(lastButton);

add(maintainCurrentTimeCheckBox, "grow");
add(buttonPanel, "grow");
add(currentTimeLabel, "grow");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...