【问题标题】:changing text of jLabel in a draggable jPanel在可拖动的 jPanel 中更改 jLabel 的文本
【发布时间】:2013-07-19 08:32:06
【问题描述】:

在我的程序中,我有一个 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(),它不会产生错误。如果我随后将标签设置为该局部变量的值,则会返回错误。

有谁知道为什么会发生这种情况?有没有我可以使用的解决方法来获得相同的效果?

【问题讨论】:

    标签: java swing jpanel draggable jlabel


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多