Java: L'aggiunta del pannello all'interno di un altro in fase di esecuzione per adattarsi area visibile
Domanda
Nella mia applicazione voglio mostrare grafico generato, utilizzando JUNG. Produce oggetto JPanel come uscita. Così, ho pensato che sarebbe solo una questione di aggiungere un componente al pannello. Ma il grafico viene disegnato al di fuori del suo pannello padre. Immagine dello schermo: Come posso limitare il grafico essere solo dentro l'area visibile? Il codice che uso per aggiungere il grafico a pannello è questo (il confine è stato per me vedere i bordi del pannello, anche se non mostra per qualche motivo):
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();
Soluzione
utilizzare GraphZoomScrollPane aggiungere contenitore scrollpane grafico zoom-in grado per oggetto VisualizationViewer come segue:
GraphZoomScrollPane pane = new GraphZoomScrollPane(visualizationViewer);
JPanel panel = new JPanel();
BorderLayout panelMapLayout = new BorderLayout();
panel.setLayout(panelMapLayout);
panel.add(pane, BorderLayout.CENTER);
Altri suggerimenti
troppo poco informazioni per l'immagine reale
1 dipende
-
quello rendimenti (grafico generato, utilizzando JUNG)
Size
, state impostate ci setSize (int, int) troppo, -
se è grafico resiziable,
2) Rimuovi
-
layout.setSize(panel.getMarketGraphPane().getPreferredSize());
e
-
graphPanel.setSize(panel.getMarketGraphPane().getPreferredSize());
è possibile non setSize
per oggetto posto al BorderLayout.CENTER
, e penso che sia possibile inserire direttamente (generated graph, using JUNG. It produces JPanel object
) per l'area BorderLayout.CENTER
, prova che forse il vostro twice setSize
generato un po 'di casino
e quindi è possibile chiamare solo
panel.add(graphPanel, BorderLayout.CENTER);
panel.revalidate();
panel.repaint();
3) altre due scelte (senza setSize
clean-up)
-
chiamata
pack();
alla di primo livello Container , avviso accuratamente con monitor LCD / LED limiti -
put che al JScrollPane