1

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

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

  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()。当不使用布局管理器时,是否有任何其他调用可能影响组件的位置?

4

2 回答 2

1

对于绝对定位,您必须考虑三个步骤,您已经通过将布局设置为null.

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

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

于 2013-07-19T01:28:17.150 回答
0

我在 java https://dl.dropboxusercontent.com/u/27670533/ani_test.rar中用 setLocation() 做了一些实验

这是 src 文件好好看看它们也许有帮助

于 2013-07-19T11:49:16.650 回答