2016-08-20 2 views
0

Nach Überprüfung der vorhandenen Antworten zu diesem Thema bin ich hier noch im Dunkeln. Ich versuche scrollbare Panels in einem Tab-Frame zu implementieren. Ich verwende JScrollPane und JTabbedPane. Scrollen funktioniert jedoch nicht.Arbeiten mit JScrollPane und JTabbedPane

Dies ist mein Code:

public TabbedFrame(List<Panel> panels) { 

    super(new GridLayout(1, 1)); 

    JTabbedPane tabbedPane = new JTabbedPane(); 

    int layerNum = 0; 

    for (Panel p: panels){ 
     JScrollPane scrollPane = new JScrollPane(
       JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, 
       JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 
     scrollPane.setViewportView(p); 
     scrollPane.setPreferredSize(new Dimension(500, 500)); 
     tabbedPane.addTab("Layer " + layerNum, null, scrollPane, "Layer " + layerNum); 
     layerNum++; 
    } 

    //Add the tabbed pane to this panel. 
    add(tabbedPane); 

    //The following line enables to use scrolling tabs. 
    tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT); 
} 

public class Panel extends JPanel{ 

    private static final long serialVersionUID = 4109034958236244752L; 

    private Design design; 

    public Panel(Design design){ 
     this.design = design; 
     this.setSize(design.getCanvasWidth(), design.getCanvasHeight()); 
    } 

    public void paint(Graphics G) { 
     G.setColor(design.getColor()); 
     design.draw(G); 
    } 

    public int getWidth() { return design.getCanvasWidth(); } 
    public int getHeight() { return design.getCanvasHeight(); } 

} 

Ich werde jede Hilfe zu schätzen wissen Sie anbieten können.

+3

Für eine bessere Hilfe früher, Posten [MCVE] oder [Kurz, Self Contained, Korrekt Beispiel] (http://www.sscce.org /). –

+1

* "Das Scrollen funktioniert jedoch nicht." * - Ich schätze, weil Sie der 'Panel'-Instanz nie irgendwelche Komponenten hinzufügen? Beim Zeichnen darauf wird nicht die bevorzugte Größe berechnet (Sie sollten 'paintComponent (Graphics)' anstelle von 'paint (Graphics') trotzdem überschreiben). Dafür könnte man einfach die 'getPreferredSize()' Methode überschreiben. Aber 'scrollPane.setPreferredSize (neue Dimension (500, 500));' hat hier keine Auswirkung, es wird sich immer noch über den gesamten verfügbaren Platz erstrecken. Aber wie bereits erwähnt, wenn Sie Ihr Problem nicht lösen, poste ein MCVE. –

Antwort

0

Das Problem gefunden. sollte ich die bevorzugte Größe des Panels eingestellt haben auch:

for (Panel p: panels){ 
     JScrollPane scrollPane = new JScrollPane(
       JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, 
       JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 
     p.setPreferredSize(new Dimension(1000, 1000)); 
     scrollPane.setViewportView(p); 
     scrollPane.setPreferredSize(new Dimension(500, 500)); 
     tabbedPane.addTab("Layer " + layerNum, null, scrollPane, "Layer " + layerNum); 
     layerNum++; 
    } 
+0

Siehe [Sollte ich die Verwendung der festgelegten (Preferred | Maximum | Minimum) Size-Methoden in Java Swing vermeiden?] (Http://Stackoverflow.com/q/7229226/418556) (Ja.) –