2016-08-20 48 views
0

在回顾了这个问题的现有答案之后,我仍然处于黑暗中。我试图在标签框架内实现可滚动面板。我正在使用JScrollPaneJTabbedPane。但是,滚动不起作用。使用JScrollPane和JTabbedPane

这是我的代码:

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

} 

我会感激你可以提供任何帮助。

+3

为了更好地帮助越早,张贴[MCVE]或[简要,独立的,正确的示例](http://www.sscce.org /)。 –

+1

*“但是,滚动不起作用。”* - 我猜是因为您实际上从未实际将任何组件添加到'Panel'实例?绘制到它不会计算它的首选大小(你应该重写'paintComponent(Graphics)'而不是'paint(Graphics'))。为此,您可以*重写* getPreferredSize()方法。但是'scrollPane.setPreferredSize(new Dimension(500,500));'在这里没有任何作用,它仍然会延伸到所有可用空间。但如前所述,如果这不能解决您的问题,请发布一个MCVE。 –

回答

0

发现问题。 我应该设置的面板的优选尺寸,以及:

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

请参阅[我是否应避免使用Java Swing中的set(Preferred | Maximum | Minimum)大小方法?](http://stackoverflow.com/q/7229226/418556)(是)。 –