Java: Hinzufügen von Panel in einem anderen zur Laufzeit zum sichtbaren Bereich hinzufügen
Frage
In meiner Anwendung möchte ich mit Jung generiertes Diagramm anzeigen. Es erzeugt JPanel -Objekt als Ausgabe. Also, ich obwohl es nur darum geht, eine Komponente zum Panel hinzuzufügen. Die Grafik wird jedoch außerhalb seines übergeordneten Panels gezogen. Bildschirmfoto:Wie beschränkt ich das Diagramm so, dass ich nur im sichtbaren Bereich liegt? Der Code, den ich für ein Diagramm zu der Panel hinzufügt, lautet dies (der Grenze war für mich, Panel -Grenzen zu sehen, obwohl er aus irgendeinem Grund nicht angezeigt wird):
Layout<Object, String> layout = new CircleLayout<Object, String> (graphProvider.getGraph());
layout.setSize(panel.getMarketGraphPane().getPreferredSize());
BasicVisualizationServer<Object,String> graphPanel = new BasicVisualizationServer<Object,String>(layout);
graphPanel.setBorder(new EtchedBorder());
graphPanel.setSize(panel.getMarketGraphPane().getPreferredSize());
panel.getMarketGraphPane().add(graphPanel, BorderLayout.CENTER);
panel.getMarketGraphPane().revalidate();
Lösung
Verwenden Sie GraphZoomScrollPane, um den Zoom-Darg-Graph-Scrollpane-Container für das VisualizationViewer-Objekt wie folgt hinzuzufügen:
GraphZoomScrollPane pane = new GraphZoomScrollPane(visualizationViewer);
JPanel panel = new JPanel();
BorderLayout panelMapLayout = new BorderLayout();
panel.setLayout(panelMapLayout);
panel.add(pane, BorderLayout.CENTER);
Andere Tipps
Zu wenig Informationen für das eigentliche Bild
1 hängt davon ab
was
Size
Rücksendungen (generiertes Diagramm, indem Sie Jung verwenden), werden Sie dort SetSize (int, int) auch festgelegt, auch.Wenn Diagramme -resizierbar ist,
2) Entfernen
layout.setSize(panel.getMarketGraphPane().getPreferredSize());
und
graphPanel.setSize(panel.getMarketGraphPane().getPreferredSize());
du kannst nicht an setSize
für Objekt an das platziert BorderLayout.CENTER
, und ich denke, das ist direkt möglich (generated graph, using JUNG. It produces JPanel object
) zum BorderLayout.CENTER
Bereich, versuchen Sie das vielleicht Ihre twice setSize
erzeugte etwas Chaos
Und dann können Sie nur anrufen
panel.add(graphPanel, BorderLayout.CENTER);
panel.revalidate();
panel.repaint();
3) zwei weitere Auswahlmöglichkeiten (ohne Aufräumarbeiten setSize
)
Anruf
pack();
zum Container auf oberster Ebene, Beachten Sie sorgfältig mit LCD/LED -Monitorengrenzenleg das an die Jscrollpane