2012-04-01 18 views
1

Dies ist mein Code:java JScrollPane Ausgabe

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

    } 

} 

Könnten Sie sagen, meine, warum die Zuhörer heraus druckt, dass mein Rahmen nicht gültig ist? Ich versuchte auch andere Methoden wie pack()revalidate() und noch, der Hörer druckt aus, dass mein Rahmen nicht gültig ist.

TIPP: Das Problem ist wegen der JScrollPane, aber ich kann nicht herausfinden, wie man meinen Rahmen gültig macht.

+0

Warum ist das in Ihrem Kontext wichtig? Wahrscheinlich sind die internen Validierungsupdates noch nicht fertig, wenn Ihr Listener aufgerufen wird ... – kleopatra

Antwort

2

Ich denke, es könnte sein, weil Sie WindowsGainedFocus-Methode nicht überschreiben.

Sie können es wie das andere überschreiben und schauen, ob es gültig ist. Wenn es nicht funktioniert, können Sie innerhalb der else-Klausel den Methodenaufruf fr.validate() hinzufügen. Ich hoffe, es würde helfen.