5

我有一个使用 FlowLayout 的 JPanel。我在 JPanel 中添加了一些 JLabel,使用 setPreferedSize() 调整它们的大小并将它们保存在一个列表 label_list 中。一切正常。然后我想改变它们的大小:

for(JLabel c:label_list){
c.setPreferedSize(new Dimension(10,10));
}

它不起作用。

c.setBackground(Color.red)

和类似的东西有效。为什么我不能在这里使用 setPreferedSize?

c.setBounds(1,1,10,10) 和 c.setSize(10,10) 有效,但是在我更新 UI(调整面板大小)之后,每个大小都会恢复正常。

4

1 回答 1

5

然后我想改变它们的大小:

for(JLabel c:label_list){ c.setPreferedSize(new Dimension(10,10)); }

它不起作用。

您需要调用revalidate()标签的父级,以便它重新执行布局并强制执行它们的首选大小。

c.setBounds(1,1,10,10) 和 c.setSize(10,10) 有效,但是在我更新 UI(调整面板大小)之后,每个大小都会恢复正常。

手动设置 bounds/size/location 与父容器的 LayoutManager 冲突。LayoutManager 的工作是定位和调整子组件的大小。

将布局设置为null并调用自己 setSize-setLocation/setBounds,或者使用 LayoutManager(推荐)并且永远不要调用 setSize-setLocation/setBounds。最多可以调用 setPreferred/setMaximum/setMinimum 大小,但尽量避免这种情况,因为它会导致交叉 L&F 问题。

于 2012-07-10T10:18:22.473 回答