Prevent node selection on node expansion in a JTree

谁都会走 提交于 2019-12-06 03:34:39

I don't get that problem with the code below. You must be doing something else that we can't guess without seeing your code. Try taking the code below and modify it to reproduce the problem you are seeing. By doing that, there is a great chance that you will find what you are doing differently and why you get that behaviour (see also SSCCE).

The code has been taken from here

import java.awt.BorderLayout;
import java.awt.Container;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeNode;

public class DynamicTree extends JFrame {

    public class OutlineNode extends DefaultMutableTreeNode {
        private boolean areChildrenDefined = false;
        private int outlineNum;
        private 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() {
            // You must set the flag before defining children if you
            // use "add" for the new children. Otherwise you get an infinite
            // recursive loop, since add results in a call to getChildCount.
            // However, you could use "insert" in such a case.
            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;
            }
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new DynamicTree(5);
            }
        });
    }

    public DynamicTree(int n) {
        super("Creating a Dynamic JTree");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InstantiationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (UnsupportedLookAndFeelException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Container content = getContentPane();
        JTree tree = new JTree(new OutlineNode(1, n));
        content.add(new JScrollPane(tree), BorderLayout.CENTER);
        setSize(300, 475);
        setVisible(true);
    }
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!