java - setLocation() 并不总是适用于没有布局管理器的面板内的 JLabel 对象,这是一个错误吗?

标签 java layout

所以我在这些论坛上搜索了这个问题的答案,但似乎找不到。

首先我要声明,我完全理解为什么使用空布局管理器是一个坏主意,在这种情况下我基本上别无选择。我正在使用遗留代码库,尝试编写自定义布局管理器来执行正确的布局将非常耗时。一些相关信息:

  1. 该组件的大小永远不会改变
  2. 子组件的大小一旦添加到父组件就不会改变
  3. 只有当用户操作要求子组件的数量和位置发生变化时,它们才会发生变化
  4. 此代码未本地化
  5. 我无法发布代码示例,因为代码是生产软件,对于这个论坛来说太长了

代码流程如下:

  • 创建父组件时,布局在构造函数中设置为 null。
  • 当用户操作表明他们想要显示信息时,子组件就会被创建并添加到父组件中。
  • 然后确定每个组件的正确位置,并通过 setLocation() 更改位置。

子组件的类型之一是 1 个或多个 JLabel 对象。这是我遇到问题的对象。在某些情况下,对 JLabel 的 setLocation() 函数的调用将具有 x= 52 和 y = 0 的值,但 JLabel 被放置在 x = 0, y = 0 的位置。我已经确认该位置没有被代码的其他区域重置为 0,0,所以现在我想到可能是 Java 实现中存在一些模糊的错误导致了问题。否则,为什么它不尊重对 setLocation() 的调用?

我将确认代码的任何其他区域都没有在 JLabel 上调用 setBounds()。当不使用布局管理器时,是否有任何其他调用可能会影响组件的位置?

最佳答案

使用绝对定位,您必须考虑三个步骤,您已经通过将布局设置为 null 完成了第一步。

下一步是每当您向容器添加组件时,您都必须在该组件上使用 setBounds(x,y,width,height) 方法。
您只使用了setLocation()方法,而没有设置按钮的大小,如果您希望按钮可显示,则还必须使用setSize(width,height)方法。

毕竟,不要忘记调用 Component 类的 repaint() 方法。

关于java - setLocation() 并不总是适用于没有布局管理器的面板内的 JLabel 对象,这是一个错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17736612/

相关文章:

java - 如何创建由多个图像组成的位图?

java - 将字符串拆分为多个字符序列

java - Docker 和 Java IDE 集成

java - Spring 本地和系统属性

html - 如何水平和垂直居中元素

java - Selenium 快速查找元素是否存在的方法

android - 从屏幕底部向上滑动布局

Android - 通过 XML/Java 设置填充颜色

android - 移除 ListView 中 ListItem 周围的蓝色光晕 (android)

android - 如何将 android 布局分类为小屏幕、中屏幕、大屏幕、超大屏幕?