我正在创建一个应用程序,其中创建了JLabel,并且可以使用
重新定位.setLocation(x,y)
但是,每当我调用
时.setVisible(true)
JLabels回到原来的位置。我认为它与
有关 .setVisible()
' s --- revalidate()
功能
但我不确定如何覆盖或避免revalidate()
效果。
谢谢,
答案 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等)之外,不需要调用该方法。