将JPanel置于JPanel上并将焦点放在(JUNG)图上

时间:2016-04-16 15:36:59

标签: java swing jpanel jung

我有一个应用程序,我将图形的顶点和边缘作为输入并绘制该图形。当应用程序启动时,由于没有要显示的图形,我放置了一个占位符面板,然后将添加了图形的jpanel添加到占位符面板。但问题是我必须手动设置尺寸。我正在用JUNG绘制图表。

(问题无关?但我不想创建两个不同的帖子。)

第一个问题:有没有办法自动添加图形面板,以便它使用占位符面板的整个区域?下面是目前看起来的截图。

第二个问题:当我添加时,因为我将JUNG图形布局设置得非常大,所以图形不居中。我必须搜索图表。我希望图表以视图为中心。怎么做?

截图:

http://i.stack.imgur.com/jieGp.png

正如在屏幕截图中可以看到的那样,第二个面板有点看起来很丑陋并且看起来不像它是面板的一部分。我希望占位符面板具有固定的大小,然后图形面板就像那个一样宽,无论图形有多大/多小。如果图形较大则应激活滚动条,否则不应显示滚动条。

这是我的占位符面板:

    placeHolderPanel = new JPanel();
    blackLine = BorderFactory.createLineBorder(Color.BLACK);
    title = BorderFactory.createTitledBorder(blackLine,"Graph");
    title.setTitleJustification(TitledBorder.LEFT);
    border = title.getBorder();
    margin = new EmptyBorder(15,15,15,15);
    title.setBorder(new CompoundBorder(margin,border));

    placeHolderPanel.setBorder(title);
    placeHolderPanel.setLayout(new FlowLayout());
    placeHolderPanel.setPreferredSize(new Dimension(300,300));

单击按钮后,我将图形面板添加到占位符面板(表格是包含绘制图形的所有数据的表格):

    placeHolderPanel.add(new GraphPanel(table));
    placeHolderPanel.repaint();
    placeHolderPanel.revalidate();

以下是使用JUNG可视化图形的方法:

    graph =  new MyGraphCreationClass(vertices,edges).getGraph();

    layout = new CircleLayout(graph);
    layout.setSize(new Dimension(1000,1000));
    //BasicVisualizationServer<Integer,String> vv =
             //new BasicVisualizationServer<Integer,String>(layout);
    vv = new VisualizationViewer<Integer, String>(layout);
    vv.setPreferredSize(new Dimension(900,208));
    vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller());
    vv.getRenderContext().setEdgeLabelTransformer(new ToStringLabeller());
    vv.getRenderContext().setEdgeShapeTransformer(new EdgeShape.Line<Integer,String>());
    vv.getRenderer().getVertexLabelRenderer().setPosition(Position.CNTR);
    vv.setAlignmentX(Component.CENTER_ALIGNMENT);
    vv.setAlignmentY(Component.CENTER_ALIGNMENT);
    gm = new DefaultModalGraphMouse();
    gm.setMode(ModalGraphMouse.Mode.TRANSFORMING);
    vv.setGraphMouse(gm);

    ScalingControl visualizationViewerScalingControl
    = new CrossoverScalingControl();

    vv.scaleToLayout(visualizationViewerScalingControl);

    scrollPane = new GraphZoomScrollPane(vv);

    //scrollPane.setPreferredSize(new Dimension(100,200));
    add(scrollPane, BorderLayout.CENTER);
    //this.setPreferredSize(new Dimension(100,200));

0 个答案:

没有答案