【问题标题】:Change preferredSize of a JLabel after setVisible the JFrame在 setVisible JFrame 之后更改 JLabel 的 preferredSize
【发布时间】:2010-12-12 14:18:49
【问题描述】:

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

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

  • JPanel(布局为空,所有窗口的大小,我放置工作的地方)。

  • 具有不同布局的各种JPanel(主面板内的内容区域,您可以将其视为html div...)。

  • 在其中一个布局为空的“div”中,有 JPanel 的扩展类和流布局。

  • 在每个扩展类中都有带有preferredSizes 的标签。

问题是,在创建所有这些之后,我调用 theFrame.setVisible(true);并且一切正常。

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

我觉得问题在于我没有使用诸如 pack()、validate()、repaint() 之类的东西。因为我不知道它的作用。我尝试调用 repaint 并验证 jlabel,然后重新绘制主面板,但不起作用。

我对 awt 和 swing 比较陌生,这是做作业的。对不起,我的英语使用不当,感谢您的帮助。

【问题讨论】:

    标签: java swing jpanel jlabel


    【解决方案1】:

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

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

    还有一件事要记住,因为我不确定您在哪个班级遇到问题。空布局(绝对定位)与布局管理器混合会导致一些奇怪的事情发生。

    【讨论】:

    • 非常感谢。这样可行。也感谢您对 revalidate 使用的解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    相关资源
    最近更新 更多