我有一个使用FlowLayout的JPanel。我向JPanel添加了许多JLabel,使用setPreferedSize()调整它们的大小并将它们保存在list_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(调整面板大小)后,每个尺寸都恢复正常。
答案 0 :(得分:5)
然后我想改变它们的大小:
for(JLabel c:label_list){c.setPreferedSize(new Dimension(10,10)); }
它不起作用。
您需要在标签的父级上调用revalidate()
,以便它重新执行布局并强制执行其首选大小。
c.setBounds(1,1,10,10)和c.setSize(10,10)工作,但在我更新后 用户界面(调整面板大小)每个尺寸都恢复正常。
手动设置边界/大小/位置与父容器的LayoutManager冲突。 LayoutManager的工作是定位和调整子组件的大小。
将布局设置为null
并调用自己的setSize-setLocation / setBounds,或使用LayoutManager(推荐)并且永远不要调用setSize-setLocation / setBounds。最多可以调用setPreferred / setMaximum / setMinimum大小但是尽量避免这种情况,因为它会导致交叉L& F问题。