Java: L'aggiunta del pannello all'interno di un altro in fase di esecuzione per adattarsi area visibile

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

  •  26-10-2019
  •  | 
  •  

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: screenshot 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();
È stato utile?

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)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top