检测JPanel何时移动

时间:2015-02-19 15:53:49

标签: java swing

我有一个存储在JFrame中的JPanel的引用。我尝试将ComponentAdaptor附加到JPanel,但是当我移动JFrame时,它没有被调用。有关如何检测JPanel在屏幕上移动的任何想法,如果我只有JPanel而不是JFrame?

这是我的适配器:

private class Listener extends ComponentAdapter {

    @Override
    public void componentMoved(ComponentEvent e) {
        if (e.getComponent().equals(target)) {
            targetMoved();
        } else {
            stickyMoved();
        }
    }
}

2 个答案:

答案 0 :(得分:3)

我认为AncestorListener正是您所寻找的。

JPanel不会移动,但包含它的框架会移动。您可以在面板上使用AncestorListener,而不是ComponentListener,以便在任何父组件上发生此类事件时收到通知。

private class Listener implements AncestorAdapter {

    @Override
    public void ancestorMoved(ComponentEvent e) {
        if (e.getComponent().equals(target)) {
            targetMoved();
        } else {
            stickyMoved();
        }
    }
}

答案 1 :(得分:2)

  

我如何检测JPanel在屏幕上移动的时间,如果我只有JPanel而不是JFrame的引用?

您可以使用以下命令获取对JFrame的引用:

SwingUtilities.windowForComponent( panel );

当然,在将面板实际添加到框架之前,您将不知道哪个框架。您可以使用Dialog Focus中演示的AncestorListener来了解面板实际可见的时间。

然后,您可以将ComponentListener添加到框架中。