【问题标题】:Set size of JLabel in FlowLayout在 FlowLayout 中设置 JLabel 的大小
【发布时间】:2012-07-10 09:39:19
【问题描述】:

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

【问题讨论】:

  • 您是否要求容器重新布局其内容?尝试使无效、重新验证和重绘(或它们的组合)
  • 永远不要使用 setXXSize。一些原因:stackoverflow.com/questions/7229226/…。而是选择支持您要求的 LayoutManager。

标签: java swing jlabel flowlayout


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2014-04-15
    • 2014-05-20
    • 2014-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-15
    • 2012-12-04
    • 1970-01-01
    相关资源
    最近更新 更多