Java revalidate();将已重新定位的对象移回原始位置

时间:2018-05-15 10:14:49

标签: java swing layout jlabel layout-manager

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

重新定位
.setLocation(x,y)

但是,每当我调用

.setVisible(true)

JLabels回到原来的位置。我认为它与

有关

.setVisible()' s --- revalidate()功能

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

谢谢,

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

  

创建了JLabel,可以使用setLocation(x,y)

重新定位

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

但是,我建议你看一下Drag Layout。这是一个实现大多数布局管理器功能的布局管理器,但允许您控制组件的位置。

  

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

此外,Swing组件默认是可见的,因此除了顶级容器(JFrame,JDialog等)之外,不需要调用该方法。