2013-09-21 7 views
1

JScrollPane에 Object가 있습니다. 객체 높이가 증가하거나 감소하면 JScrollBars가 나타나고 사라집니다.JScrollPane JScrollBar 숙박

언제 이런 일이 발생하는지 감지하는 방법이 있습니까?

JScrollPane이 나타날 때 전체를 확대하여 Object가 JScrollBars에 의해 가장 오른쪽 부분을 가리지 않도록하고 그 반대의 경우도 마찬가지입니다.

JPanel object = new JPanel(); 
    object.addComponentListener (new ComponentAdapter() 
    { 
     public void componentResized (ComponentEvent e) 
     { 
      // Your object size changed 
     } 
    }); 

    JScrollPane scrollPane = new JScrollPane (object); 

을하지만 사용자의 특정 목적을 해결할 수 있습니다

답변

2

쉽게이 같은 구성 요소 크기 변경을들을 수 있습니다.

스크롤 창의 세로 스크롤 막대가 개체를 방해하지 않게하려면 작은 트릭을 사용하여 스크롤 창과 개체를 속일 수 있습니다. 이 예제를 확인 : 그 스크롤 창은 항상 현재의 내부보기 가능한 폭으로 감소 할 수 있도록

public class Example 
{ 
    public static void main (String[] args) 
    { 
     final MyObject object = new MyObject(); 

     final JScrollPane scrollPane = new JScrollPane (object) 
     { 
      public Dimension getPreferredSize() 
      { 
       final Dimension ps = super.getPreferredSize(); 
       final JScrollBar vsb = getVerticalScrollBar(); 
       final Insets i = getInsets(); 
       ps.width = object.getPreferredWidth() + (vsb.isShowing() ? vsb.getPreferredSize().width : 0) + i.left + i.right; 
       return ps; 
      } 
     }; 
    } 

    public static class MyObject extends JPanel 
    { 
     public Dimension getPreferredSize() 
     { 
      final Dimension ps = super.getPreferredSize(); 
      ps.width = 0; 
      return ps; 
     } 

     public int getPreferredWidth() 
     { 
      return super.getPreferredSize().width; 
     } 
    } 
} 

이 강제로 ...

  1. 가 ... 요소가 0 적절한 폭을 반환합니다.

  2. ... 스크롤 창은 실제 내용 선호 너비에 따라 수정 된 기본 너비를 반환하므로 개체를 올바르게 표시하는 데 필요한 위치를 얻습니다.

이 예제는 상황에 따라 수정할 수 있습니다. 예를 들어 스크롤 창을 배치 할 컨테이너 레이아웃마다 다를 수 있습니다.