2012-03-18 16 views
3

我有一個jane樹顯示在JPanel中。我的樹的構造是這樣的:如何手動設置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()); 
} 

要裝配窗口上的曲線圖,可以計算出圖形大小與面板尺寸之間的性差異,和呼叫傳遞性差異的因素的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());