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

coc*_*two 3 java swing listener 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();
    }

}
Run Code Online (Sandbox Code Playgroud)

Mic*_*ers 8

使用addComponentListener()ComponentAdapter:

jf.addComponentListener(new ComponentAdapter() {
    public void componentMoved(ComponentEvent e) {
        updateText(jf, jl);
    }
});
Run Code Online (Sandbox Code Playgroud)


Ste*_*eod 6

JFrame jf = new JFrame();
jf.addComponentListener(new ComponentListener() {...});
Run Code Online (Sandbox Code Playgroud)

我想是你正在寻找的.