2014-04-26 3 views
0

JFrame에서 동적으로 셀을 정렬 할 수 있도록 계층 적 레이아웃이있는 mxGraph를 가운데에 배치하려고합니다. jFrame을 렌더링 할 때마다 mxGraph가 프레임의 왼쪽 위 모서리에 그려지고 그래프의 위치를 ​​수정할 수있는 방법을 찾을 수 없습니다. 어떻게이 일을 완수합니까?JFrame의 가운데 mxGraph

//f.getContentPane().add(BorderLayout.CENTER, graphComponent); 
f.add(graphComponent, new GridBagConstraints()); 

왜이 작품을 이해하기 :

JFrame f = new JFrame(); 
f.setLayout(new GridBagLayout()); 

다음 기본 제약 조건을 사용하여 프레임에 구성 요소를 추가

public class Test { 

    public Test() { 
     Object v1; 
     Object v2; 
     Object v3; 
     JFrame f = new JFrame(); 
     f.setSize(500, 500); 
     f.setLocation(300, 200); 

     mxGraph graph = new mxGraph(); 
     mxGraphComponent graphComponent = new mxGraphComponent(graph); 
     f.getContentPane().add(BorderLayout.CENTER, graphComponent); 
     f.setVisible(true); 

     Object parent = graph.getDefaultParent(); 
     graph.getModel().beginUpdate(); 
     try { 
      v1 = graph.insertVertex(parent, null, "node1", 100, 100, 80, 30); 
      v2 = graph.insertVertex(parent, null, "node2", 100, 100, 80, 30); 
      v3 = graph.insertVertex(parent, null, "node3", 100, 100, 80, 30); 

      graph.insertEdge(parent, null, "Edge", v1, v2); 
      graph.insertEdge(parent, null, "Edge", v2, v3); 

     } finally { 
      graph.getModel().endUpdate(); 
     } 

     // define layout 
     mxIGraphLayout layout = new mxHierarchicalLayout(graph); 

     // layout using morphing 
     graph.getModel().beginUpdate(); 
     try { 
      layout.execute(graph.getDefaultParent()); 
     } finally { 
        graph.getModel().endUpdate(); 
        // fitViewport(); 
     } 

    } 

    public static void main(String[] args) { 
     Test t = new Test(); 

    } 
} 

답변

0

변경 프레임의 레이아웃 매니저는 GrigBagLayout를 사용하는 사용 방법 GridBagLayout에 대한 스윙 튜토리얼의 섹션, 특히 weightx/weighty 제약 조건의 작동 방법을 설명하는 섹션을 읽어보십시오.

마지막으로 f.setVisible() 메서드를 생성자의 마지막 문으로 호출해야하며 모든 구성 요소가 프레임 및 하위 패널 프레임에 추가됩니다.

+0

이 방법은 그래프를 가운데에 배치하지만 mxGraph 주위에 회색 배경을 제공합니다. 실제로 렌더링되는 캔버스 내에서 그래프를 중앙에 배치 할 생각이었습니다. 어떻게 알았습니까? –

+0

mxGraph가 무엇인지 모르겠습니다. 도움이 더 필요하면 문제를 보여주는 [SSCCE] (http://www.sscce.org/)를 게시하십시오. 물론 'SSCCE'는 타사 구성 요소가 아닌 표준 Swing 구성 요소를 사용해야하므로 사람들이 코드를 실행하여 설명하려고하는 동작을 볼 수 있습니다. – camickr

1

다음은 그래프를 중앙에 배치하는 또 다른 방법입니다.

//Before you add a vertex/edge to graph, get the size of layout 
    widthLayout = graphComponent.getLayoutAreaSize().getWidth(); 
    heightLayout = graphComponent.getLayoutAreaSize().getHeight(); 

    //if you are done with adding vertices/edges, 
    //we need to determine the size of the graph 

    double width = mxGraph.getGraphBounds().getWidth(); 
    double height = mxGraph.getGraphBounds().getHeight(); 

    //set new geometry 
    mxGraph.getModel().setGeometry(mxGraph.getDefaultParent(), 
      new mxGeometry((widthLayout - width)/2, (heightLayout - height)/2, 
        widthLayout, heightLayout)); 

이것은 저에게 잘 맞습니다.