2016-08-20 4 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' 인스턴스에 아무 구성 요소도 추가하지 않았기 때문에 추측 할 수 있습니까? 그 위에 그리는 것은 선호하는 크기를 계산하지 않을 것입니다. 어쨌든'paint (Graphics') 대신'paintComponent (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) Size 메서드를 사용하지 않아야합니까?] (http://stackoverflow.com/q/7229226/418556) (예.)를 참조하십시오. –