propertyEditorPanelListener = this;
  private void setModifiableConfigurableComponent() {    if (tree != null)      configCompPanel.remove(tree);    // create tree and model before adding to it    // as the add methods reference the tree and model    root = new DefaultMutableTreeNode("Properties");    tree = new JTree(new DefaultTreeModel(root));    if (!isEditable) {      DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer();      renderer.setTextNonSelectionColor(Color.gray);      renderer.setTextSelectionColor(Color.gray);      tree.setCellRenderer(renderer);    }    makeTree();    tree.expandPath(new TreePath(root));    tree.setEditable(isEditable);    tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);    tree.addTreeSelectionListener(this);    configCompPanel.setLeftComponent(new JScrollPane(tree));    propertyTable = new PropertyTable(isEditable);    // don't allow user to reorder columns    propertyTable.getTableHeader().setReorderingAllowed(false);    if (!isEditable) {      propertyTable.setForeground(Color.gray);    }    tableScrollPane = new JScrollPane(propertyTable);    JPanel rightPanel = new JPanel(new BorderLayout());    rightPanel.add(tableScrollPane);    // only add description if user can edit the properties    if (isEditable) {      // Just show the description for the first component...      URL url = componentToConfigure.getDescription();      if (url != null) {	JTextPane pane = new JTextPane();	try {	  pane.setEditable(false);	  pane.addHyperlinkListener(this);	  pane.setPage(url);	  rightPanel.add(pane, BorderLayout.NORTH);	} catch (IOException ioe) {          if(log.isErrorEnabled()) {            log.error("Exception", ioe);          }	}      } else {	JLabel pane = new JLabel("No description available");	rightPanel.add(pane, BorderLayout.NORTH);      }    }    configCompPanel.setRightComponent(rightPanel);    for (int i = 0; i < compsToConfig.length; i++) {      //      componentToConfigure.addPropertiesListener(this);      compsToConfig[i].addPropertiesListener(this);    }    configCompPanel.validate();    configCompPanel.setDividerLocation(200);  }