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(调整面板大小)后,每个尺寸都恢复正常.
然后我想改变它们的大小:
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问题.