2012-03-18 7 views
3

JPanelにjungツリーが表示されています。私の木のコンストラクタは次のようになります:Jungの視覚化を手動でズームする方法は?

Forest<String, Integer> graph = new DelegateForest<String, Integer>(); 
    static GraphZoomScrollPane panel = null; 
    static DefaultModalGraphMouse graphMouse = null; 
    static JComboBox modeBox = null; 
    static ScalingControl scaler; 

    public PanelTree(List<Cluster> clist) { 
    setBounds(215, 10, 550, 550); 
    updateData(clist); // adds vertex and edges to graph 

    treeLayout = new TreeLayout<String, Integer>(graph); 
    vv = new VisualizationViewer<String, Integer>(treeLayout, new Dimension(500, 500)); 
    vv.setBackground(Color.white); 
    vv.getRenderContext().setEdgeShapeTransformer(new EdgeShape.Line()); 
    vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller()); 
    // add a listener for ToolTips 
    vv.setVertexToolTipTransformer(new ToStringLabeller()); 
    vv.getRenderContext() 
      .setArrowFillPaintTransformer(new ConstantTransformer(Color.lightGray)); 

    panel = new GraphZoomScrollPane(vv); 
    add(panel); 

    graphMouse = new DefaultModalGraphMouse(); 

    vv.setGraphMouse(graphMouse); 

    modeBox = graphMouse.getModeComboBox(); 
    modeBox.addItemListener(graphMouse.getModeListener()); 
    graphMouse.setMode(ModalGraphMouse.Mode.TRANSFORMING); 

    scaler = new CrossoverScalingControl(); 
} 

しかし、ツリーはかなり大きいです。だから私は、ツリーがウィンドウに収まるように自動的にズームアウトする方法があるか、そうでなければデフォルトのズームよりも小さいデフォルトのズームを設定する方法があるかどうかを知りたいです。どうやってやるの ?

答えて

2
ScalingControl scaler = new CrossoverScalingControl(); 

public void zoomIn() { 
    setZoom(1); 
} 

public void zoomOut() { 
    setZoom(-1); 
} 

private void setZoom(int amount) { 
    scaler.scale(vv, amount > 0 ? 1.1f : 1/1.1f, vv.getCenter()); 
} 

には、ウィンドウ上のグラフに合った、あなたは、グラフのサイズとパネルサイズの間diferenceを計算し、diferenceの要因を渡しsetZoom()メソッドを呼び出すことができます。

2

マウストランスフォーマーを使用している場合、ScalingControlは適切な方法ではありません。

に試してみてください。

// for zoom: 
vv.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.LAYOUT).setScale(scale_x1, scale_y1, vv.getCenter()); 
// for out: 
vv.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.VIEW).setScale(scale_x2, scale_y2, vv.getCenter()); 
関連する問題