WorldWind Java на платформе Netbeans TopComponent

#netbeans #worldwind

#netbeans #worldwind

Вопрос:

Я пытаюсь добавить слой в WorldWind Java (версия 1.2), расположенный на платформе Netbeans TopComponent (с использованием netbeans 7.0). TopComponent находится в режиме редактора, и для WWJ я использую WorldWindowGLCanvas, который является единственным компонентом swing в TopComponent и помещается в BorderLayout .ЦЕНТР. Если я добавляю слои с помощью конструктора, все работает хорошо, я могу видеть слои нормально. Если я добавляю слой с помощью элементов управления swing (например, кнопки), слой добавляется в список слоев, но он не отображается. Это происходит как для WMS, так и для отображаемого слоя. Тот же процесс в чистом приложении swing работает нормально, что наводит меня на мысль, что процесс рендеринга в WWJ каким-то образом противоречит изображению TopComponent. Любая помощь с благодарностью.

Ответ №1:

Я настроил демонстрационную версию с использованием платформы NetBeans (7.0.1) с gov.nasa.worldwind.awt.WorldWindowGLCanvas и gov.nasa.worldwindx.examples.LayerPanel

Код инициализации:

 private void initComponents() {
    canvas = new WorldWindowGLCanvas();

    Model model = (Model) WorldWind.createConfigurationComponent(AVKey.MODEL_CLASS_NAME);
    canvas.setModel(model);

    layerPanel = new LayerPanel(canvas);

    setLayout(new BorderLayout());
    add(canvas, BorderLayout.CENTER);
    add(layerPanel, BorderLayout.WEST);
}
private WorldWindowGLCanvas canvas;
private LayerPanel layerPanel;
  

Это работает так же, как и при запуске образца как отдельного, поэтому я бы сказал, что проблема заключается не в платформе NetBeans. Без какого-либо кода трудно сказать, что происходит не так.

Обратите внимание, что gov.nasa.worldwind.awt.WorldWindowGLCanvas это не компонент Swing, а компонент с большим весом. Это не имеет отношения к вашему вопросу, но я не мог не указать на это. Компонент Swing является gov.nasa.worldwind.awt.WorldWindowGLJPanel

Редактировать: я понимаю, что мой ответ не очень полезен, поэтому, чтобы исправить это, я бы добавил предложение. Вы можете попытаться аннулировать TopComponent и вызывать repaint всякий раз, когда вам это нужно для рендеринга нового слоя.

Комментарии:

1. Проблема оказалась в поиске — то, как мы использовали lookup, создало еще один экземпляр WWJ — мы обошли это, сохранив статическую ссылку на WorldWindowGLCanvas.