Java: добавление панели внутри другой во время выполнения, чтобы соответствовать видимой области - PullRequest
2 голосов
/ 18 октября 2011

В моем приложении я хочу показать сгенерированный график, используя JUNG. Это производит объект JPanel как вывод. Итак, я думаю, что это просто вопрос добавления компонента на панель. Но график рисуется за пределами родительской панели. Скриншот: скриншот http://i51.tinypic.com/2eg5lk5.jpg Как я могу ограничить график только внутри видимой области? Код, который я использую для добавления графика на панель, выглядит следующим образом (граница была для меня, чтобы видеть границы панели, хотя по какой-то причине она не отображается):

    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();

Ответы [ 2 ]

3 голосов
/ 19 октября 2011

слишком мало информации для фактического изображения

1 зависит

  • что Size возвращает (сгенерированный график, используя JUNG), если вы там тоже задаете setSize (int, int),

  • , если изменяется граф,

2) удалить

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

и

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

вы не можете setSize для Объекта, помещенного в BorderLayout.CENTER, и я думаю, что можно напрямую поместить (generated graph, using JUNG. It produces JPanel object) в область BorderLayout.CENTER, попробуйте, чтобы, возможно, ваш twice setSize вызвал какой-то беспорядок

и тогда вы можете звонить только

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

3) еще два варианта (без очистки setSize)

2 голосов
/ 19 октября 2011

используйте GraphZoomScrollPane для добавления контейнера масштабируемой области прокрутки графика для объекта VisualizationViewer следующим образом:

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