Java: Hinzufügen von Panel in einem anderen zur Laufzeit zum sichtbaren Bereich hinzufügen

StackOverflow https://stackoverflow.com/questions/7812221

  •  26-10-2019
  •  | 
  •  

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:screenshotWie 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();
War es hilfreich?

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)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top