我有一个应用程序,我将图形的顶点和边缘作为输入并绘制该图形。当应用程序启动时,由于没有要显示的图形,我放置了一个占位符面板,然后将添加了图形的jpanel添加到占位符面板。但问题是我必须手动设置尺寸。我正在用JUNG绘制图表。
(问题无关?但我不想创建两个不同的帖子。)
第一个问题:有没有办法自动添加图形面板,以便它使用占位符面板的整个区域?下面是目前看起来的截图。
第二个问题:当我添加时,因为我将JUNG图形布局设置得非常大,所以图形不居中。我必须搜索图表。我希望图表以视图为中心。怎么做?
截图:
正如在屏幕截图中可以看到的那样,第二个面板有点看起来很丑陋并且看起来不像它是面板的一部分。我希望占位符面板具有固定的大小,然后图形面板就像那个一样宽,无论图形有多大/多小。如果图形较大则应激活滚动条,否则不应显示滚动条。
这是我的占位符面板:
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));