Java Swing How to - Prevent node selection on node expansion in a JTree








Question

We would like to know how to prevent node selection on node expansion in a JTree.

Answer

import java.awt.BorderLayout;
import java.awt.Container;
/*from   ww  w  .j a  v a 2s .  c  o m*/
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeNode;

public class Main extends JFrame {
    public static void main(String[] args) {
        new Main(5);
    }
    public Main(int n) {
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        Container content = getContentPane();
        JTree tree = new JTree(new OutlineNode(1, n));
        content.add(new JScrollPane(tree), BorderLayout.CENTER);
        setSize(300, 475);
        setVisible(true);
    }
}
class OutlineNode extends DefaultMutableTreeNode {
  boolean areChildrenDefined = false;
  int outlineNum;
  int numChildren;

  public OutlineNode(int outlineNum, int numChildren) {
      this.outlineNum = outlineNum;
      this.numChildren = numChildren;
  }

  @Override
  public boolean isLeaf() {
      return false;
  }

  @Override
  public int getChildCount() {
      if (!areChildrenDefined) {
          defineChildNodes();
      }
      return super.getChildCount();
  }

  private void defineChildNodes() {
      areChildrenDefined = true;
      for (int i = 0; i < numChildren; i++) {
          add(new OutlineNode(i + 1, numChildren));
      }
  }

  @Override
  public String toString() {
      TreeNode parent = getParent();
      if (parent == null) {
          return String.valueOf(outlineNum);
      } else {
          return parent.toString() + "." + outlineNum;
      }
  }
}