在FlowLayout中设置JLabel的大小

时间:2012-07-10 09:39:20

标签: java swing jlabel flowlayout

我有一个使用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(调整面板大小)后,每个尺寸都恢复正常。

1 个答案:

答案 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问题。