Java: Agregar panel dentro de otro en el tiempo de ejecución para adaptarse al área visible

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

  •  26-10-2019
  •  | 
  •  

Pregunta

En mi aplicación quiero mostrar el gráfico generado, usando Jung. Produce objeto jpanel como salida. Entonces, pensé que sería solo una cuestión de agregar un componente al panel. Pero el gráfico se dibuja fuera de su panel principal. Captura de pantalla:screenshot¿Cómo restringo el gráfico para estar solo dentro del área visible? El código que utilizo para agregar gráfico al panel es este (el borde fue para ver bordes de panel, aunque no se muestra por alguna razón):

    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();
¿Fue útil?

Solución

Use GraphZoomScrollPane para agregar un contenedor ScrollPane de gráficos Zoom -able para el objeto VisualizationViewer de la siguiente manera:

GraphZoomScrollPane pane = new GraphZoomScrollPane(visualizationViewer);
JPanel panel = new JPanel();
BorderLayout panelMapLayout = new BorderLayout();
panel.setLayout(panelMapLayout);
panel.add(pane, BorderLayout.CENTER);

Otros consejos

muy poca información para la imagen real

1 depende

  • qué Size devuelve (gráfico generado, usando Jung), ¿está configurado allí setSize (int, int) también,

  • si es gráfico reestriziable,

2) Eliminar

  • layout.setSize(panel.getMarketGraphPane().getPreferredSize());

y

  • graphPanel.setSize(panel.getMarketGraphPane().getPreferredSize());

no puedes setSize Para el objeto colocado al BorderLayout.CENTER, y creo que eso es posible directamente (generated graph, using JUNG. It produces JPanel object) hacia BorderLayout.CENTER área, intenta que tal vez tu twice setSize generó algo de desastre

Y luego solo puedes llamar

panel.add(graphPanel, BorderLayout.CENTER);
panel.revalidate();
panel.repaint();

3) Otras dos elecciones (sin limpieza setSize)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top