将一个组件对齐,将其他几个组件对齐死点

时间:2011-02-25 03:18:41

标签: java swing layout

我需要使用标准的Swing布局管理器或Mig。

来布局几个组件

我有一个类似于媒体播放器轨道栏和控制器的控件。控制按钮(即,在指示当前位置的轨迹栏下方快退,播放,快进):

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

播放按钮必须与轨迹栏保持100%居中。但是,我需要引入一个右对齐的附加复选框,而不会偏移其他按钮,如下所示:

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

3 个答案:

答案 0 :(得分:1)

[-[CB]--------------------------[RW][PLAY][FF]---------------------------[DC]> 

在面板右侧添加“虚拟组件”(DC)。将其宽度设置为与复选框的宽度相同。这将使您的按钮在屏幕上居中。您应该能够为此组件使用Box.createHorizo​​ntalStrut(...)。

您可以使用水平BoxLayout执行行布局。添加复选框,然后是一些水平胶水,然后是按钮,一些更多的水平胶水,最后是水平支柱。

答案 1 :(得分:1)

您可以使用包含1行和几列的GridLayout; 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

答案 2 :(得分:0)

我最终使用了以下内容:

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