我需要使用标准的Swing布局管理器或Mig。
来布局几个组件我有一个类似于媒体播放器轨道栏和控制器的控件。控制按钮(即,在指示当前位置的轨迹栏下方快退,播放,快进):
<-----------------[CURRENT POSITION]----------------------------------------->
[-------------------------------[RW][PLAY][FF]------------------------------->
播放按钮必须与轨迹栏保持100%居中。但是,我需要引入一个右对齐的附加复选框,而不会偏移其他按钮,如下所示:
<-----------------[CURRENT POSITION]----------------------------------------->
[-[CB]--------------------------[RW][PLAY][FF]------------------------------->
答案 0 :(得分:1)
[-[CB]--------------------------[RW][PLAY][FF]---------------------------[DC]>
在面板右侧添加“虚拟组件”(DC)。将其宽度设置为与复选框的宽度相同。这将使您的按钮在屏幕上居中。您应该能够为此组件使用Box.createHorizontalStrut(...)。
您可以使用水平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");