【发布时间】:2014-01-21 02:08:47
【问题描述】:
我有一个 JPanel,其中包含 11 个 JLabel,每个 JLabel 都像这样(由 Netbeans 生成)注册了一个 MouseMotionListener:
label1.addMouseMotionListener(new MouseMotionAdapter()
{
public void mouseDragged(MouseMotionEvent evt){
label1MouseDragged(evt);
}
并且各个 labelXMouseDragged 方法包含(例如):
label1.setLocation(label1.getParent().getMousePosition());
此面板与其他各种控件一起存在于另一个面板中。我发现我可以在面板内很好地拖动我的标签(我的方法正确地检查了边界,但为了简单起见,我将它们保留在上面)。但是,如果在非控件的任何地方单击鼠标,无论是在内部面板中还是在父面板中,标签的位置都会重置。是什么导致这种情况发生?我没有在其他任何地方注册任何类型的 mouseListeners,如果我自己制作这个面板,我似乎没有点击问题。
【问题讨论】:
-
您的面板正在使用一个布局管理器,该管理器正在失效并将标签返回到它认为应该在的位置。答案将取决于您要达到的目标
-
@MadProgrammer - 好吧,我想要实现的是让标签保持在它们被拖动到的位置,以便我以后可以参考它们的位置并保存到数据库(内部面板让某人指定将打印在支票上的各种数据的位置)。即使我将面板完全设为单独的实体,然后将其添加到外部面板,也会出现同样的问题,但将内部面板作为单独的类单独测试不会产生任何问题。
-
“面板”可能在内部无效,也可能因为其父容器发生更改。
-
当您需要能够随机拖动组件时使用空布局。
标签: java swing jpanel mouseevent jlabel