Code for making and using a DockableWindow addin
Details
Code to make a DockableWindow addin, and then, below it, code to use the DockableWindow in a Button addin.
Original author/s: ESRI
Original location/s: How to create an add-in dockable window
Adapted by: Andy Evans
License: unknown
Other info: This code shows how to start a DockableWindow from a Button, but says nothing about how to
communicate between the two, so the Button can run code in the Window. For this, see Communicating between addins.
DockableWindow: Imports and instance variables
import com.esri.arcgis.addins.desktop.DockableWindow; import javax.swing.*; import com.esri.arcgis.framework.IApplication;
DockableWindow: Code
public class OurWindowClass extends DockableWindow { private IApplication app = null; public void init(IApplication app) { this.app = app; } @Override public Component createUI() { JPanel jPanel = new JPanel(); // Add stuff to the panel. return jPanel; } }
Button: Imports and instance variables
// Note, critically, that we don't import com.esri.arcgis.addins.desktop.DockableWindow; // This is suprising, as this is the class extended above. See below. import com.esri.arcgis.framework.IApplication; import com.esri.arcgis.framework.IDockableWindow; import com.esri.arcgis.framework.IDockableWindowManager; import com.esri.arcgis.framework.IDockableWindowManagerProxy;
Button: Code
public class OurButton extends Button { private IApplication app = null; private IDockableWindow docWin = null; @Override public void onClick() throws IOException, AutomationException { if (docWin != null) { docWin.show(true); } } public void init (IApplication app) { this.app = app; try{ IDockableWindowManager dwm = new IDockableWindowManagerProxy(app); UID uid = new UID(); uid.setValue("uk.ac.leeds.geog.pgiaa.OurWindowClass"); // Note that the next line returns our com.esri.arcgis.addins.desktop.DockableWindow // but wrapped up inside a com.esri.arcgis.framework.DockableWindow. We cannot therefore // cast the DockableWindow we get into either the original [OurWindowClass] class, or com.esri.arcgis.addins.desktop.DockableWindow. // This causes us considerable issues if we want to get the original object to run methods inside. For the solution see "More info", above. docWin = dwm.getDockableWindow(uid); docWin.show(false); } catch (Exception e){ JOptionPane.showMessageDialog(null, e.getMessage()); } } }