protected void createOWLVizTabUI() {
    setLayout(new BorderLayout());
    // Create the tabbed pane
    tabbedPane = new JTabbedPane();
    add(tabbedPane);

    // /////////////////////////////////////////////////////////////////////
    //
    // Build the asserted subclass hierarchy tabs
    //
    // ////////////////////////////////////////////////////////////////////
    assertedGraphModel = new OWLClassGraphAssertedModel(getOWLModelManager());
    OWLVizGraphPanel assertedPanel =
        new OWLVizGraphPanel("Asserted hierarchy", this, getOWLEditorKit(), assertedGraphModel);
    assertedGraphComponent = assertedPanel.getGraphComponent();
    setupListeners(assertedGraphComponent);
    tabbedPane.add(assertedPanel.getName(), assertedPanel);
    graphComponents.add(assertedGraphComponent);

    // /////////////////////////////////////////////////////////////////////
    //
    // Build the inferred subclass hierarchy tabs
    //
    // ////////////////////////////////////////////////////////////////////
    inferredGraphModel = new OWLClassGraphInferredModel(getOWLModelManager());
    OWLVizGraphPanel inferredPanel =
        new OWLVizGraphPanel("Inferred hierarchy", this, getOWLEditorKit(), inferredGraphModel);
    inferredGraphComponent = inferredPanel.getGraphComponent();
    tabbedPane.add(inferredPanel.getName(), inferredPanel);
    graphComponents.add(inferredGraphComponent);

    // Group the asserted and inferred hierarchy tabs, so that operations
    // such as showing subclasses etc. are applied to both tabs.
    ArrayList<GraphComponent> list = new ArrayList<GraphComponent>();
    list.add(assertedGraphComponent);
    list.add(inferredGraphComponent);
    componentGroupMap.put(assertedPanel, list);
    componentGroupMap.put(inferredPanel, list);

    // Create the toolbar
    createToolBar(assertedGraphComponent.getController(), assertedGraphComponent.getController());
  }
  /**
   * Sets up the main listeners that are required by the tab, including selection listeners, and
   * knowledgebase listeners.
   */
  protected void setupListeners(final GraphComponent graphComponent) {
    /*
     * Listen to node clicks so that if there is a double click we can
     * display the Protege Info View
     */
    graphComponent
        .getGraphView()
        .addNodeClickedListener(
            new NodeClickedListener() {
              /**
               * Invoked when a <code>Node</code> has been clicked by the mouse in the <code>
               * GraphView</code>
               *
               * @param evt The event associated with this action.
               */
              public void nodeClicked(NodeClickedEvent evt) {
                // if(evt.getMouseEvent().getClickCount() == 2) {
                // Object selObj = graphComponent.getSelectedObject();
                // if(selObj != null) {
                // if(selObj instanceof Instance) {
                // showInstance((Instance) selObj);
                // }
                // }
                // }
              }
            });

    graphComponent.addGraphSelectionModelListener(
        new GraphSelectionModelListener() {
          public void selectionChanged(GraphSelectionModelEvent event) {
            Object selObj = event.getSource().getSelectedObject();
            if (selObj instanceof OWLClass) {
              selectionModel.setSelectedClass((OWLClass) selObj);
              setGlobalSelection((OWLClass) selObj);
            }
          }
        });

    tabbedPane.addContainerListener(
        new ContainerListener() {
          public void componentAdded(ContainerEvent e) {
            // Do nothing
          }

          public void componentRemoved(ContainerEvent e) {
            // Remove components from hash sets etc.
            componentGroupMap.remove(e.getChild());
            closableTabs.remove(e.getChild());
            graphComponents.remove(e.getChild());
            OWLVizGraphPanel panel = (OWLVizGraphPanel) e.getChild();
            panel.dispose();
          }
        });
  }