从内容区域拖动/移动JFrame / JDialog窗口

时间:2014-02-08 07:46:36

标签: java swing

从它的内容区域拖动一个jframe窗口很简单,但这是问题所在。 当我在框架上添加一个标签时,它甚至可以拖到标签上, 但是当我为标签添加mouseclicked事件时,即使在适配器中没有实际执行代码,当我在标签上拖动时也不会发生拖动,但拖动窗口的其余区域就可以了。

另一件事是我想让窗口的不透明度随鼠标运动而变化, with this.setOpacity(0.9f); 在标签的鼠标点击事件设置之后,标签也不会对此做出响应..

谁知道如何解决这个问题?

private void formMousePressed(java.awt.event.MouseEvent evt) {
    offsetX = evt.getX();
    offsetY = evt.getY();
}

private void formMouseDragged(java.awt.event.MouseEvent evt) {
    java.awt.Component c = (Component) evt.getSource();
    c.setLocation(evt.getXOnScreen() - offsetX, evt.getYOnScreen()- offsetY);
}

private void jLabel1MouseClicked(java.awt.event.MouseEvent evt) {
    // nothing actually done in the Label's mouse handler
}

private void formMouseEntered(java.awt.event.MouseEvent evt) {
    this.setOpacity(0.9f);
}

private void formMouseExited(java.awt.event.MouseEvent evt) {
    this.setOpacity(0.4f);
}

1 个答案:

答案 0 :(得分:3)

  

它甚至可以拖动标签,但是当我为标签添加mouseclicked事件时,即使在适配器中没有实际执行代码

正确,MouseEvent只传递给一个组件,因此标签会阻止事件传递给窗口。

所以你需要将MouseListener添加到窗口和标签中以便拖动窗口。

结帐Moving Windows。它是一个侦听器,允许您相对于其父组件移动任何组件。因此,您可以创建ComponentMover,然后注册窗口的根窗格以允许您拖动窗口。但您还需要注册标签。