Java: добавление панели внутри другой в течение времени, чтобы соответствовать видимой зоне
Вопрос
В своем приложении я хочу показать сгенерированный график, используя Jung. Он производит объект JPanel в качестве вывода. Так что я, хотя это было бы просто вопросом добавления компонента к панели. Но график нарисован за пределами его родительской панели. Скриншот:Как ограничить график быть только внутри видимой области? Код, который я использую для добавления графика на панель, это (граница была для меня, чтобы увидеть границы панели, хотя по какой -то причине он не показывает):
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();
Решение
Используйте graphzoomscrollpane, чтобы добавить Zoomble-Able Graph Scrollpane Container для объекта VisualizationViewer следующим образом:
GraphZoomScrollPane pane = new GraphZoomScrollPane(visualizationViewer);
JPanel panel = new JPanel();
BorderLayout panelMapLayout = new BorderLayout();
panel.setLayout(panelMapLayout);
panel.add(pane, BorderLayout.CENTER);
Другие советы
Слишком мало информации для фактического изображения
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
)
вызов
pack();
в Контейнер на верхнем уровне, внимательно обратите внимание на границы с ЖК -дисплеев/светодиодпоместить это в Jscrollpane