在可拖动的jPanel中更改jLabel的文本

时间:2013-07-19 22:34:27

标签: java swing jpanel draggable jlabel

在我的程序中,我有一个jPanel里面有一个jLabel。我添加了这段代码以使jPanel可拖动,并且它完美无缺。

private void formMousePressed(java.awt.event.MouseEvent evt) {                                  
    prevX = evt.getXOnScreen();
}                                 

private void formMouseDragged(java.awt.event.MouseEvent evt) {                                  
    this.setLocation(this.getX() + evt.getXOnScreen() - prevX, this.getY());
    prevX = evt.getXOnScreen();
    // this.labBirthDate.setText(Integer.toString(this.getX()));
}

然而,当我添加注释掉的代码时,它会更新标签以显示面板的位置,但它已停止工作。具体来说,当我单击并拖动以移动面板时,面板不是跟随鼠标,而是单独排序,文本更改为~10的值,每当我移动鼠标时都会更改。

让事情变得更加混乱,如果我改变它以便它只是将文本设置为“blah”,它就不会产生错误。同样,如果我只是将变量设置为等于this.getX(),则不会产生错误。如果我然后将标签设置为该局部变量的值,则会返回错误。

有谁知道为什么会这样?我可以使用一种解决方法来获得相同的效果吗?

1 个答案:

答案 0 :(得分:2)

当您在标签上调用setText()方法时,会在标签上调用revalidate()repaint()方法。这将导致调用布局管理器,我猜测布局管理器会将面板重置为默认位置。

如果您希望能够在屏幕上随机移动组件,则需要在正在拖动的面板的父级上使用空布局。完成此操作后,您还需要手动设置组件的大小和位置。

在这种情况下,您可能会发现Drag Layout便于使用。