import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.SwingUtilities;
import javax.swing.tree.DefaultMutableTreeNode;

public class JTreeBug
{
    // related to fix for https://bugs.openjdk.org/browse/JDK-8317771
    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(() -> {
            String javaInfo = System.getProperty("os.name") + " " + System.getProperty("os.version") + " (" + System.getProperty("os.arch") + "), " +
                    System.getProperty("java.vm.name") + ", " + System.getProperty("java.vm.version") + ", " + System.getProperty("java.vm.vendor");
            System.out.println(javaInfo);
            
            DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("Root");
            for(int i = 0; i < 10000; i++)
            {
                rootNode.add(new DefaultMutableTreeNode("Child " + i));
            }
            
            JTree tree = new MyJTree(rootNode);
            tree.setShowsRootHandles(true);
            // t.setLargeModel(true); // This makes no difference
            
            JFrame frame = new JFrame();
            frame.add(new JLabel("<html>- Toggle the handle icon next to 'Root' or double-click it a few times." +
                    "<br>- you will get a java.lang.NoSuchMethodException</html>"), BorderLayout.NORTH);
            frame.add(new JScrollPane(tree), BorderLayout.CENTER);
            frame.add(new JLabel(javaInfo), BorderLayout.SOUTH);
            frame.setSize(700, 700);
            frame.setVisible(true);
        });
    }

}
