2011-11-30 1 views
3

그래서 각 셀에 JScrollPane을 저장하는 격자 레이아웃이 있습니다. 이것들은 또한 다른 목적을 위해 배열에 넣어집니다. "보기"는 "JPanel"을 확장하므로 이미지를 지원하는 일반 패널 일뿐입니다. 이미지가 아직없는 View가 포함 된 scrollPane으로 채워진 상태로 응용 프로그램이 시작됩니다.JScrollPane 스크롤 바가 나타나지 않는다

이 시점에서 스크롤바를 볼 수는 없지만 JPanel 내부에는 아무 것도 없으므로 중요하지 않습니다. JPanel의 paintComponenet에서 이미지를 열고 drawImage를 사용하자마자 스크롤바가 나타나지 않습니다. 내가 스크롤 바의가 표시되지 않는 이유는 정확히 모르겠어요 그리드 및 스크롤

private void createContentPane() 
{ 
     GridLayout gridLay = new GridLayout(GRID_ROWS, GRID_COLUMNS); 
     perspectiveTbl = new JScrollPane[NUM_PERSPECTIVE]; 
     mainPane = new JPanel(); 
     mainPane.setLayout(gridLay); 

     int idx = 0; 

     while(idx < perspectiveTbl.length) 
     { 
      perspectiveTbl[idx] = new JScrollPane(new View(modelImage)); 
      mainPane.add(perspectiveTbl[idx]); 
      idx++; 
     } 

     this.getContentPane().add(mainPane, BorderLayout.CENTER); 
} 

를 만드는 방법은 다음과 그들이 이미지의 패널 내부에 설정되어 있어야합니다,입니까?

Picture

+0

스크롤 창을 스크롤해야합니까? 콘텐츠가 충분히 큰가요? – cdeszaq

+0

그래, 이미지가 크다. 그래서 뷰는 scrollPane을 추가해야한다. 나는 그것이 패널 내부의 이미지를 고려하지 않는다는 인상하에있다. –

답변

0

Stanislav에 대한 힌트를 주셔서 감사합니다. 실제로 한 시간 전부터 작업 해 보았습니다.하지만 preferredSize 속성을 사용하여 해결할 수있는 올바른 방법을 제공했습니다. 패널 내부의 이미지 크기로 getPreferredSize를 다시 구현하고 페인트 이벤트에 revalidate를 추가하여 이미지가로드되는 즉시 막대가 표시되도록했습니다.

public void paintComponent(Graphics g) 
{ 
    super.paintComponent(g); 
    g.drawImage(image, 0, 0, null); 
    this.getViewScrollPane().revalidate(); 
} 

public Dimension getPreferredSize() 
{ 
    if(image != null) 
     return new Dimension(image.getWidth(),image.getHeight()); 
    else 
     return super.getPreferredSize(); 
} 
2

당신이 중 하나를 사용 할 수 있습니다 당신은 사진의 나머지 부분을 볼 수있는 방법이 없기 때문에 스크롤 바의를받지 않는 신발의 사진을 볼 수 있습니다 여기

는 응용 프로그램의 이미지입니다 패널에 대한 이미지

또는

전화 setPreferredSize()와 이미지하지만 보통의 JLabel하지 JPanel의 이미지의 크기를 반영합니다.

+1

더 나은 제어를 위해 Scrollable을 구현하는 것이 좋습니다. http://docs.oracle.com/javase/6/docs/api/javax/swing/Scrollable.html – Puce