gpt4 book ai didi

java - 将 MouseAdapter 添加到 JFrame

转载 作者:太空宇宙 更新时间:2023-11-04 06:41:30 25 4
gpt4 key购买 nike

我有一个 MouseAdapter,只需单击其背景即可拖动窗口,如下所示:

public class Dragger extends MouseAdapter{

private Point offset;
private Window window;

public Dragger(Window w){
window = w;
}

@Override
public void mousePressed(MouseEvent e){

offset = e.getPoint();
}

@Override
public void mouseDragged(MouseEvent e){

Point m = e.getLocationOnScreen();

window.setLocation(m.x - offset.x, m.y - offset.y);
}
}

很简单,对吧?

我将它添加到我正在使用它的 JFrame 中(我也在 JDialogUE 上使用它,因此是“窗口”:

// Drag Listeners

Dragger dr = new Dragger(this);
addMouseListener(dr);
addMouseMotionListener(dr);

拖动(当前)仅在我构造一个新的拖动器,然后将其添加为两者 MouseListener 和 MouseMotionListener 时才有效。

有没有一种更好、更漂亮、更优雅、更传统、更专业、更稳健的方式,只需一种方法就能做到这一点?

最佳答案

在这种情况下,我建议在 Dragger 类中编写辅助静态方法:

public class Dragger extends MouseAdapter
{
private Point offset;
private Window window;

public Dragger ( final Window w )
{
window = w;
}

@Override
public void mousePressed ( final MouseEvent e )
{
offset = e.getPoint ();
}

@Override
public void mouseDragged ( final MouseEvent e )
{
final Point m = e.getLocationOnScreen ();
window.setLocation ( m.x - offset.x, m.y - offset.y );
}

public static void install ( final Window window )
{
final Dragger dr = new Dragger ( window );
window.addMouseListener ( dr );
window.addMouseMotionListener ( dr );
}

public static void uninstall ( final Window window )
{
for ( final MouseListener mouseListener : window.getMouseListeners () )
{
if ( mouseListener instanceof Dragger )
{
window.removeMouseListener ( mouseListener );
}
}
for ( final MouseMotionListener mouseMotionListener : window.getMouseMotionListeners () )
{
if ( mouseMotionListener instanceof Dragger )
{
window.removeMouseMotionListener ( mouseMotionListener );
}
}
}
}

然后只需调用 Dragger.install(window)Dragger.uninstall(window)

不确定这是否是一个好的方法,但它占用的空间更少,并且如果您在 install 方法中添加更多检查,还可以确保您不会添加 Dragger 两次 - 当然,如果您不想在同一窗口上安装两次 Dragger

此外,在这种情况下,您不需要在代码中查找此类的使用情况,因为您确定如何安装和卸载该类,并且可以在一个位置更改该行为,而不是修改大量 add*Listener 调用。

关于java - 将 MouseAdapter 添加到 JFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24627911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com