I have created a TopComponent in an NetBeans 8.0 platform application. I would like to display the canvas on it, but when ever the code is called to bring out a worldwind component and exception is thrown:
"A java.lang.IllegalStateException exception has occurred. Click Show Details or see the messages.log file located in your C:\Users\abradford\Desktop\NetBeans Projects\MTAET\MTAET\build\testuserdir\var\log folder."
java.lang.IllegalStateException: Cannot find TopComponent with preferredID EarthTopComponent, see IDE log for more details.
For this the TopComponent is dependant on the WorldWind.jar files and Jogl files. While the WorldWind.jar files is only dependent on Jogl files. All Im asking is if someone can shed some light on why the worldwind components wont work with the TopComponent. and if someone has an already working piece of code that bridges it or works it out that would be awesome too. Its been a while since I have programmed Java and I may have started in a little strong with all this so forgive me if the answer is obvious.
Here is the Code I am using: V This Is the TopComponent V
import org.openide.awt.ActionID;
import org.openide.awt.ActionReference;
import org.openide.util.NbBundle;
import org.openide.windows.TopComponent;
@TopComponent.Description(
preferredID = "EarthTopComponent",
persistenceType = TopComponent.PERSISTENCE_ALWAYS
)
@TopComponent.Registration(
mode = "editor",
openAtStartup = true
)
@ActionID(
category = "Window",
id = "EarthTopComponent"
)
@ActionReference(
path = "Menu/Window"
)
@TopComponent.OpenActionRegistration(
displayName = "Earth",
preferredID = "EarthTopComponent"
)
@NbBundle.Messages({"CTL_EarthViewer=Earth View",
"HINT_EarthViewer=This is the Earth View"
})
public class EarthTopComponent extends TopComponent {
public EarthTopComponent() {
setName(Bundle.CTL_EarthViewer());
setToolTipText(Bundle.HINT_EarthViewer());
GUIWorldWind gui = new GUIWorldWind();
add(gui.getFrame());
}
}
_________________________________________________
V This is the Canvas Class V
package Earth;
//Basic Java Imports
import javax.swing.*;
import java.awt.*;
//import java.util.ArrayList;
//imports for layers
import gov.nasa.worldwind.layers.*;
import gov.nasa.worldwind.layers.Earth.*;
//Imports for Geometry
//import gov.nasa.worldwind.render.*;
//import gov.nasa.worldwind.geom.Position;
//import gov.nasa.worldwind.layers.RenderableLayer;
//imports for world wind libraries
import gov.nasa.worldwind.*;
import gov.nasa.worldwind.awt.WorldWindowGLCanvas;
import gov.nasa.worldwind.avlist.AVKey;
public class CanvasPanel extends JPanel
{
//World Wind GUI components
private LayerList layerlist; //Holds all Layers
private WorldWindowGLCanvas canvas; //Displays Model
private Model model; //world and layers
//Swing and AWT GUI components
JPanel mainPanel; //Main focus of the GUI
/*
* Constructs the panel when the class is called
*/
public CanvasPanel()
{
//canvas and layerlist variables
canvas = new WorldWindowGLCanvas();
loadPanel(); //loads the panel
loadLayers(); //loads all default layers
//sets the canvas to fill the panelspace
canvas.setPreferredSize(new Dimension((mainPanel.getWidth() - 100), (mainPanel.getHeight() - 100)));
//Creates a new model to display in the canvas
model = (Model) WorldWind.createConfigurationComponent(AVKey.MODEL_CLASS_NAME);
//adds all relevant layers to the model
model.setLayers(layerlist);
//adds the model to the canvas
canvas.setModel(model);
}
/**
* Sends the Panel when requested
*
* @return mainPanel, as JPanel object
*/
public JPanel getPanel()
{
return mainPanel;
}
/**
* called in the constructor, this method constructs the Swing and AWT
* components of the Panel.
*/
private void loadPanel()
{
//Creates and sets the dimensions of the Panel
mainPanel = new JPanel();
mainPanel.setSize(700, 700);
mainPanel.setBackground(Color.DARK_GRAY);
mainPanel.setBorder(
BorderFactory.createMatteBorder(2, 2, 2, 2, new Color(0, 0, 0))
);
//Adds the canvas to the panel
mainPanel.add(canvas, BorderLayout.CENTER);
}
/**
* Adds relevant layers to layerlist to be added to the model
*/
private void loadLayers()
{
//creates a new layerlist array
layerlist = new LayerList();
//preloading all of the default layers
layerlist.add(new StarsLayer()); //Stars
layerlist.add(new SkyGradientLayer()); //Atmosphere
layerlist.add(new BMNGWMSLayer()); //BlueMarble Globe
layerlist.add(new CountryBoundariesLayer());//Political Boundaries
layerlist.add(new MSVirtualEarthLayer()); //City View
layerlist.add(new NASAWFSPlaceNameLayer()); //Names of Places
layerlist.add(new LatLonGraticuleLayer()); //Lat and Long Grid
}
}
V And this puts the two together V
protected void displayGUI(final String title) { //creates frame object guiFrame = new JFrame(title);
//sets exit button properties
guiFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//creates gui components
menuBar = new FileMenuBar();
sideBar = new OptionSideBar();
canvasPanel = new CanvasPanel();
//adds objects to the form
guiFrame.setJMenuBar(menuBar.getMenu());
guiFrame.add(sideBar.getSideBar(), BorderLayout.WEST);
guiFrame.add(canvasPanel.getPanel(), BorderLayout.CENTER);
//loads the form
guiFrame.pack();
//determines the size of the form
Dimension scrnSize = Toolkit.getDefaultToolkit().getScreenSize();
int scrnWidth = guiFrame.getSize().width;
int scrnHeight = guiFrame.getSize().height;
int x = (scrnSize.width - scrnWidth) / 2;
int y = (scrnSize.height - scrnHeight) / 2;
//places form on the screen
guiFrame.setLocation(x,y);
//sets for to visible
guiFrame.setVisible(true);
}
I managed to come across the answer by accident while I was trying out some of the pre-generated code. Here is a working example of useing a WorldWindGLCanvas on a Top Component in the NetBeans 8.0 Platform. I hope this answer helps someone cause it took me way to long to accidently find this on my own.
Below is the Topcomponent Class.
package Earth;
import gov.nasa.worldwind.*;
import gov.nasa.worldwind.avlist.AVKey;
import gov.nasa.worldwind.awt.WorldWindowGLCanvas;
import java.awt.BorderLayout;
import org.openide.awt.ActionID;
import org.openide.awt.ActionReference;
import org.openide.windows.TopComponent;
import org.openide.util.NbBundle.Messages;
import gov.nasa.worldwind.layers.*;
import gov.nasa.worldwind.layers.Earth.*;
import java.awt.Dimension;
import javax.swing.JInternalFrame;
@TopComponent.Description(
preferredID = "EarthTopComponent",
//iconBase="SET/PATH/TO/ICON/HERE",
persistenceType = TopComponent.PERSISTENCE_ALWAYS
)
@TopComponent.Registration(mode = "explorer", openAtStartup = false)
@ActionID(category = "Window", id = "Earth.EarthTopComponent")
@ActionReference(path = "Menu/Window" /*, position = 333 */)
@TopComponent.OpenActionRegistration(
displayName = "#CTL_EarthAction",
preferredID = "EarthTopComponent"
)
@Messages({
"CTL_EarthAction=Earth",
"CTL_EarthTopComponent=Earth Window",
"HINT_EarthTopComponent=This is the Earth window"
})
public final class EarthTopComponent extends TopComponent {
public EarthTopComponent() {
initcomp();
setName(Bundle.CTL_EarthTopComponent());
setToolTipText(Bundle.HINT_EarthTopComponent());
}
private LayerList layerlist; //Holds all Layers
private WorldWindowGLCanvas canvas; //Displays Model
private Model model; //world and layers
private OptionSideBar sidebar;
private JInternalFrame layersPanel;
private void initcomp()
{
canvas = new WorldWindowGLCanvas();
sidebar = new OptionSideBar();
//Creates a new model to display in the canvas
model = (Model) WorldWind.createConfigurationComponent(AVKey.MODEL_CLASS_NAME);
loadLayers();
//adds all relevant layers to the model
model.setLayers(layerlist);
//adds the model to the canvas
canvas.setModel(model);
setLayout(new BorderLayout());
layersPanel = new JInternalFrame("Layers Panel");
layersPanel.setIconifiable(true);
layersPanel.setSize(new Dimension(150,250 ));
layersPanel.add(sidebar.getSideBar());
layersPanel.setVisible(true);
setLayout(new BorderLayout());
canvas.setSize(new Dimension(500,550));
canvas.setVisible(true);
add(layersPanel,BorderLayout.CENTER);
add(canvas,BorderLayout.CENTER);
}
/**
* Adds relevant layers to layerlist to be added to the model
*/
private void loadLayers()
{
//creates a new layerlist array
layerlist = new LayerList();
//preloading all of the default layers
layerlist.add(new StarsLayer()); //Stars
layerlist.add(new SkyGradientLayer()); //Atmosphere
layerlist.add(new BMNGWMSLayer()); //BlueMarble Globe
layerlist.add(new CountryBoundariesLayer());//Political Boundaries
layerlist.add(new MSVirtualEarthLayer()); //City View
layerlist.add(new NASAWFSPlaceNameLayer()); //Names of Places
layerlist.add(new LatLonGraticuleLayer()); //Lat and Long Grid
}
}