2012-04-01 69 views
1

這是我的代碼:的Java JScrollPane的問題

public class JJD extends JFrame { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 

    public JJD() { 
     super("test"); 

     JPanel center = new JPanel(); 
     center.setBackground(Color.red); 
     JScrollPane pane = new JScrollPane(center); 

     this.getContentPane().add(pane, BorderLayout.CENTER); 
     final JFrame fr = this; 
     this.addWindowFocusListener(new WindowFocusListener() { 

      @Override 
      public void windowLostFocus(WindowEvent arg0) { 
       // TODO Auto-generated method stub 

       if (fr.isValid()) { 
        System.out.println("FOCUS VALID!"); 
       } else { 
        System.out.println("Focus INVALID"); 
       } 
      } 

      @Override 
      public void windowGainedFocus(WindowEvent arg0) { 
       // TODO Auto-generated method stub 

      } 
     }); 

     this.setVisible(true); 
     this.setSize(500, 500); 
    } 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     JFrame fr = new JJD(); 
     fr.validate(); 

    } 

} 

你能告訴我爲什麼聽者打印出我的框架是不是有效?我也嘗試了其他方法,如pack()revalidate()仍然,監聽器打印出我的幀無效。

提示:問題是因爲JScrollPane,但我無法弄清楚如何使我的框架有效。

+0

爲什麼在你的上下文中這很重要?當您的監聽器被調用時,機會驗證更新尚未準備好。 – kleopatra 2012-04-01 14:12:47

回答

2

我認爲這可能是因爲你沒有覆蓋windowsGainedFocus方法。

public void windowGainedFocus(WindowEvent arg0) { 
    if (fr.isValid()) { 
     System.out.println("FOCUS VALID!"); 
    } else { 
     System.out.println("Focus INVALID"); 
    } 
} 

你可以重寫它就像另一個,看它是否有效。如果它不起作用,您可以在else子句中添加fr.validate()方法調用。我希望這會有所幫助。