2011-04-14 2 views
0

Jung에서 EditingModalGraphMouse를 사용할 때 정점 좌표를 가져 오는 방법이 있습니까 ?? 좌표 setter 및 getter로 정점 클래스를 만들었지 만 특정 좌표로 정점을 설정하는 방법을 알려지지 않았습니까? 다음과 같이 다음은 당신에게 데카르트는 정 VisualizationViewer 인스턴스에서 좌표를 구하는 방법에 대한 아이디어를 제공정에서 정점 좌표를 얻는 방법은 무엇입니까?

답변

0

...

는 내부 클래스를 만듭니다

: (변압기 난 사용자에게 변압기를했습니다)
protected class MyGraphMousePlugin extends TranslatingGraphMousePlugin implements MouseListener { 

    @Override 
    public void mouseMoved(MouseEvent e) { 
     final VisualizationViewer<GeoLocationData.Station,GeoLocationData.Link> vv = 
     (VisualizationViewer<GeoLocationData.Station,GeoLocationData.Link>)e.getSource(); 
     Point2D p = e.getPoint();//vv.getRenderContext().getBasicTransformer().inverseViewTransform(e.getPoint()); 
     GraphElementAccessor<GeoLocationData.Station,GeoLocationData.Link> pickSupport = vv.getPickSupport(); 
     if(pickSupport != null) {    
      vv.setToolTipText ("<html>x: "+p.getX()+"<br>y: "+p.getY()); 
     } 
    } 

    public MyGraphMousePlugin(int modifiers) { 
     super(modifiers); 
     // TODO Auto-generated constructor stub 
    } 

    public MyGraphMousePlugin() { 
     super(); 
    } 
} 

은 GraphMouse 인스턴스에 플러그인을 추가

graphMouse = new DefaultModalGraphMouse<Object, Object>(); 
vv.setGraphMouse(graphMouse); 
vv.addKeyListener(graphMouse.getModeKeyListener()); 
graphMouse.add(new MyGraphMousePlugin()); 

편집 :

당신의 계정으로 정 그래프 레이아웃에 만든 번역 걸릴 직교 좌표 줄 것이다

다음으로 수정 : 그것은 스케일 인자를 생략하기 때문에

protected class MyGraphMousePlugin extends TranslatingGraphMousePlugin implements MouseListener { 

    @Override 
    public void mouseMoved(final MouseEvent e) { 

     SwingUtilities.invokeLater(
       new Runnable() { 
        public void run() { 
         final VisualizationViewer<GeoLocationData.Station,GeoLocationData.Link> vv = 
          (VisualizationViewer<GeoLocationData.Station,GeoLocationData.Link>)e.getSource(); 
         Point2D p = e.getPoint();//vv.getRenderContext().getBasicTransformer().inverseViewTransform(e.getPoint()); 
         GraphElementAccessor<GeoLocationData.Station,GeoLocationData.Link> pickSupport = vv.getPickSupport(); 
         if(pickSupport != null) { 

          AffineTransform lat = 
           vv.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.LAYOUT).getTransform(); 
          //AffineTransform vat = 
          // vv.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.VIEW).getTransform(); 
          //AffineTransform at = new AffineTransform(); 

          double x = p.getX() - lat.getTranslateX(); //; 
          double y = p.getY() - lat.getTranslateY(); //; 

          vv.setToolTipText ("<html>x: "+x+"<br>y: "+y); 
         } 

        } 
       } 
     ); 
    } 

    public MyGraphMousePlugin(int modifiers) { 
     super(modifiers); 
     // TODO Auto-generated constructor stub 
    } 

    public MyGraphMousePlugin() { 
     super(); 
    } 
} 

그것은 아직 완벽하지 않습니다,하지만 당신은 아이디어를 얻을 것이다 ...

모델의 좌표를 얻기 위해 화면 좌표계에서보기 좌표계까지를 모델 좌표계로 계산해야합니다.

위 코드의 일반적인 유형

자신의 버전 :

편집 변경해야

하하, 단서는 이미이며 올바른 방법 ... 필요가 없습니다 것입니다 계산하다! http://sourceforge.net/projects/jung/forums/forum/252062/topic/3040266?message=6522779

@Override 
    public void mouseMoved(final MouseEvent e) { 

     SwingUtilities.invokeLater(
       new Runnable() { 
        public void run() { 
         final VisualizationViewer<GeoLocationData.Station,GeoLocationData.Link> vv = 
          (VisualizationViewer<GeoLocationData.Station,GeoLocationData.Link>)e.getSource(); 
         Point2D p = vv.getRenderContext().getMultiLayerTransformer().inverseTransform(e.getPoint()); 

         double x = p.getX(); 
         double y = p.getY(); 

         vv.setToolTipText ("<html>x: "+(int)x+"<br>y: "+(int)y); 
        } 
       } 
     ); 
    } 
+0

덕분에 많이 :) 은 또한 완벽하게 작동하는 editingGraphMousePlugin 그것을 시도 :) 사실 내가 궁금 해서요 (나는 이미 설정했습니다 editingmodalgraphMouse 아 파크 정점을 추가 할 때 좌표를 얻을 수 있습니다 setter 및 getter) – Jihath

+0

x 및 y를 포함하는 그래프 파일을 얻으려고합니다 지금은 이름과 색을 얻을 수 있지만 x 정보를 설정기에 제공하는 방법을 찾지 못했습니다 – Jihath

+0

@eee 구현시 도구 설명에 좌표가 표시되지만 꼭지점 위치가 다른 코드로 화면에 표시 될 때이를 반환 할 수있는 방법이 있습니까? – CajunLuke