自定义JFrame运动"滑倒"

时间:2013-11-13 03:28:47

标签: java swing jframe awt

最近,我一直试图让我的gui看起来很好,其中一部分是实现我自己的标题栏,最大化按钮,最小化按钮等。

我在拖动方面遇到问题,我希望能够通过点击其中的任意位置来拖动JFrame。

我尝试创建一个mousemotionlistener来处理它,但是当我使用它时它会滑动。正如在我尝试将窗口拖动到某个位置时,它似乎正在跳过对mouseDragged的调用并尝试调用mouseMoved。

这是我的代码

public class MouseWindowDragManager implements MouseMotionListener{
    private JFrame frame;
    int prevPosX = -1;
    int prevPosY = -1;

    public MouseWindowDragManager(JFrame frame){
        this.frame = frame;
    }

    @Override
    public void mouseDragged(MouseEvent e) {
        int newX = (frame.getLocation().x + (e.getXOnScreen() - prevPosX));
        int newY = (frame.getLocation().y + (e.getYOnScreen() - prevPosY));
        frame.setLocation(newX, newY);
        prevPosX = e.getXOnScreen();
        prevPosY = e.getYOnScreen();
    }

    @Override
    public void mouseMoved(MouseEvent e) {
        prevPosX = e.getXOnScreen();
        prevPosY = e.getProperty("apple.awt.draggableWindowBackground", true);tYOnScreen();
    }
}

1 个答案:

答案 0 :(得分:2)

  

最近,我一直试图让我的gui看起来很好,其中一部分是实现我自己的标题栏,最大化按钮,最小化按钮等。

Gee,微软和Apple花费数百万美元来开发用户可以使用的GUI。听到这个消息他们会很失望:)。

  

我希望能够通过点击JFrame中的任何位置来拖动它。

查看Moving Windows以查找允许您拖动窗口的类。示例代码显示了如何通过拖动自定义标题栏来使用该类。但是,如果您真的希望能够通过点击任意位置来拖动框架,那么您可以使用root pane注册框架的ComponentMover