2016-08-23 2 views
2

In meiner Anwendung habe ich eine JFrame Anzeige einer JSplitPane, mit der Aufteilung VERTICAL_SPLIT. Oben wird JLabel angezeigt, und unten wird JInternalFrame angezeigt. Zwei Probleme treten auf.JSplitPane nicht Malerei Korrektur

  1. Die JLabel anzeigt, aber die JInternalFrame nicht.

    2. Ich habe die Anwendung, um die Größe an allen

die JSplitPane Anzeige zu haben, ich glaube, dies sowohl zu einer falschen Verwendung von JSplitPane verbunden ist. Ich konnte jedoch nicht herausfinden, was. Darf ich bitte etwas Hilfe zu diesem Thema haben?

p.s. Ich habe Tests ausgeführt, um sicherzustellen, dass GUIWindow.getInsideFrame() nicht null zurückgibt. Die instanceof Überprüfungen am Ende sagen, dass beide Komponenten im Bereich existieren und von diesem Typ sind. Vielen Dank für Ihre Hilfe:

protected static void newWindow(GUIFrame window) { 
     SwingUtilities.invokeLater(new Runnable(){ 

      @Override 
      public void run() { 
       JSplitPane pane = new JSplitPane(JSplitPane.VERTICAL_SPLIT); 
       JInternalFrame intFrame = window.getInsideFrame(); 
       pane.setRightComponent(intFrame); 
       pane.setLeftComponent(new JLabel(window.getDescription())); 
       synchronized(lock){ 
        frame.remove(currentPane); 
        frame.add(pane); 
       } 
       synchronized(lock){ 
        frame.revalidate(); 
        pane.setVisible(true); 
        frame.repaint(); 
        if(window instanceof ColourFrameShower) return; 
        currentWindow = window; 
        currentPane = pane; 
        currentFrame = intFrame; 
       } 
       if(pane.getLeftComponent() instanceof JLabel) System.out.println("JLabel exists!"); 
       else System.out.println("JLabel does not exist!"); 

       if(pane.getRightComponent() instanceof JInternalFrame) System.out.println("JInternalFrame exists!"); 
       else System.out.println("JInternalFrame does not exist!"); 
      } 

     }); 
    } 

EDIT: Ich Problem 2 mit einem Aufruf an frame.revalidate() zu Beginn des zweiten synchronised(lock) Blockes befestigt. Dies wurde in den Code aufgenommen.

+0

Danke für die Bearbeitung :) – JD9999

+0

Haben Sie versucht, Ihre JInternalFrame allein angezeigt werden, ohne dass die JSplitPanel? Funktioniert es ? :) – Kapcash

+0

Ja, ohne JSplitPanel funktioniert es. Siehe die neueste Version der gesamten Anwendung auf meinem GitHub: https://github.com/JD9999/GUI-of-everything – JD9999

Antwort

1

Wie ich Ihnen im Kommentar gesagt habe, müssen Sie einfach setVisible(true) auf Ihrem JInternalFrame verwenden, sonst wird es von Ihrem JSplitPane nicht berücksichtigt.

Dies ist ein wirklich häufiger Fehler auf Java Swing!

Ich bin froh, dass es Ihnen geholfen;)

0

Versuchen Sie, die resizeWeight festzulegen: pane.setResizeWeight (0.5);

+0

Das hat nichts für mich getan, aber danke für die schnelle Antwort! :) – JD9999