Предпочтительный размер JUNG Layout в зависимости от размера графика

Я использую фреймворк JUNG с FRLayout. Нравится:

layout = new FRLayout<String, Number>(graph);
preferredSize = new Dimension(600, 600);

final VisualizationModel<String, Number> visualizationModel = 
new DefaultVisualizationModel<String, Number>(layout, preferredSize);
vv = new VisualizationViewer<String, Number>(visualizationModel, preferredSize);

Я поместил это в GraphZoomScrollPane. Я могу увеличивать, уменьшать масштаб, перемещать график, пока он не будет выглядеть так, как я хочу, но я бы хотел, чтобы он был таким, когда я запускаю свое приложение Swing.

Чего я точно хочу, так это того, чтобы PreferredSize графа динамически корректировался в зависимости от размера графа, чтобы при загрузке больших графов мне не приходилось увеличивать масштаб в миллиард раз, прежде чем вершины больше не перекрываются.

То, что не помещается на моей панели, обычно должно «исчезать» за полосами прокрутки.


person Pieter-Jan    schedule 19.10.2012    source источник


Ответы (1)


Вы можете масштабировать его программно, используя следующее:

double amount = 1.0;    // Or negative to zoom out.
ScalingControl scaler = new CrossoverScalingControl();
scaler.scale(vv, amount > 0 ? 1.1f : 1 / 1.1f, vv.getCenter());

Примечание. Я получил это от StackOverflow раньше (поэтому кредит на этот код не мой), но я не могу найти исходный вопрос.

РЕДАКТИРОВАТЬ:

Я нашел это:

Как вручную установить масштаб визуализации Юнга?< /а>

person sdasdadas    schedule 22.10.2012
comment
Спасибо за ваш ответ, я действительно использую этот метод для своих функций масштабирования. Но я не знаю, как рассчитать коэффициент, исходя из количества вершин, которые у меня есть, и макета, который я использую. - person Pieter-Jan; 23.10.2012
comment
Я понимаю - я пытаюсь добиться чего-то подобного, но в настоящее время это не имеет высокого приоритета. Если я найду простой способ, я отредактирую свой пост и дам вам знать. - person sdasdadas; 25.10.2012
comment
Извините, что поздно, но попробуйте использовать vv.scaleToLayout(new CrossoverScalingControl()). - person sdasdadas; 26.11.2012
comment
Нет, это не совсем похоже на трюк. Но это нормально, я нашел обходной путь. При запуске я показываю график до уровня 2, и чтобы увидеть более низкие уровни, вам нужно расширить узлы на уровне 2. Я еще немного поиграю с этим, если я найду решение, я опубликую его. здесь. - person Pieter-Jan; 28.11.2012
comment
Это поздний ответ, но вы должны установить размер в макете. Функция scaleToLayout работает на основе соотношения vv.getPreferredSize / layout.getSize. - person sdasdadas; 27.03.2013