【问题标题】:Java revalidate(); moves Objects that have been re-positioned, back to the original locationJava 重新验证();将已重新定位的对象移回原始位置
【发布时间】:2018-10-25 03:18:30
【问题描述】:

我正在创建一个应用程序,其中创建了 JLabels 并且可以使用

重新定位
.setLocation(x,y)

但是,每当我调用

.setVisible(true)

JLabel 移回其原始位置。我认为这与

有关

.setVisible()'s --- revalidate() 函数

但我不确定如何覆盖或避免revalidate() 效果。

谢谢,

【问题讨论】:

    标签: java swing layout jlabel layout-manager


    【解决方案1】:

    您不会覆盖或更改revalidate()——而是使用适当的布局管理器,因为所有重新验证所做的只是告诉布局管理器布局此容器和所有嵌套容器所持有的组件。一种“解决方案”是使用null 布局,但我强烈建议不要这样做,因为这将导致难以调试和维护 GUI,这些 GUI 在一个平台上可能看起来不错,而在所有其他平台上看起来很糟糕。考虑嵌套 JPanel,每个 JPanel 都使用自己的布局管理器,并使用边框(例如 EmptyBorder)来实现所需的 GUI 布局。

    【讨论】:

      【解决方案2】:

      如果您的程序(不是用户)正在设置组件的位置,则不要这样做。而是使用适当的布局管理器,或嵌套面板与不同布局管理器的组合来实现您的布局。

      阅读Layout Managers 上的 Swing 教程,了解更多信息和工作示例。

      JLabels 已创建并可使用 setLocation(x,y) 重新定位

      但是,如果您正在创建一个允许用户在屏幕上拖动组件的应用程序,那么您需要使用空布局,以便您可以控制每个组件的位置(和大小)。

      但是,我建议您查看Drag Layout。这是一个布局管理器,它实现了大部分布局管理器功能,但允许您控制组件的位置。

      但是,每当我调用 setVisible(true)

      此外,Swing 组件在默认情况下是可见的,因此无需调用该方法,除非在顶级容器(JFrame、JDialog 等)上。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-06-23
        • 1970-01-01
        • 1970-01-01
        • 2013-12-05
        • 1970-01-01
        • 2015-10-01
        • 1970-01-01
        相关资源
        最近更新 更多