2013-04-17 3 views
3

뷰포트의 뷰를 확대하고 싶지만 내부의 구성 요소 위치가 인 경우 변경되지 않습니다. 설정은 jscrollpane 안에 큰 jpanel 이있는 것입니다.이 모드에서는 뷰를 확대/축소 모드로만 변경하려고합니다. 개체를 패널 내부 어디에서나 드래그 앤 드롭 할 수 있으므로 xy 위치가 중요한 이유입니다.JScrollPane 내부 구성 요소가있는 뷰 확대

여기 내 현재 줌 코드가 있는데, 나는 그래픽 2d 배율을 사용하여 뷰를 확대/축소합니다. 문제는 그 직책이 엉망이라는 것이다. 또한 전체 패널이 jscrollpane에 맞도록 축소하고 싶습니다.

//zoom in draw method using scale 
g2.translate(zoomX, zoomY); 

g2.scale(zoomScale, zoomScale); 

g2.translate(-zoomX, -zoomY); 

또한 뷰포트를 조작하려고합니다. 여기 내 뷰포트 초기화입니다. 2000 by 1000 차원이 패널이고 750 by 698이 내 뷰포트의 extentsize입니다. 구성 요소의 위치를 ​​어지럽히 지 않고 줌하는 방법에 대한 제안? setviewposition을 이동하는 것이 솔루션의 일부일 수 있습니까?

view = new JViewport(); 

view.setViewSize(new Dimension(2000,1000)); 

view.setExtentSize(new Dimension(750,698)); 

view.setViewPosition(new Point(view.getExtentSize().width/2,view.getExtentSize().height/2)); 
+0

JScollPane 확대/축소가 원하는 지점으로 중앙 정렬을 포함하여 여기에서 검색하십시오. – mKorbel

+0

예 scrollpane을 사용하는 많은 확대/축소 솔루션이 있지만이 기능을 사용하려면 전체지도 패널 확대/축소 기능과 같아야합니다. jscrollpane 내부는 뷰에서만 축소됩니다. 다른 솔루션은 이미지가있는 jscrollpane을 확대/축소하기위한 것이지만 패널 안에 드래그 앤 드롭 할 수있는 내부의 구성 요소가있는 jscrollpane은 사용할 수 없습니다. 그것의 시스코 패킷 추적 응용 프로그램과 같은 확대/축소 및 라우터와 스위치는 확대 후 조작 할 수 있습니다. –

+0

Google지도의 코딩 방법은 모르겠지만 실제로는 확대/축소가 아닌보기 전환이 가능합니다. – mKorbel

답변

0

줌 배율을 높이거나 낮추는 두 개의 버튼을 사용하십시오. JScrollPane의 패널의 paintComponent 메소드를 오버라이드 (override)합니다.

@Override 
public void paintComponent(Graphics g) 
{ 
    g.scale(zoomFactor, zoomFactor); 
    // Change the size of the panel 
    setSize(origWidth * zoomFactor, origHeight * zoomFactor); 
    // Re-Layout the panel 
    validate(); 
    super.paintComponent(g); 
} 

희망 사항.

+0

확대/축소보기가 작동하지만 구성 요소 내부의 xy 위치는 그대로 유지됩니다. 여기서 오브젝트 아이콘을 클릭하면 해당 위치에 오브젝트가 없습니다. xy 위치는 확대 되어도 그대로 유지됩니다. –

+0

편집 됨. 지금 시도해보십시오. –

+0

여전히 선생님, 줌보기가 작동하지만 나는 그래픽뿐만 아니라 드래그 가능한 객체를 확대/축소 할 필요가 없습니다. 뷰포트 또는 뷰와 관련이 있다고 생각합니다. 보기 만 조정하지만 패널은 조정하지 않습니다. –