/Users/johnr/Dropbox/johnrayworth.info/largeFilesOutsideJSR/__IB-Other/Other/IA-Solutions-2019/Haruto/Product/IA.ver2/src/ia/ver2/IAGUI.java
   1 /*
   2  * To change this license header, choose License Headers in Project Properties.
   3  * To change this template file, choose Tools | Templates
   4  * and open the template in the editor.
   5  */
   6 package ia.ver2;
   7 import javax.swing.JComboBox; 
   8 import javax.swing.JFrame; 
   9 import java.util.ArrayList; 
  10 import javax.swing.JButton; 
  11 import javax.swing.JOptionPane; 
  12 import javax.swing.JTextField; 
  13 import javax.swing.JPanel; 
  14 import java.awt.GridLayout; 
  15 import java.util.Arrays;
  16 import javax.swing.JLabel; 
  17 import java.util.List; 
  18 import javax.swing.SortOrder;
  19 import javax.swing.table.TableModel; 
  20 import javax.swing.table.TableRowSorter; 
  21 import javax.swing.RowSorter; 
  22  
  23 /**
  24  *
  25  * @author 19196
  26  * ToDo:
  27  * - Add error handling (instructions are commented) 
  28  * - Add comments on the code 
  29  * - Statistics problem solving 
  30  * - Sorting problems 
  31  */
  32 public class IAGUI extends javax.swing.JFrame {
  33 
  34     
  35     /**
  36      * Creates new form IAGUI
  37      */
  38     public IAGUI() {
  39         initComponents();
  40         Count(); 
  41         myInit1(); 
  42     }
  43     
  44     public Stats[] stat = new Stats[50]; 
  45     public Rank[] subStat = new Rank[30]; 
  46     public Task[] taskArray = new Task[100]; 
  47     public PersonInfo[] personArray = new PersonInfo[30]; 
  48     public static final String LINE_SEPARATOR = System.getProperty("line.separator"); 
  49     
  50     int counter = 0; 
  51     boolean count = false; 
  52     int countPpl = 0; 
  53     
  54     public void Count(){
  55         if(counter > 1)
  56             count = true; 
  57         else
  58             count = false; 
  59     }
  60     
  61     public void myInit1()
  62     {
  63         for(int i = 0; i < taskArray.length; i++){
  64             taskArray[i] = new Task(); 
  65         }
  66         for(int j = 0; j < subStat.length; j++){
  67            subStat[j] = new Rank(); 
  68         }
  69         for(int k1 = 0; k1 < stat.length; k1++){
  70             stat[k1] = new Stats(); 
  71         }
  72         for(int l = 0; l < personArray.length; l++){
  73             personArray[l] = new PersonInfo(); 
  74         }
  75     }    





                                  
 715 
 716     private void addPplBActionPerformed(java.awt.event.ActionEvent evt) {                                        
 717         //popup text fields for person information
 718         JTextField nameTF = new JTextField(""); 
 719         JTextField nickNameTF = new JTextField(""); 
 720         JTextField ageTF = new JTextField(""); 
 721         JPanel panel = new JPanel(new GridLayout (0, 1)); 
 722         panel.add(new JLabel("Name:")); 
 723         panel.add(nameTF); 
 724         panel.add(new JLabel("Nickname:")); 
 725         panel.add(nickNameTF); 
 726         panel.add(new JLabel("Age:")); 
 727         panel.add(ageTF); 
 728         int result = JOptionPane.showConfirmDialog(null, panel, "People", 
 729                 JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);    
 730         
 731         if(result == JOptionPane.OK_OPTION){
 732             if(nameTF.getText().length() < 1){
 733                 nameTF.setText(" ");        //Disable to input
 734             }
 735             else if(nickNameTF.getText().length() > 15){
 736                 nickNameTF.setText(" ");        //Disable to input 
 737             }
 738             else if(Integer.parseInt(ageTF.getText()) > 120 || ageTF.getText().equals(" ")){
 739                 ageTF.setText(" ");
 740             }
 741             else if(nameTF.getText().length() > 2 && nickNameTF.getText().length() <= 15){      //correct condition
 742                 nameCB.addItem(nameTF.getText());       
 743                 cnameCB.addItem(nameTF.getText());
 744                 personArray[countPpl] = new PersonInfo(nameTF.getText(), nickNameTF.getText(), ageTF.getText());    //add to personArray specifically for statistics 
 745                 countPpl++; 
 746             }
 747             
 748         }
 749         else{
 750             //Does not relate directly for GUI but show cancelled or not in system
 751             System.out.println("Cancelled");
 752         }
 753         
 754     }                                       
 755 
 756     private void addTasksBActionPerformed(java.awt.event.ActionEvent evt) {                                          
 757         //popup text fields for task information
 758         JTextField taskTF = new JTextField(""); 
 759         JTextField typeTF = new JTextField(""); 
 760         JPanel panel = new JPanel(new GridLayout(0, 2));    //smaller layout than person info
 761         panel.add(new JLabel("Task:")); 
 762         panel.add(taskTF); 
 763         panel.add(new JLabel("Task type:")); 
 764         panel.add(typeTF); 
 765         int result = JOptionPane.showConfirmDialog(null, panel, "Tasks", 
 766                 JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); 
 767         if(result == JOptionPane.OK_OPTION){
 768             if(taskTF.getText().length() < 1 || taskTF.getText().length() > 25){
 769                 taskTF.setText(" ");        //Disable to add iformation
 770             }
 771             else{
 772                 taskCB.addItem(taskTF.getText());       //normally added to combo box 
 773                 ctaskCB.addItem(taskTF.getText());      
 774             }
 775         }
 776         else{
 777             System.out.println("Cancelled"); 
 778         }
 779     }                                         
 780 
 781     private void taskCBActionPerformed(java.awt.event.ActionEvent evt) {                                       
 782         // TODO add your handling code here:
 783         
 784     }                                      
 785 
 786     private void nameCBActionPerformed(java.awt.event.ActionEvent evt) {                                       
 787         // TODO add your handling code here:
 788         
 789     }                                      
 790 
 791     private void enterBMouseReleased(java.awt.event.MouseEvent evt) {                                     
 792         // TODO add your handling code here:
 793         Object date = dayCB.getSelectedItem() + "/" + monthCB.getSelectedItem() + 
 794                 "/" + yearCB.getSelectedItem();     //Combine all the components in date
 795         int row = counter; 
 796             //set all values in the table
 797             taskT.setValueAt(nameCB.getSelectedItem(), row, 0);     
 798             taskT.setValueAt(date, row, 1); 
 799             taskT.setValueAt(taskCB.getSelectedItem(), row, 2);
 800             //implement all the information into taskArray automatically
 801             taskArray[counter] = new Task(nameCB.getSelectedItem() + "", date + "",     //array is for search and sort 
 802                     taskCB.getSelectedItem() + ""); 
 803         
 804         counter++; 
 805         
 806     }                                    
 807 
 808     private void filterBMouseReleased(java.awt.event.MouseEvent evt) {                                      
 809         // TODO add your handling code here:
 810         
 811         //reset the table 
 812         for(int j = 0; j < counter; j++){
 813             
 814                 taskT.setValueAt(" ", j, 0);
 815                 taskT.setValueAt(" ", j, 1);
 816                 taskT.setValueAt(" ", j, 2); 
 817            
 818         }
 819         
 820         int countComp = -1; 
 821         
 822         //loop through until it reaches to length of taskArray
 823         //Then, use the linear search techniques to remain all the information related to the input
 824         //After all process done, set those information into table 
 825         for(int i = 0; i < taskArray.length; i++){
 826             //System.out.println("inside for loop");
 827             if(taskArray[i].getPersonName().equals(filterTF.getText())){
 828                 //System.out.println("inside if"); 
 829                 countComp++;  
 830                 
 831                 taskT.setValueAt(taskArray[i].getPersonName(), countComp, 0);
 832                 taskT.setValueAt(taskArray[i].getDate(), countComp, 1); 
 833                 taskT.setValueAt(taskArray[i].getTask(), countComp, 2); 
 834             }
 835             
 836             else if(taskArray[i].getTask().equals(filterTF.getText())){
 837                 countComp++; 
 838                 
 839                 taskT.setValueAt(taskArray[i].getPersonName(), countComp, 0);
 840                 taskT.setValueAt(taskArray[i].getDate(), countComp, 1); 
 841                 taskT.setValueAt(taskArray[i].getTask(), countComp, 2); 
 842             }
 843             
 844             
 845         }
 846         
 847         
 848         
 849         
 850     }                                     
 851 
 852     private void sortBMouseReleased(java.awt.event.MouseEvent evt) {                                    
 853         // TODO add your handling code here:
 854         //Use the java utility of sorting 
 855         
 856         if(sortCB.getSelectedItem() == "Name"){
 857             TableRowSorter<TableModel> sorter = new TableRowSorter<>(taskT.getModel());         //Sort only in the table
 858             taskT.setRowSorter(sorter);     //Set the sorter
 859             List<RowSorter.SortKey> sortKeys = new ArrayList<>();   
 860             
 861             int columnIndexToSort = 0; 
 862             sortKeys.add(new RowSorter.SortKey(columnIndexToSort, SortOrder.DESCENDING));       //sort in descending order because this works without flaws
 863             
 864             sorter.setSortKeys(sortKeys); 
 865             sorter.sort();      //sort done 
 866         }
 867         
 868         //now sort by task. All the algorithm are same as above (with different variables) 
 869         if(sortCB.getSelectedItem() == "Task"){     //condition of combo box
 870             TableRowSorter<TableModel> sorter = new TableRowSorter<>(taskT.getModel()); 
 871             taskT.setRowSorter(sorter);
 872             List<RowSorter.SortKey> sortKeys = new ArrayList<>(); 
 873             
 874             int columnIndexToSort = 2; 
 875             sortKeys.add(new RowSorter.SortKey(columnIndexToSort, SortOrder.DESCENDING)); 
 876             
 877             sorter.setSortKeys(sortKeys);
 878             sorter.sort();
 879         }
 880 
 881     }                                   
 882 
 883     private void restoreBMouseReleased(java.awt.event.MouseEvent evt) {                                       
 884         // TODO add your handling code here:
 885         //Restore the original list (data) of ToDos and show up on the table 
 886         for(int i = 0; i < counter; i++){
 887             taskT.setValueAt(taskArray[i].getPersonName(), i, 0);
 888             taskT.setValueAt(taskArray[i].getDate(), i, 1);
 889             taskT.setValueAt(taskArray[i].getTask(), i, 2);
 890         }
 891     }                                      
 892 
 893     private void calcTBMouseReleased(java.awt.event.MouseEvent evt) {                                     
 894         // TODO add your handling code here:
 895         //Here, first should look through all the task done 
 896         //Then, count the number done per person, so it can identify who did what and who did not do that 
 897         //Then, rank it on the table 
 898         
 899         //Reset table 
 900         for(int i = 0; i < stat.length; i++){
 901             rankT.setValueAt(" ", i, 0);
 902             rankT.setValueAt(" ", i, 1);
 903         }
 904         
 905         int counting = 0; 
 906         
 907         //Only get the name of person from taskArray
 908         for(int i = 0; i < taskArray.length; i++){
 909             if(ctaskCB.getSelectedItem().equals(taskArray[i].getTask())){ 
 910                 stat[counting].setName(taskArray[i].getPersonName());   //store names in the stat array
 911                 counting++; 
 912             }
 913         }
 914         
 915         //Sort stat array
 916         StatSort sort = new StatSort(); 
 917         sort.sortForStat(stat);
 918                 
 919         int countPerson = 1; 
 920         int componentNum = 1; 
 921         int countRank = 0; 
 922         
 923         //Count the frequency of name in stat array 
 924         while(componentNum < cnameCB.getItemCount()){
 925             for(int j = 1; j < stat.length; j++){
 926                 if(cnameCB.getItemAt(componentNum).equals(stat[j].getName())){
 927                     countPerson++; 
 928                 }
 929             }
 930             subStat[countRank] = new Rank(cnameCB.getItemAt(componentNum), countPerson);    //store both name and frequency of it in stat array 
 931             componentNum++; 
 932             countPerson = 0; 
 933             countRank++; 
 934         }
 935                 
 936         //sort subStat array by frequency in ascending order
 937         StatSort secondSort = new StatSort(); 
 938         secondSort.sortRank(subStat, cnameCB.getItemCount());        
 939         
 940         int tableLength = 1; 
 941         //Show the result of sort of subStat array in the table with ranking style
 942         for(int k = 0; k < cnameCB.getItemCount() - 1; k++){
 943             rankT.setValueAt(tableLength, k, 0);
 944             rankT.setValueAt(subStat[k].getRankObj(), k, 1);
 945             tableLength++; 
 946         }
 947 
 948         //Recommendation letter
 949         recomTF.setText(ctaskCB.getSelectedItem() + " should be done by " + subStat[0].getRankObj());
 950         
 951     }                                    
 952 
 953     private void calcNBMouseReleased(java.awt.event.MouseEvent evt) {                                     
 954         // TODO add your handling code here:
 955         // Same algorithm as calcTBMouseReleased method, with different variables 
 956         
 957         //Reset table 
 958         for(int i = 0; i < stat.length; i++){
 959             rankT.setValueAt(" ", i, 0);
 960             rankT.setValueAt(" ", i, 1);
 961         }
 962         
 963         int count1 = 0; 
 964         
 965         //Get the tasks which that given name person did in taskArray
 966         for(int i = 0; i < taskArray.length; i++){
 967             if(cnameCB.getSelectedItem().equals(taskArray[i].getPersonName())){
 968                 stat[count1].setName(taskArray[i].getTask());       //store tasks in stat array 
 969                 count1++; 
 970             }
 971             
 972         }
 973         
 974         //sort stat array 
 975         StatSort sort = new StatSort(); 
 976         sort.sortForStat(stat); 
 977         
 978         int countTask = 1; 
 979         int componentNum = 0; 
 980         int rank = 0; 
 981         int countRank = 0; 
 982         
 983         //Count the frequency of tasks in stat array
 984         while(componentNum < ctaskCB.getItemCount()){
 985             for(int i = 0; i < stat.length; i++){
 986                 if(ctaskCB.getItemAt(componentNum).equals(stat[i].getName())){
 987                     countTask++; 
 988                 }
 989             }
 990             rank = countTask; 
 991             subStat[countRank] = new Rank(ctaskCB.getItemAt(componentNum), rank);   //store both task and frequency of it in stat array 
 992             componentNum++; 
 993             countTask = 0; 
 994             countRank++; 
 995         }
 996         
 997         //sort subStat array by frequency in ascending order 
 998         StatSort secondSort = new StatSort(); 
 999         secondSort.sortRank(subStat, ctaskCB.getItemCount());
1000         
1001         int tableLength = 1; 
1002         //Show the result of sort of subStat array in the table with ranking style 
1003         for(int k = 0; k < ctaskCB.getItemCount(); k++){
1004             rankT.setValueAt(tableLength, k, 0); 
1005             rankT.setValueAt(subStat[k].getRankObj(), k, 1);
1006             tableLength++; 
1007         }
1008         
1009         //Recommendation letter
1010         recomTF.setText(cnameCB.getSelectedItem().toString() + " should do " + subStat[0].getRankObj() + " for next task.");
1011     }                                    
1012 
1013     private void helpMouseReleased(java.awt.event.MouseEvent evt) {                                   
1014         // TODO add your handling code here:
1015         //Instruction (help) of the system
1016         JFrame help = new JFrame(); 
1017         help.setLayout(null);
1018         
1019         help.setBounds(130, 05, 400, 350);
1020         
1021         JOptionPane.showMessageDialog(help, "Welcome to Familinage, the integrated manager of family." + LINE_SEPARATOR 
1022         + "This system basically shows 'what your family members going to do', and 'who should do what' semi-automatically." + LINE_SEPARATOR
1023         + "Here's simple instruction how to use both functions fully." + LINE_SEPARATOR + " " + LINE_SEPARATOR 
1024         + "1. ToDo list fundamentals" + LINE_SEPARATOR + "   a. click on the 'Add people' button under the separator line." + LINE_SEPARATOR
1025         + "    b. Type in 'Name', 'Nickname', and 'age' of the family members with correct location." + LINE_SEPARATOR 
1026         + "    c. After you clicked 'ok' button, click on the 'Add Tasks' button and type in all the information as did in procedure b." + LINE_SEPARATOR
1027         + "    d. Now, all the information typed in are stored and shown in 'Name' and 'Task' combo box. Choose your name, date and task you need to do and click the 'Enter' button."
1028         + LINE_SEPARATOR + "    e. You can now see your name, task, and date when you need to do that task!!" + LINE_SEPARATOR + " " + LINE_SEPARATOR
1029         + "2. Filter and Sorting" + LINE_SEPARATOR + "    a. Choose 'Name' or 'Task' in combo box at the sort section under the 'Enter' button. Then click the Sort button, so ToDo list show up the sorted result of list."
1030         + LINE_SEPARATOR + "    b. For filter, you can type in your finding objects either 'Name' or 'Task' so it shows the list of objects related to your typed object."
1031         + LINE_SEPARATOR + "    c. Did you hit either button accidentally? No problem! You can get the original ToDo list by hitting 'Restore' button under the ToDo table." + LINE_SEPARATOR + " " 
1032         + LINE_SEPARATOR + "3. Statistics" + LINE_SEPARATOR + "    a. Choose either 'Task' or 'Name' that you want. (Components in combo box are automatically stored at the time you hitted the 'ok' button in the popup)"
1033         + LINE_SEPARATOR + "    a - tips. You can choose either 'Task' or 'Name' based on context. If you want to have recommendation of 'Task', you should choose your 'Name' as input. So, basically choose opposite object for input."
1034         + LINE_SEPARATOR + "    b. After you clicked either 'Calculate tasks' or 'Calcualte Name', table shows the ranking of the object you seeked, and 'Recommendation' shows specific recommendation sentence."
1035         + LINE_SEPARATOR + " " + LINE_SEPARATOR  +"Hope these instructions helped you. Have a good, healthy life balance by using Familinage! by creator."); 
1036     }                                  
1037 
1038     private void getInfoBMouseReleased(java.awt.event.MouseEvent evt) {                                       
1039         // TODO add your handling code here:
1040         //Show all the information related to family member in the infoT
1041         for(int i = 0; i < countPpl; i++){
1042             infoT.setValueAt(personArray[i].getPerson(), i, 0);
1043             infoT.setValueAt(personArray[i].getNickName(), i, 1);
1044             infoT.setValueAt(personArray[i].getAge(), i, 2);
1045         }
1046     }                                      
1047 
1048     /**
1049      * @param args the command line arguments
1050      */
1051     public static void main(String args[]) {
1052         /* Set the Nimbus look and feel */
1053         //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
1054         /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
1055          * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
1056          */
1057         try {
1058             for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
1059                 if ("Nimbus".equals(info.getName())) {
1060                     javax.swing.UIManager.setLookAndFeel(info.getClassName());
1061                     break;
1062                 }
1063             }
1064         } catch (ClassNotFoundException ex) {
1065             java.util.logging.Logger.getLogger(IAGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
1066         } catch (InstantiationException ex) {
1067             java.util.logging.Logger.getLogger(IAGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
1068         } catch (IllegalAccessException ex) {
1069             java.util.logging.Logger.getLogger(IAGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
1070         } catch (javax.swing.UnsupportedLookAndFeelException ex) {
1071             java.util.logging.Logger.getLogger(IAGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
1072         }
1073         //</editor-fold>
1074 
1075         
1076         /* Create and display the form */
1077         java.awt.EventQueue.invokeLater(new Runnable() {
1078             public void run() {
1079                 new IAGUI().setVisible(true);
1080             }
1081         });
1082         
1083         
1084     }





/*
  39 ####################################################################
  40 ####################################################################
  41 ####################################################################
  42 ####################################################################
  43 ####################################################################
  44 
  45 *************** NOTE THAT ALL THE CODE WHICH IS ********************
  46 *************** HIGHLIGHTED GREY BLOCK IS AUTO- ********************
  47 *************** GENERATED FROM NETBEANS, NOT BY ********************
  48 *************** ME. (It's mainly the GUI stuff.)********************
  49 
  50 ####################################################################
  51 ####################################################################
  52 ####################################################################
  53 ####################################################################
  54 ####################################################################
  55 */
  76     /**
  77      * This method is called from within the constructor to initialize the form.
  78      * WARNING: Do NOT modify this code. The content of this method is always
  79      * regenerated by the Form Editor.
  80      */
  81     @SuppressWarnings("unchecked")
  82     // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
  83     private void initComponents() {
  84 
  85         jTabbedPane1 = new javax.swing.JTabbedPane();
  86         central_UI = new javax.swing.JPanel();
  87         jScrollPane1 = new javax.swing.JScrollPane();
  88         taskT = new javax.swing.JTable();
  89         nameL = new javax.swing.JLabel();
  90         taskL = new javax.swing.JLabel();
  91         enterB = new javax.swing.JButton();
  92         dateL = new javax.swing.JLabel();
  93         centralSep = new javax.swing.JSeparator();
  94         sortL = new javax.swing.JLabel();
  95         sortCB = new javax.swing.JComboBox<>();
  96         FilterL = new javax.swing.JLabel();
  97         filterTF = new javax.swing.JTextField();
  98         peopleL = new javax.swing.JLabel();
  99         addPplB = new javax.swing.JButton();
 100         tasksL = new javax.swing.JLabel();
 101         addTasksB = new javax.swing.JButton();
 102         nameCB = new javax.swing.JComboBox<>();
 103         taskCB = new javax.swing.JComboBox<>();
 104         dayCB = new javax.swing.JComboBox<>();
 105         monthCB = new javax.swing.JComboBox<>();
 106         yearCB = new javax.swing.JComboBox<>();
 107         sortB = new javax.swing.JButton();
 108         filterB = new javax.swing.JButton();
 109         restoreB = new javax.swing.JButton();
 110         stats = new javax.swing.JPanel();
 111         ctaskL = new javax.swing.JLabel();
 112         ctaskCB = new javax.swing.JComboBox<>();
 113         jScrollPane2 = new javax.swing.JScrollPane();
 114         rankT = new javax.swing.JTable();
 115         calcTB = new javax.swing.JButton();
 116         cnameL = new javax.swing.JLabel();
 117         cnameCB = new javax.swing.JComboBox<>();
 118         calcNB = new javax.swing.JButton();
 119         rankL = new javax.swing.JLabel();
 120         recomTF = new javax.swing.JTextField();
 121         recomL = new javax.swing.JLabel();
 122         getInfoB = new javax.swing.JButton();
 123         jScrollPane3 = new javax.swing.JScrollPane();
 124         infoT = new javax.swing.JTable();
 125         getInfoL = new javax.swing.JLabel();
 126         familyInfoL = new javax.swing.JLabel();
 127         jMenuBar1 = new javax.swing.JMenuBar();
 128         jMenu1 = new javax.swing.JMenu();
 129         jMenu2 = new javax.swing.JMenu();
 130         help = new javax.swing.JMenu();
 131 
 132         setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
 133 
 134         taskT.setModel(new javax.swing.table.DefaultTableModel(
 135             new Object [][] {
 136                 {null, null, null},
 137                 {null, null, null},
 138                 {null, null, null},
 139                 {null, null, null},
 140                 {null, null, null},
 141                 {null, null, null},
 142                 {null, null, null},
 143                 {null, null, null},
 144                 {null, null, null},
 145                 {null, null, null},
 146                 {null, null, null},
 147                 {null, null, null},
 148                 {null, null, null},
 149                 {null, null, null},
 150                 {null, null, null},
 151                 {null, null, null},
 152                 {null, null, null},
 153                 {null, null, null},
 154                 {null, null, null},
 155                 {null, null, null},
 156                 {null, null, null},
 157                 {null, null, null},
 158                 {null, null, null},
 159                 {null, null, null},
 160                 {null, null, null},
 161                 {null, null, null},
 162                 {null, null, null},
 163                 {null, null, null},
 164                 {null, null, null},
 165                 {null, null, null},
 166                 {null, null, null},
 167                 {null, null, null},
 168                 {null, null, null},
 169                 {null, null, null},
 170                 {null, null, null},
 171                 {null, null, null},
 172                 {null, null, null},
 173                 {null, null, null},
 174                 {null, null, null},
 175                 {null, null, null},
 176                 {null, null, null},
 177                 {null, null, null},
 178                 {null, null, null},
 179                 {null, null, null},
 180                 {null, null, null},
 181                 {null, null, null},
 182                 {null, null, null},
 183                 {null, null, null},
 184                 {null, null, null},
 185                 {null, null, null},
 186                 {null, null, null},
 187                 {null, null, null},
 188                 {null, null, null},
 189                 {null, null, null},
 190                 {null, null, null},
 191                 {null, null, null},
 192                 {null, null, null},
 193                 {null, null, null},
 194                 {null, null, null},
 195                 {null, null, null},
 196                 {null, null, null},
 197                 {null, null, null},
 198                 {null, null, null},
 199                 {null, null, null},
 200                 {null, null, null},
 201                 {null, null, null},
 202                 {null, null, null},
 203                 {null, null, null},
 204                 {null, null, null},
 205                 {null, null, null},
 206                 {null, null, null},
 207                 {null, null, null},
 208                 {null, null, null},
 209                 {null, null, null},
 210                 {null, null, null},
 211                 {null, null, null},
 212                 {null, null, null},
 213                 {null, null, null},
 214                 {null, null, null},
 215                 {null, null, null},
 216                 {null, null, null},
 217                 {null, null, null},
 218                 {null, null, null},
 219                 {null, null, null},
 220                 {null, null, null},
 221                 {null, null, null},
 222                 {null, null, null},
 223                 {null, null, null},
 224                 {null, null, null},
 225                 {null, null, null},
 226                 {null, null, null},
 227                 {null, null, null},
 228                 {null, null, null},
 229                 {null, null, null},
 230                 {null, null, null},
 231                 {null, null, null},
 232                 {null, null, null},
 233                 {null, null, null},
 234                 {null, null, null},
 235                 {null, null, null}
 236             },
 237             new String [] {
 238                 "Name", "Date", "Tasks"
 239             }
 240         ));
 241         jScrollPane1.setViewportView(taskT);
 242 
 243         nameL.setText("Name:");
 244 
 245         taskL.setText("Task:");
 246 
 247         enterB.setText("Enter");
 248         enterB.addMouseListener(new java.awt.event.MouseAdapter() {
 249             public void mouseReleased(java.awt.event.MouseEvent evt) {
 250                 enterBMouseReleased(evt);
 251             }
 252         });
 253         enterB.addActionListener(new java.awt.event.ActionListener() {
 254             public void actionPerformed(java.awt.event.ActionEvent evt) {
 255                 enterBActionPerformed(evt);
 256             }
 257         });
 258 
 259         dateL.setText("Date:");
 260 
 261         centralSep.setForeground(new java.awt.Color(0, 0, 0));
 262 
 263         sortL.setText("Sort by:");
 264 
 265         sortCB.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Name", "Task" }));
 266 
 267         FilterL.setText("Filter :");
 268 
 269         peopleL.setText("Add people:");
 270 
 271         addPplB.setText("Add people");
 272         addPplB.addActionListener(new java.awt.event.ActionListener() {
 273             public void actionPerformed(java.awt.event.ActionEvent evt) {
 274                 addPplBActionPerformed(evt);
 275             }
 276         });
 277 
 278         tasksL.setText("Add Tasks: ");
 279 
 280         addTasksB.setText("Add Tasks ");
 281         addTasksB.addActionListener(new java.awt.event.ActionListener() {
 282             public void actionPerformed(java.awt.event.ActionEvent evt) {
 283                 addTasksBActionPerformed(evt);
 284             }
 285         });
 286 
 287         nameCB.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { " " }));
 288         nameCB.setSelectedIndex(-1);
 289         nameCB.addActionListener(new java.awt.event.ActionListener() {
 290             public void actionPerformed(java.awt.event.ActionEvent evt) {
 291                 nameCBActionPerformed(evt);
 292             }
 293         });
 294 
 295         taskCB.addActionListener(new java.awt.event.ActionListener() {
 296             public void actionPerformed(java.awt.event.ActionEvent evt) {
 297                 taskCBActionPerformed(evt);
 298             }
 299         });
 300 
 301         dayCB.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "DD", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31" }));
 302 
 303         monthCB.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "MM", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12" }));
 304 
 305         yearCB.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "YYYY", "2010", "2011", "2012", "2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026", "2027", "2028", "2029", "2030" }));
 306 
 307         sortB.setText("Sort");
 308         sortB.addMouseListener(new java.awt.event.MouseAdapter() {
 309             public void mouseReleased(java.awt.event.MouseEvent evt) {
 310                 sortBMouseReleased(evt);
 311             }
 312         });
 313 
 314         filterB.setText("Filter");
 315         filterB.addMouseListener(new java.awt.event.MouseAdapter() {
 316             public void mouseReleased(java.awt.event.MouseEvent evt) {
 317                 filterBMouseReleased(evt);
 318             }
 319         });
 320 
 321         restoreB.setText("Restore");
 322         restoreB.addMouseListener(new java.awt.event.MouseAdapter() {
 323             public void mouseReleased(java.awt.event.MouseEvent evt) {
 324                 restoreBMouseReleased(evt);
 325             }
 326         });
 327 
 328         javax.swing.GroupLayout central_UILayout = new javax.swing.GroupLayout(central_UI);
 329         central_UI.setLayout(central_UILayout);
 330         central_UILayout.setHorizontalGroup(
 331             central_UILayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 332             .addGroup(central_UILayout.createSequentialGroup()
 333                 .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 466, javax.swing.GroupLayout.PREFERRED_SIZE)
 334                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 335                 .addGroup(central_UILayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 336                     .addGroup(central_UILayout.createSequentialGroup()
 337                         .addGap(0, 0, Short.MAX_VALUE)
 338                         .addComponent(enterB))
 339                     .addComponent(centralSep)
 340                     .addGroup(central_UILayout.createSequentialGroup()
 341                         .addComponent(taskL)
 342                         .addGap(18, 18, 18)
 343                         .addComponent(taskCB, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
 344                     .addGroup(central_UILayout.createSequentialGroup()
 345                         .addComponent(sortL)
 346                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 347                         .addComponent(sortCB, javax.swing.GroupLayout.PREFERRED_SIZE, 124, javax.swing.GroupLayout.PREFERRED_SIZE)
 348                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
 349                         .addComponent(sortB))
 350                     .addGroup(central_UILayout.createSequentialGroup()
 351                         .addGroup(central_UILayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 352                             .addGroup(central_UILayout.createSequentialGroup()
 353                                 .addComponent(peopleL)
 354                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 355                                 .addComponent(addPplB))
 356                             .addGroup(central_UILayout.createSequentialGroup()
 357                                 .addComponent(tasksL)
 358                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 359                                 .addComponent(addTasksB))
 360                             .addGroup(central_UILayout.createSequentialGroup()
 361                                 .addComponent(nameL)
 362                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
 363                                 .addComponent(nameCB, javax.swing.GroupLayout.PREFERRED_SIZE, 225, javax.swing.GroupLayout.PREFERRED_SIZE))
 364                             .addGroup(central_UILayout.createSequentialGroup()
 365                                 .addComponent(dateL)
 366                                 .addGap(18, 18, 18)
 367                                 .addComponent(dayCB, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)
 368                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 369                                 .addComponent(monthCB, javax.swing.GroupLayout.PREFERRED_SIZE, 73, javax.swing.GroupLayout.PREFERRED_SIZE)
 370                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 371                                 .addComponent(yearCB, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
 372                         .addGap(0, 0, Short.MAX_VALUE))
 373                     .addGroup(central_UILayout.createSequentialGroup()
 374                         .addComponent(FilterL)
 375                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 376                         .addComponent(filterTF, javax.swing.GroupLayout.PREFERRED_SIZE, 201, javax.swing.GroupLayout.PREFERRED_SIZE)
 377                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 25, Short.MAX_VALUE)
 378                         .addComponent(filterB)))
 379                 .addContainerGap())
 380             .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, central_UILayout.createSequentialGroup()
 381                 .addGap(0, 0, Short.MAX_VALUE)
 382                 .addComponent(restoreB)
 383                 .addGap(352, 352, 352))
 384         );
 385         central_UILayout.setVerticalGroup(
 386             central_UILayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 387             .addGroup(central_UILayout.createSequentialGroup()
 388                 .addGroup(central_UILayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 389                     .addGroup(central_UILayout.createSequentialGroup()
 390                         .addGap(6, 6, 6)
 391                         .addGroup(central_UILayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
 392                             .addComponent(nameL)
 393                             .addComponent(nameCB, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
 394                         .addGap(31, 31, 31)
 395                         .addGroup(central_UILayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
 396                             .addComponent(dateL)
 397                             .addComponent(dayCB, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
 398                             .addComponent(monthCB, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
 399                             .addComponent(yearCB, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
 400                         .addGap(36, 36, 36)
 401                         .addGroup(central_UILayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
 402                             .addComponent(taskL)
 403                             .addComponent(taskCB, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
 404                         .addGap(21, 21, 21)
 405                         .addComponent(enterB)
 406                         .addGap(15, 15, 15)
 407                         .addGroup(central_UILayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
 408                             .addComponent(sortL)
 409                             .addComponent(sortCB, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
 410                             .addComponent(sortB))
 411                         .addGap(26, 26, 26)
 412                         .addGroup(central_UILayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
 413                             .addComponent(FilterL)
 414                             .addComponent(filterTF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
 415                             .addComponent(filterB))
 416                         .addGap(18, 18, 18)
 417                         .addComponent(centralSep, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
 418                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
 419                         .addGroup(central_UILayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
 420                             .addComponent(peopleL)
 421                             .addComponent(addPplB))
 422                         .addGap(18, 18, 18)
 423                         .addGroup(central_UILayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
 424                             .addComponent(tasksL)
 425                             .addComponent(addTasksB)))
 426                     .addGroup(central_UILayout.createSequentialGroup()
 427                         .addContainerGap()
 428                         .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 438, javax.swing.GroupLayout.PREFERRED_SIZE)))
 429                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
 430                 .addComponent(restoreB)
 431                 .addContainerGap())
 432         );
 433 
 434         jTabbedPane1.addTab("Central UI", central_UI);
 435 
 436         ctaskL.setText("Choose tasks:");
 437 
 438         rankT.setModel(new javax.swing.table.DefaultTableModel(
 439             new Object [][] {
 440                 {null, null},
 441                 {null, null},
 442                 {null, null},
 443                 {null, null},
 444                 {null, null},
 445                 {null, null},
 446                 {null, null},
 447                 {null, null},
 448                 {null, null},
 449                 {null, null},
 450                 {null, null},
 451                 {null, null},
 452                 {null, null},
 453                 {null, null},
 454                 {null, null},
 455                 {null, null},
 456                 {null, null},
 457                 {null, null},
 458                 {null, null},
 459                 {null, null},
 460                 {null, null},
 461                 {null, null},
 462                 {null, null},
 463                 {null, null},
 464                 {null, null},
 465                 {null, null},
 466                 {null, null},
 467                 {null, null},
 468                 {null, null},
 469                 {null, null},
 470                 {null, null},
 471                 {null, null},
 472                 {null, null},
 473                 {null, null},
 474                 {null, null},
 475                 {null, null},
 476                 {null, null},
 477                 {null, null},
 478                 {null, null},
 479                 {null, null},
 480                 {null, null},
 481                 {null, null},
 482                 {null, null},
 483                 {null, null},
 484                 {null, null},
 485                 {null, null},
 486                 {null, null},
 487                 {null, null},
 488                 {null, null},
 489                 {null, null}
 490             },
 491             new String [] {
 492                 "Rank", "Object"
 493             }
 494         ));
 495         jScrollPane2.setViewportView(rankT);
 496 
 497         calcTB.setText("Calculate tasks");
 498         calcTB.addMouseListener(new java.awt.event.MouseAdapter() {
 499             public void mouseReleased(java.awt.event.MouseEvent evt) {
 500                 calcTBMouseReleased(evt);
 501             }
 502         });
 503         calcTB.addActionListener(new java.awt.event.ActionListener() {
 504             public void actionPerformed(java.awt.event.ActionEvent evt) {
 505                 calcTBActionPerformed(evt);
 506             }
 507         });
 508 
 509         cnameL.setText("Choose name: ");
 510 
 511         cnameCB.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { " " }));
 512 
 513         calcNB.setText("Calculate Name");
 514         calcNB.addMouseListener(new java.awt.event.MouseAdapter() {
 515             public void mouseReleased(java.awt.event.MouseEvent evt) {
 516                 calcNBMouseReleased(evt);
 517             }
 518         });
 519         calcNB.addActionListener(new java.awt.event.ActionListener() {
 520             public void actionPerformed(java.awt.event.ActionEvent evt) {
 521                 calcNBActionPerformed(evt);
 522             }
 523         });
 524 
 525         rankL.setText("Recommendation ranking:");
 526 
 527         recomTF.addActionListener(new java.awt.event.ActionListener() {
 528             public void actionPerformed(java.awt.event.ActionEvent evt) {
 529                 recomTFActionPerformed(evt);
 530             }
 531         });
 532 
 533         recomL.setText("↓Recommendation↓:");
 534 
 535         getInfoB.setText("Get");
 536         getInfoB.addMouseListener(new java.awt.event.MouseAdapter() {
 537             public void mouseReleased(java.awt.event.MouseEvent evt) {
 538                 getInfoBMouseReleased(evt);
 539             }
 540         });
 541 
 542         infoT.setModel(new javax.swing.table.DefaultTableModel(
 543             new Object [][] {
 544                 {null, null, null},
 545                 {null, null, null},
 546                 {null, null, null},
 547                 {null, null, null},
 548                 {null, null, null},
 549                 {null, null, null},
 550                 {null, null, null},
 551                 {null, null, null},
 552                 {null, null, null},
 553                 {null, null, null},
 554                 {null, null, null},
 555                 {null, null, null},
 556                 {null, null, null},
 557                 {null, null, null},
 558                 {null, null, null},
 559                 {null, null, null},
 560                 {null, null, null},
 561                 {null, null, null},
 562                 {null, null, null},
 563                 {null, null, null},
 564                 {null, null, null},
 565                 {null, null, null},
 566                 {null, null, null},
 567                 {null, null, null},
 568                 {null, null, null},
 569                 {null, null, null},
 570                 {null, null, null},
 571                 {null, null, null},
 572                 {null, null, null},
 573                 {null, null, null}
 574             },
 575             new String [] {
 576                 "Name", "Nickname", "Age"
 577             }
 578         ));
 579         jScrollPane3.setViewportView(infoT);
 580 
 581         getInfoL.setText("Get family member information:");
 582 
 583         familyInfoL.setText("Family member information:");
 584 
 585         javax.swing.GroupLayout statsLayout = new javax.swing.GroupLayout(stats);
 586         stats.setLayout(statsLayout);
 587         statsLayout.setHorizontalGroup(
 588             statsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 589             .addGroup(statsLayout.createSequentialGroup()
 590                 .addContainerGap()
 591                 .addGroup(statsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
 592                     .addComponent(recomTF)
 593                     .addGroup(statsLayout.createSequentialGroup()
 594                         .addGroup(statsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 595                             .addGroup(statsLayout.createSequentialGroup()
 596                                 .addComponent(ctaskL)
 597                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 598                                 .addGroup(statsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 599                                     .addComponent(cnameCB, javax.swing.GroupLayout.PREFERRED_SIZE, 168, javax.swing.GroupLayout.PREFERRED_SIZE)
 600                                     .addComponent(ctaskCB, javax.swing.GroupLayout.PREFERRED_SIZE, 164, javax.swing.GroupLayout.PREFERRED_SIZE))
 601                                 .addGap(0, 0, Short.MAX_VALUE))
 602                             .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, statsLayout.createSequentialGroup()
 603                                 .addGap(0, 0, Short.MAX_VALUE)
 604                                 .addGroup(statsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 605                                     .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, statsLayout.createSequentialGroup()
 606                                         .addGroup(statsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 607                                             .addComponent(calcTB, javax.swing.GroupLayout.Alignment.TRAILING)
 608                                             .addComponent(calcNB, javax.swing.GroupLayout.Alignment.TRAILING))
 609                                         .addGap(18, 18, 18))
 610                                     .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, statsLayout.createSequentialGroup()
 611                                         .addComponent(getInfoL)
 612                                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 613                                         .addComponent(getInfoB)
 614                                         .addGap(31, 31, 31))))
 615                             .addGroup(statsLayout.createSequentialGroup()
 616                                 .addGroup(statsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 617                                     .addComponent(cnameL)
 618                                     .addGroup(statsLayout.createSequentialGroup()
 619                                         .addGap(8, 8, 8)
 620                                         .addComponent(recomL)))
 621                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
 622                         .addGroup(statsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 623                             .addComponent(familyInfoL)
 624                             .addGroup(statsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
 625                                 .addComponent(rankL)
 626                                 .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 490, Short.MAX_VALUE)
 627                                 .addComponent(jScrollPane3)))))
 628                 .addGap(43, 43, 43))
 629         );
 630         statsLayout.setVerticalGroup(
 631             statsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 632             .addGroup(statsLayout.createSequentialGroup()
 633                 .addComponent(rankL)
 634                 .addGap(10, 10, 10)
 635                 .addGroup(statsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 636                     .addGroup(statsLayout.createSequentialGroup()
 637                         .addGroup(statsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
 638                             .addComponent(ctaskCB, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
 639                             .addComponent(ctaskL))
 640                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 641                         .addComponent(calcTB)
 642                         .addGap(51, 51, 51)
 643                         .addGroup(statsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
 644                             .addComponent(cnameL)
 645                             .addComponent(cnameCB, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
 646                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 647                         .addComponent(calcNB))
 648                     .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 201, javax.swing.GroupLayout.PREFERRED_SIZE))
 649                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 650                 .addComponent(familyInfoL)
 651                 .addGap(3, 3, 3)
 652                 .addGroup(statsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 653                     .addGroup(statsLayout.createSequentialGroup()
 654                         .addGap(54, 54, 54)
 655                         .addGroup(statsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
 656                             .addComponent(getInfoB)
 657                             .addComponent(getInfoL))
 658                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 64, Short.MAX_VALUE)
 659                         .addComponent(recomL))
 660                     .addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 157, javax.swing.GroupLayout.PREFERRED_SIZE))
 661                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 662                 .addComponent(recomTF, javax.swing.GroupLayout.PREFERRED_SIZE, 52, javax.swing.GroupLayout.PREFERRED_SIZE)
 663                 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
 664         );
 665 
 666         jTabbedPane1.addTab("Statistics", stats);
 667 
 668         jMenu1.setText("File");
 669         jMenuBar1.add(jMenu1);
 670 
 671         jMenu2.setText("Edit");
 672         jMenuBar1.add(jMenu2);
 673 
 674         help.setText("Help");
 675         help.addMouseListener(new java.awt.event.MouseAdapter() {
 676             public void mouseReleased(java.awt.event.MouseEvent evt) {
 677                 helpMouseReleased(evt);
 678             }
 679         });
 680         jMenuBar1.add(help);
 681 
 682         setJMenuBar(jMenuBar1);
 683 
 684         javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
 685         getContentPane().setLayout(layout);
 686         layout.setHorizontalGroup(
 687             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 688             .addComponent(jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 847, javax.swing.GroupLayout.PREFERRED_SIZE)
 689         );
 690         layout.setVerticalGroup(
 691             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 692             .addGroup(layout.createSequentialGroup()
 693                 .addComponent(jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 525, Short.MAX_VALUE)
 694                 .addContainerGap())
 695         );
 696 
 697         pack();
 698     }// </editor-fold>                        
 699 
 700     private void recomTFActionPerformed(java.awt.event.ActionEvent evt) {                                        
 701         // TODO add your handling code here:
 702     }                                       
 703 
 704     private void enterBActionPerformed(java.awt.event.ActionEvent evt) {                                       
 705         // TODO add your handling code here:
 706     }                                      
 707 
 708     private void calcTBActionPerformed(java.awt.event.ActionEvent evt) {                                       
 709         // TODO add your handling code here:
 710     }                                      
 711 
 712     private void calcNBActionPerformed(java.awt.event.ActionEvent evt) {                                       
 713         // TODO add your handling code here:
 714     }    
1085 
1086     // Variables declaration - do not modify                     
1087     private javax.swing.JLabel FilterL;
1088     private javax.swing.JButton addPplB;
1089     private javax.swing.JButton addTasksB;
1090     private javax.swing.JButton calcNB;
1091     private javax.swing.JButton calcTB;
1092     private javax.swing.JSeparator centralSep;
1093     private javax.swing.JPanel central_UI;
1094     private javax.swing.JComboBox<String> cnameCB;
1095     private javax.swing.JLabel cnameL;
1096     private javax.swing.JComboBox<String> ctaskCB;
1097     private javax.swing.JLabel ctaskL;
1098     private javax.swing.JLabel dateL;
1099     private javax.swing.JComboBox<String> dayCB;
1100     private javax.swing.JButton enterB;
1101     private javax.swing.JLabel familyInfoL;
1102     private javax.swing.JButton filterB;
1103     private javax.swing.JTextField filterTF;
1104     private javax.swing.JButton getInfoB;
1105     private javax.swing.JLabel getInfoL;
1106     private javax.swing.JMenu help;
1107     private javax.swing.JTable infoT;
1108     private javax.swing.JMenu jMenu1;
1109     private javax.swing.JMenu jMenu2;
1110     private javax.swing.JMenuBar jMenuBar1;
1111     private javax.swing.JScrollPane jScrollPane1;
1112     private javax.swing.JScrollPane jScrollPane2;
1113     private javax.swing.JScrollPane jScrollPane3;
1114     private javax.swing.JTabbedPane jTabbedPane1;
1115     private javax.swing.JComboBox<String> monthCB;
1116     private javax.swing.JComboBox<String> nameCB;
1117     private javax.swing.JLabel nameL;
1118     private javax.swing.JLabel peopleL;
1119     private javax.swing.JLabel rankL;
1120     private javax.swing.JTable rankT;
1121     private javax.swing.JLabel recomL;
1122     private javax.swing.JTextField recomTF;
1123     private javax.swing.JButton restoreB;
1124     private javax.swing.JButton sortB;
1125     private javax.swing.JComboBox<String> sortCB;
1126     private javax.swing.JLabel sortL;
1127     private javax.swing.JPanel stats;
1128     private javax.swing.JComboBox<String> taskCB;
1129     private javax.swing.JLabel taskL;
1130     private javax.swing.JTable taskT;
1131     private javax.swing.JLabel tasksL;
1132     private javax.swing.JComboBox<String> yearCB;
1133     // End of variables declaration                   
1134 }
1135