我们调整窗口大小时容器中的元素如何调整?

时间:2015-07-29 14:04:50

标签: java swing window panel frame

以下是用户单击按钮时更改颜色的窗口代码,并在单击其他按钮时更改标签文本。

它有两个按钮,一个用于按住按钮的面板,一个标签和一个用于图形的面板。

概念解释:     首先,我使用默认labelNorth添加到frame的{​​{1}}部分。然后我在单独的面板中添加了两个BorderLayout,并将buttons添加到主panel的{​​{1}}部分。然后,我在主South的{​​{1}}中添加了frame图片。

panel

这是上面代码的输出。太好了。

enter image description here

但是当我从右侧开始滑动时,会发生以下情况:

enter image description here

现在窗户的右墙朝左,但按钮是静止的。接下来我们得到:

enter image description here

但是,如果我们从左侧调整大小,我们会得到:

enter image description here

此处按钮似乎与框架一起向右移动(保持其与框架边界的距离)。这与前一案例相反。但为什么?怎么样?

最后,我们有:

enter image description here

继续这一点,“ColorChange”按钮也变得部分不可见。

如果我们从右向左滑动而从左向右滑动,为什么会发生这两种不同的事情呢?

我已经搜索过,但我无法找到准确的答案,所以最后我在这里问:为什么和如何?

3 个答案:

答案 0 :(得分:3)

您已解释了该问题,但您尚未解释该要求。

也许你应该考虑Box Layout

panel.add( Box.createHorizontalGlue() );
panel.add( button1 );
panel.add( Box.createHorizontalStrut(20) );
panel.add( button2 );
panel.add( Box.createHorizontalGlue() );

这将创建一个面板,其中按钮保持居中,两个按钮之间的间隙为20像素。

答案 1 :(得分:2)

这是因为你的差距值

int pad = 80;
buttonPanel.setLayout(new FlowLayout(FlowLayout.LEADING, pad, 20));

。它总是80px。所以第一个按钮总是 80px远离"开头"小组的。如果你从右向左滑动,没有任何变化,除了一个按钮消失,因为没有足够的空间来填补3个间隙。但是,如果您从左向右滑动,第一个按钮不会首先消失,因为如前所述, 从开头有80px的差距。对不起我的悲惨英语,但我希望我能帮到你。

答案 2 :(得分:1)

这可能是您所需要的:https://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/size.html

我暂时没有使用Swing / JavaFX,但我相信你可以提供frame.pack();一枪。