Java:如何注册侦听JFrame运动的侦听器

如何跟踪JFrame本身的移动? 我想注册一个每次JFrame.getLocation()将返回一个新值时将被回调的监听器。

编辑这是一个代码,显示接受的答案正在解决我的问题:

 import javax.swing.*; public class SO { public static void main( String[] args ) throws Exception { SwingUtilities.invokeAndWait( new Runnable() { public void run() { final JFrame jf = new JFrame(); final JPanel jp = new JPanel(); final JLabel jl = new JLabel(); updateText( jf, jl ); jp.add( jl ); jf.add( jp ); jf.pack(); jf.setVisible( true ); jf.addComponentListener( new ComponentListener() { public void componentResized( ComponentEvent e ) {} public void componentMoved( ComponentEvent e ) { updateText( jf, jl ); } public void componentShown( ComponentEvent e ) {} public void componentHidden( ComponentEvent e ) {} } ); } } ); } private static void updateText( final JFrame jf, final JLabel jl ) { // this method shall always be called from the EDT jl.setText( "JFrame is located at: " + jf.getLocation() ); jl.repaint(); } } 

 JFrame jf = new JFrame(); jf.addComponentListener(new ComponentListener() {...}); 

我想是你正在寻找的。

addComponentListener()ComponentAdapter一起使用:

 jf.addComponentListener(new ComponentAdapter() { public void componentMoved(ComponentEvent e) { updateText(jf, jl); } }); 

您可以在JFrame上注册HierarchyBoundsListener ,也可以按照其他人的建议使用ComponentListener

 jf.getContentPane().addHierarchyBoundsListener(new HierarchyBoundsAdapter() { @Override public void ancestorMoved(HierarchyEvent e) { updateText(jf, jl); } });