2016-04-26 6 views
0

Ich habe eine JScrollPane innerhalb einer JTabbedPane Registerkarte. In dieses JScrollPane platziere ich ein JPanel, dessen Hintergrund rot ist und dessen Größe explizit festgelegt ist.JScrollPane Zeichnung Komponenten unter sich

Dies ist, was ich bekommen:

enter image description here

enter image description here

Beachten Sie, dass in dem zweiten Bild, wo der Container-Rahmen der Größe verändert wurde, wird die Komponente unter den Scrollbar Elemente gezogen werden .

Was geht hier vor? Ich habe fast jede Kombination von Layout-Managern für alle beteiligten Komponenten ausprobiert (sowie Komponenten außer JPanel - schließlich möchte ich hier mehrere JEditorPane), und ich kann nichts zeichnen, außer unter einem großen, leeren Rechteck (ist es ein Hintergrund der)

Code:?

In Haupt-JFrame Unterklasse:

// Called once on startup/layout. 
public void refreshGUIState() { 
    for (int i = 0; i < client.getFrameStackLength(); i++) { 
     InferenceFrame frame = client.getFrame(i); 
     JScrollPane pane = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, 
              JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 
     JPanel wtf = new JPanel(); 
     pane.setBackground(Color.YELLOW); 
     wtf.setBackground(Color.red); 
     wtf.setSize(100,100); 
     wtf.setPreferredSize(wtf.getSize()); 
     pane.add(wtf); 
     workspace.addTab(Integer.toString(i), pane); 
    } 
} 

public GuiClient() throws CliException, ParticleSourceException { 
    super("L4 Interactive Prover"); 
    setSize(800,600); 

    mainArea = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true); 
    mainArea.setDividerSize(2); 
    mainArea.setBackground(Color.DARK_GRAY); 
    getContentPane().add(mainArea); 

    /* ... menu bar init ... */ 

    toolspace = new JPanel(); 
    workspace = new JTabbedPane(); 
    mainArea.add(toolspace); 
    mainArea.add(workspace); 

    this.validate(); 
    refreshGUIState(); 
} 

Edit: unter dem Verdacht, dass JScrollPane war irgendwie nicht ein Ansichtsfenster, wenn ihr erstes Kind aufgenommen zu schaffen, wie erwartet Ich habe auch den Konstruktor mit drei Argumenten ausprobiert. Gleiches Verhalten.

Re-edit: Außer ich Fehler und links in der add() Anruf. Hoppla. Sieht so aus.

+0

Meine Vermutung ist, dass Sie vergessen haben, das Ding dem Bildlauffenster hinzuzufügen. – Laurel

+0

Ich mache das in der Zeile, die liest "pane.add (wtf);". Der Code ist genau dort ... Und Sie können es in das Bild gezeichnet sehen, es ist nur unter einem Rechteck aus Grau. Damit..... . – BadZen

+0

Wo setzen Sie den Rahmen sichtbar? – Laurel

Antwort

4

Statt

pane.add(wtf); 

Sie brauchen

pane.setViewportView(wtf); 

Sie auch kann es tun, wenn die JScrollPane Initialisierung:

JScrollPane pane = new JScrollPane(wtf); 

Oder in Ihrem Fall:

JScollPane pane = new JScrollPane(wtf, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);