Java: Ajout panneau dans un autre au moment de l'exécution pour adapter la zone visible
Question
Dans ma demande, je veux montrer le graphique généré, en utilisant JUNG. Elle produit l'objet JPanel en sortie. Donc, je pensais que ce serait juste une question d'ajouter un composant à panneau. Mais le graphique est tracé en dehors de son groupe parent. Capture d'écran: Comment puis-je limiter le graphique pour être seulement à l'intérieur de la zone visible? Le code que j'utilise pour ajouter le graphique au panneau est ce (la frontière a été pour moi de voir les frontières du panneau, mais il ne montre pas pour une raison quelconque):
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();
La solution
utiliser GraphZoomScrollPane ajouter graphique zoom capable conteneur scrollpane pour objet VisualizationViewer comme suit:
GraphZoomScrollPane pane = new GraphZoomScrollPane(visualizationViewer);
JPanel panel = new JPanel();
BorderLayout panelMapLayout = new BorderLayout();
panel.setLayout(panelMapLayout);
panel.add(pane, BorderLayout.CENTER);
Autres conseils
trop peu d'informations pour l'image réelle
1 dépend
-
ce qui rend
Size
(graphique généré, en utilisant JUNG), vous définissez il setSize (int, int) aussi, -
est un graphique resiziable,
2) supprimer
-
layout.setSize(panel.getMarketGraphPane().getPreferredSize());
et
-
graphPanel.setSize(panel.getMarketGraphPane().getPreferredSize());
vous ne pouvez pas à setSize
pour objet placé au BorderLayout.CENTER
, et je pense qu'il est possible de mettre directement (generated graph, using JUNG. It produces JPanel object
) dans la zone de BorderLayout.CENTER
, essayer peut-être votre twice setSize
généré un certain désordre
et vous pouvez appeler uniquement
panel.add(graphPanel, BorderLayout.CENTER);
panel.revalidate();
panel.repaint();
3) deux autres choises (sans setSize
nettoyage)
-
Appel
pack();
au niveau supérieur Conteneur , avis soigneusement avec des bornes moniteurs LCD / LED -
mettre que la JScrollPane