我有一个存储在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();
}
}
}
答案 0 :(得分:3)
我认为AncestorListener正是您所寻找的。 p>
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
添加到框架中。