tdulik

TreePainter demo

May 14th, 2018
158
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package treePainter;
  2.  
  3. import java.awt.EventQueue;
  4. import java.awt.Graphics;
  5.  
  6. import javax.swing.JFrame;
  7. import javax.swing.JPanel;
  8. import java.awt.BorderLayout;
  9. import java.awt.Toolkit;
  10. import javax.swing.JLabel;
  11. import javax.swing.JTextField;
  12. import javax.swing.plaf.basic.BasicInternalFrameTitlePane.MaximizeAction;
  13. import javax.swing.JButton;
  14. import java.awt.event.ActionListener;
  15. import java.awt.event.ActionEvent;
  16.  
  17. class TreeNode {
  18.     int data;
  19.     TreeNode left, right;
  20.     static int maxDepth;
  21.     public TreeNode(int d) {
  22.         data = d;
  23.         left = right = null;
  24.     }
  25.     public TreeNode(int d, TreeNode l, TreeNode r) {
  26.         data = d;
  27.         left = l;
  28.         right = r;
  29.     }
  30.     public static void printTree(TreeNode node) {
  31.         if (node != null) {
  32.             printTree(node.left);
  33.             System.out.println(node.data);
  34.             printTree(node.right);
  35.         }
  36.     }
  37.     public static TreeNode insertTree(TreeNode node, int d) {
  38.         TreeNode last=null;
  39.         int depth=0;
  40.         while (node!=null) {
  41.             last = node;
  42.             if (d>node.data) node=node.right;
  43.             else if (d<node.data) node=node.left;
  44.             else return null;
  45.             if (++depth>maxDepth) maxDepth=depth;
  46.         }
  47.         TreeNode newnode = new TreeNode(d);
  48.         if (last!=null) {
  49.             if (d>last.data) last.right=newnode;
  50.             else last.left = newnode;
  51.         }
  52.         return newnode;
  53.     }  
  54. }
  55.  
  56.  
  57. public class Main {
  58.  
  59.     private JFrame frmTreePainter;
  60.     private JTextField textField;
  61.     public int levels;
  62.  
  63.     class painter extends JPanel {
  64.  
  65.         void drawTree(TreeNode node, Graphics g, int x, int y, int level) {
  66.             if (level > 0 && node!=null) {
  67.                 int d=10 * (1 << level);
  68.                 drawTree(node.left, g, x - d, y + 20, level - 1);
  69.                 g.drawOval(x, y, 15, 15);
  70.                 g.drawString(""+node.data, x, y+10);
  71.                 drawTree(node.right, g, x + d, y + 20, level - 1);
  72.             }
  73.         }
  74.  
  75.         @Override
  76.         public void paint(Graphics g) {
  77.             // TODO Auto-generated method stub
  78.             super.paint(g);
  79.             g.drawLine(0, 0, 100, 100);
  80.             drawTree(tree, g, getWidth()/2, 0, tree.maxDepth+1);
  81.  
  82.         }
  83.  
  84.     }
  85.  
  86.     /**
  87.      * Launch the application.
  88.      */
  89.     public static void main(String[] args) {
  90.         EventQueue.invokeLater(new Runnable() {
  91.             public void run() {
  92.                 try {
  93.                     Main window = new Main();
  94.                     window.frmTreePainter.setVisible(true);
  95.                 } catch (Exception e) {
  96.                     e.printStackTrace();
  97.                 }
  98.             }
  99.         });
  100.     }
  101.  
  102.     /**
  103.      * Create the application.
  104.      */
  105.     public Main() {
  106.         initialize();
  107.     }
  108.  
  109.     /**
  110.      * Initialize the contents of the frame.
  111.      */
  112.     TreeNode tree;
  113.     private void initialize() {
  114.         frmTreePainter = new JFrame();
  115.         frmTreePainter.setIconImage(Toolkit.getDefaultToolkit()
  116.                 .getImage(Main.class.getResource("/javax/swing/plaf/basic/icons/image-delayed.png")));
  117.         frmTreePainter.setTitle("Tree painter");
  118.         frmTreePainter.setBounds(100, 100, 450, 300);
  119.         frmTreePainter.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  120.  
  121.         JPanel panel = new JPanel();
  122.         frmTreePainter.getContentPane().add(panel, BorderLayout.NORTH);
  123.  
  124.         JLabel lblNewLabel = new JLabel("Depth:");
  125.         panel.add(lblNewLabel);
  126.  
  127.         textField = new JTextField();
  128.         textField.setText("5");
  129.         panel.add(textField);
  130.         textField.setColumns(10);
  131.  
  132.         JButton btnPaintIt = new JButton("Paint it!");
  133.         btnPaintIt.addActionListener(new ActionListener() {
  134.             public void actionPerformed(ActionEvent arg0) {
  135.                 System.out.println("You clicked on me!!");
  136.                 String number = textField.getText();
  137.                 levels = Integer.parseInt(number);
  138.                 TreeNode t=TreeNode.insertTree(tree, levels);
  139.                 if (tree==null) tree=t;
  140.                 frmTreePainter.repaint();
  141.                 System.out.println("Number is=" + number);
  142.             }
  143.         });
  144.         panel.add(btnPaintIt);
  145.  
  146.         painter panel_1 = new painter();
  147.         frmTreePainter.getContentPane().add(panel_1, BorderLayout.CENTER);
  148.     }
  149.  
  150. }
RAW Paste Data