在FlowLayout中设置JLabel的大小

use*_*145 5 java swing jlabel flowlayout

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

for(JLabel c:label_list){
c.setPreferedSize(new Dimension(10,10));
}
Run Code Online (Sandbox Code Playgroud)

它不起作用.

c.setBackground(Color.red)
Run Code Online (Sandbox Code Playgroud)

和类似的东西工作.为什么我不能在这里使用setPreferedSize?

c.setBounds(1,1,10,10)和c.setSize(10,10)工作,但在我更新UI(调整面板大小)后,每个尺寸都恢复正常.

Gui*_*let 5

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

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

它不起作用.

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

c.setBounds(1,1,10,10)和c.setSize(10,10)工作,但在我更新UI(调整面板大小)后,每个尺寸都恢复正常.

手动设置边界/大小/位置与父容器的LayoutManager冲突.LayoutManager的工作是定位子组件并调整其大小.

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