在setVisible JFrame之后更改JLabel的preferredSize

时间:2010-12-12 14:18:50

标签: java swing jpanel jlabel

当我尝试调整JLabel的大小时,我遇到了问题。在我的应用程序中出现下一个结构。理解每个列表项,就像上一个列表项中的内容一样。

  • JFrame(布局为null,固定大小,不可调整大小,由不同的人使用)。

  • JPanel(布局为null,所有窗口的大小,我把工作放在哪里)。

  • 具有不同布局的各种JPanel(主面板内的内容区域,您可以像html div一样考虑它......)。

  • 在其中一个带有Layout null的“div”中,有一个带有Flow Layout的扩展类JPanel。

  • 在每个此扩展类中,类是带有preferredSizes的标签。

事情是,当创建所有这些之后我调用theFrame.setVisible(true);并且所有工作都属性。

但是在应用程序流动的那一刻,我必须改变其中一个标签的大小。然后,我只是调用label.setPreferredSize(d)并且更改不会更改。如果我在设置可见帧之前调用它,那么该函数可以正常工作,但不能在之后。

我觉得问题是我没有使用像pack(),validate(),repaint()等那样的东西。因为我不知道它是什么工作的。我尝试调用重绘并验证jlabel,并重新绘制主面板,但不起作用。

我对awt和swing很新,这是作业。抱歉我使用英语很糟糕,谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

更改JLabel的大小后,请致电revalidate()。这将导致调整JLabel的大小而不等待触发重新布局的事件(例如调整父框架的大小等等)。

JLabel lbl_test;

lbl_test.setPreferredSize(new Dimension(100, 100) );
lbl_test.revalidate();

要记住另一件事,因为我不确定你遇到哪个课程。与布局管理器混合的空布局(绝对定位)将导致一些奇怪的事情发生。