2012-06-20 4 views
1

누군가 내 JScrollPane이 작동하지 않는 이유를 알아낼 수 있습니까? 아마도 내가 놓친 것일 수도 있습니다. 나는 이것이 내가 보여준 것보다 더 이상 상황이 없다면 어리석은 짓을할지 모른다는 것을 알지만, 더 많은 것을 제공하게되어 기쁘다.JScrollPane이 작동하지 않는 이유는 무엇입니까?

public ApplicationFrame(String title, int x, int y, int width, int height) { 
     // Constructor for the ApplicationFrame, no implicit Construc. 
     setTitle(title); 
     setResizable(true); 
     setBounds(x, y, width, height); 
        setLayout(new BorderLayout()); 
     setDefaultCloseOperation(DISPOSE_ON_CLOSE); 
     setIconImage(new ImageIcon(getClass().getResource("resources/topLeft.png")).getImage()); 
     topMostMenuBar = new TopMenuBar(this); 
     setJMenuBar(topMostMenuBar.getMyJMenuBar()); 
     paneEdge = BorderFactory.createLineBorder(Color.gray); 
     blackline = BorderFactory.createLineBorder(Color.black); 
     this.frameContent = new ApplicationPanel() { 
      //@Override 
      protected void paintComponent(Graphics g) { 
       super.paintComponent(g); 
       g.drawImage(TI, 0, 0, null); 
      } 
     }; 
     mainImageScrollPane = new JScrollPane(frameContent); 
     statusPanel = new ApplicationPanel(new Color(0xfff0f0f0)); 
     leftPanel = new ApplicationPanel(new Color(0xfff0f0f0)); 
     testPanel = new ColorPanel(new Color(0xfff0f0f0)); 
     testPanel.setPreferredSize(new Dimension(50,300)); 
     add(mainImageScrollPane, BorderLayout.CENTER); 
     add(statusPanel, BorderLayout.SOUTH); 
     add(leftPanel, BorderLayout.WEST); 
     Container visibleArea = getContentPane(); 
     visibleArea.add(frameContent); 
     setVisible(true); 
     do { 
      loadImageIn(); 
     } while (!initLoadSuccess); 
     initButtons(); 
     leftPanel.add(testPanel, BorderLayout.SOUTH); 
    } // end Constructor ** 

이것은 코드의 큰 부분이므로 SSCCE를 만드는 방법을 잘 모르겠습니다. 당신은 3 개의 패널을 가지고있는 JFrame의 서브 클래스에 대한 생성자를 보았습니다. ApplicationPanel은이 시점에 단지 JPanel입니다. loadImageIn() 메서드는 파일 선택기를 열고 frameContent에 그려진 선택한 이미지를로드합니다. 이미지가 잘 표시되고, 모든 것이 작동합니다. 창 크기를 조정할 때를 제외하고는 스크롤 막대가 없습니다.

+0

더 나은 도움을 받으려면 [SSCCE] (http://sscce.org/)를 게시하십시오. –

답변

2

당신은 visibleAreaApplicationPanel를 추가이 줄을 ...이

visibleArea.add(frameContent); 

은 아마 당신은 실제로 visibleAreaJScrollPane (과 JScrollPane 이미 ApplicationPanel 포함)를 ... 추가하는이 의미

visibleArea.add(mainImageScrollPane); 

new JScrollPane(frameContent)을 호출하면 그 안에있는 패널에는 아무런 변화가 없으며 바깥쪽에 래퍼가 추가됩니다. 따라서 스크롤 할 수있는 기능이 필요하면 패널 자체가 아니라 JScrollPane 래퍼를 참조해야합니다.

+0

건배, 그게 다야. 이것이 두통을 안겨주므로 나가야했습니다. 다음 번엔 내 문제를 SSCCE로 줄이는 방법을 확실히 알아낼 것입니다. 다시 한번 감사드립니다. – yoonsi

+0

문제 없습니다 :-) 기꺼이 도와 드리겠습니다. 참고로, SSCCE 코드를 잘 수행했다고 생각합니다. 좋은 길이 였고 문제를 해결하는 데 필요한 모든 콘텐츠를 보여주었습니다. – wattostudios

0

frameContent에 크기를 지정하지 않았습니다. 의도적인가?

또한 frameContent은 나중에 visibleArea에 추가됩니다. mainImageScrollPaneJScrollPane

더 이상 의미 어쩌면 당신 싶어 없다 : visibleArea.add(mainImageScrollPane);,하지만 당신은 당신의 패널 크기를 설정해야

0
mainImageScrollPane.setViewportView(<component_to_be_scrollable>); 
관련 문제