2010-03-11 134 views
3

如何跟蹤JFrame本身的運動?我想註冊一個聽衆,每回JFrame.getLocation()就會返回一個新的值。Java:如何註冊偵聽JFrame運動的偵聽器

編輯這裏是顯示所接受的回答是解決我的問題代碼:

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(); 
    } 

} 
+0

注意,這不是一個關於面向對象的設計,也沒有關於使用或不使用* *決賽等問題是有關如何註冊一個回調疑問,可以在每次JFrame的位置發生變化時觸發,並且代碼片段只是一個快速入侵,充當概念證明以插入正確答案。 – cocotwo 2010-03-11 18:58:31

回答

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

是你在找什麼,我想。

1

您可以在JFrame註冊一個HierarchyBoundsListener,或使用ComponentListener別人的建議。

jf.getContentPane().addHierarchyBoundsListener(new HierarchyBoundsAdapter() { 

    @Override 
    public void ancestorMoved(HierarchyEvent e) { 
     updateText(jf, jl); 
    } 
}); 
7

使用addComponentListener()ComponentAdapter

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

+1:我會接受你的答案,因爲你提供的鏈接和一個工作示例:) – 2010-03-11 19:12:19

+0

@mmyers:非常感謝,+1 – cocotwo 2010-03-11 19:12:42

+0

我會接受無論哪個答案首先發布。沒有必要提供到API的鏈接。答案是使用ComponentListener。每個程序員都應該可以直接訪問API,並且應該知道如何使用它。如果你想提供一個鏈接,那麼它應該是關於「如何編寫組件監聽器」的Swing教程。這樣,當海報看起來那裏時,他們也會找到關於如何爲所有其他Swing事件偵聽器編寫偵聽器的部分。讓人們有自己的工具來解決問題,而不是他們期待我們一直提供答案。 – camickr 2010-03-11 20:34:46