Java 为什么我必须在每个部件上设置JLabel的位置?

Java 为什么我必须在每个部件上设置JLabel的位置?,java,swing,awt,java-2d,Java,Swing,Awt,Java 2d,我想在一个非常简单的环境中使用JLabel,但我想知道为什么每次重新绘制时都要设置位置 代码: 基于循环的布局来自于我正在做的各种图像动画。为什么重绘总是重置所有标签的位置,所以我必须在每个组件上设置位置 为什么每次重新喷漆都要设置位置 你没有。实际上,您不应该在paintComponent方法中设置组件的位置或任何类型的约束绘制组件方法仅用于绘制,不用于方向或任何其他 当您jpanel.add(myComponent,constraints)组件的位置将由容器的当前位置决定。(当您jpanel

我想在一个非常简单的环境中使用JLabel,但我想知道为什么每次重新绘制时都要设置位置

代码:

基于循环的布局来自于我正在做的各种图像动画。为什么重绘总是重置所有标签的位置,所以我必须在每个组件上设置位置

为什么每次重新喷漆都要设置位置

你没有。实际上,您不应该在
paintComponent
方法中设置组件的位置或任何类型的约束<代码>绘制组件方法仅用于绘制,不用于方向或任何其他

当您
jpanel.add(myComponent,constraints)
组件的位置将由容器的当前位置决定。(当您
jpanel.add(myComponent);
没有任何约束时,将产生默认约束,每个布局管理器都有自己的默认约束)

标签放置在配电盘的顶部,因为您没有设置配电盘的布局,所以它有其默认设置,即为了更改它,您必须使用另一个具有适当约束的布局管理器

例如,要将其放置在面板的中心,必须执行以下操作:

jpanel.setLayout(new BorderLayout());
jpanel.add(myLabel,BorderLayout.CENTER);
最后,在运行GUI的线程内执行
(true)
,它将挂起线程,这意味着GUI将“冻结”,因为事件无法发生

为什么每次重新喷漆都要设置位置

你没有。实际上,您不应该在
paintComponent
方法中设置组件的位置或任何类型的约束<代码>绘制组件方法仅用于绘制,不用于方向或任何其他

当您
jpanel.add(myComponent,constraints)
组件的位置将由容器的当前位置决定。(当您
jpanel.add(myComponent);
没有任何约束时,将产生默认约束,每个布局管理器都有自己的默认约束)

标签放置在配电盘的顶部,因为您没有设置配电盘的布局,所以它有其默认设置,即为了更改它,您必须使用另一个具有适当约束的布局管理器

例如,要将其放置在面板的中心,必须执行以下操作:

jpanel.setLayout(new BorderLayout());
jpanel.add(myLabel,BorderLayout.CENTER);

最后,在运行GUI的线程内执行
while(true)
,它将挂起线程,这意味着GUI将“冻结”,因为事件无法发生。

在while循环中不断重新绘制是个坏主意。也许你可以用一个新的。不太可能产生不必要的副作用。
JPanel
的默认布局管理器可能会覆盖
JLabel
的显式定位。尝试在
JPanel
的构造函数中添加
setLayout(nulll)
。在while循环中进行常量重绘是个坏主意。也许你可以用一个新的。不太可能产生不必要的副作用。
JPanel
的默认布局管理器可能会覆盖
JLabel
的显式定位。尝试在
JPanel
的构造函数中添加
setLayout(nulll)