JavaFx assignment

profilesravanh
p2.zip

p2/BarChartExperiments.java

p2/BarChartExperiments.java



import  java . util . Calendar ;
import  java . util . Date ;

import  javafx . application . Application ;
import  javafx . collections . FXCollections ;
import  javafx . event . ActionEvent ;
import  javafx . event . EventHandler ;
import  javafx . geometry . Pos ;
import  javafx . scene . Group ;
import  javafx . scene . Scene ;
import  javafx . scene . chart . Axis ;
import  javafx . scene . chart . BarChart ;
import  javafx . scene . chart . CategoryAxis ;
import  javafx . scene . chart . NumberAxis ;
import  javafx . scene . chart . XYChart ;
import  javafx . scene . control . ComboBox ;
import  javafx . scene . layout . VBox ;
import  javafx . stage . Stage ;

public   class   BarChartExperiments   implements   Observer {
    
    
     String  department = "Furniture" ;
     BarChart  barChart ;   
     SalesData  data ;
     Subject  subject ;
  
     public   BarChartExperiments ( SalesData  data ,   Subject  s )   {
        s . register ( this );
         this . data = data ;
     }
     public   BarChart  createBarChart ()
     {
          CategoryAxis  xAxis     =   new   CategoryAxis ();
         xAxis . setLabel ( "Month" );

          NumberAxis  yAxis  =   new   NumberAxis ();
         yAxis . setLabel ( "Sales" );

         barChart  =   new   BarChart ( xAxis ,  yAxis );
            
         refresh ( department );
          return  barChart ;
     }
     public   void  refresh ( String  department )
     {
         String []  months  =   {   "Jan" ,   "Feb" ,   "Mar" ,   "Apr" ,   "May" ,   "Jun" ,   "Jul" ,
                 "Aug" ,   "Sep" ,   "Oct" ,   "Nov" ,   "Dec"   };
         int []  totals  =  data . getYTDTotals ( department );
         XYChart . Series  dataSeries1 ;
        dataSeries1  =   new   XYChart . Series ();
        dataSeries1 . setName ( "Year to date Sales" );
         Calendar  cal  =   Calendar . getInstance ();
        cal . setTime ( new   Date ());
         int  month  = cal . get ( Calendar . MONTH )   +   1 ;
         for ( int  i = 0 ; i < month ; i ++ )   {
            dataSeries1 . getData (). add ( new   XYChart . Data ( months [ i ],  totals [ i ]));
         }
        barChart . getData (). clear ();
        barChart . getData (). add ( dataSeries1 );
     }
}

p2/Main.java

p2/Main.java


import  java . util . ArrayList ;
import  java . util . Calendar ;
import  java . util . Date ;

import  javafx . application . Application ;
import  javafx . collections . FXCollections ;
import  javafx . event . ActionEvent ;
import  javafx . event . EventHandler ;
import  javafx . geometry . Pos ;
import  javafx . scene . Group ;
import  javafx . scene . Scene ;
import  javafx . scene . chart . BarChart ;
import  javafx . scene . chart . CategoryAxis ;
import  javafx . scene . chart . NumberAxis ;
import  javafx . scene . chart . PieChart ;
import  javafx . scene . chart . XYChart ;
import  javafx . scene . control . ComboBox ;
import  javafx . scene . control . TableView ;
import  javafx . scene . layout . BorderPane ;
import  javafx . scene . layout . HBox ;
import  javafx . scene . layout . VBox ;
import  javafx . stage . Stage ;

public   class   Main   extends   Application   implements   Subject {
    
     String  department = "Furniture" ;
     BarChart  barChart ;
     TableView  tableView ;
    
     SalesData  data = new   SalesData ( "Transactions.dat" );
    
     ArrayList < Observer >  list = new   ArrayList < Observer > ();
    @ Override
     public   void  start ( Stage  primaryStage )   throws   Exception   {
        primaryStage . setTitle ( "Current Sales" );

         BarChartExperiments  b = new   BarChartExperiments ( data ,   this );
        barChart = b . createBarChart ();         
             
         TableExperiments  t = new   TableExperiments ( data , this );
        tableView = t . createTableView ();
        
        
         String  depts []   = {   "Furniture" ,   "HardWare" ,   "Electronics" };  

         // Create a combo box 
         ComboBox  combo_box  =  
              new   ComboBox ( FXCollections . observableArrayList ( depts ));  

        combo_box . setValue ( "Furniture" );
         // Create action event 
         EventHandler < ActionEvent >  event  =   new   EventHandler < ActionEvent > ()   {  
             public   void  handle ( ActionEvent  e )  
             {  
                department = ( String ) combo_box . getValue ();  
                notifyObservers ();
             }  
         };  

         // Set on action 
        combo_box . setOnAction ( event );  
        
         VBox  vbox = new   VBox ( combo_box );
        vbox . setAlignment ( Pos . CENTER );  
        
         HBox  hbox  =   new   HBox ();
        
         BorderPane  border  =   new   BorderPane ();
        border . setTop ( vbox );
        border . setCenter ( hbox );

         Scene  scene  =   new   Scene ( border ,   800 ,   200 );
        
        hbox . getChildren (). addAll ( tableView , barChart );
        hbox . setAlignment ( Pos . CENTER );  

        primaryStage . setScene ( scene );
        primaryStage . setHeight ( 300 );
        primaryStage . setWidth ( 1200 );
        

        primaryStage . show ();

     }
    
     public   void  notifyObservers ()   {
         for ( Observer  o : list )   {
            o . refresh ( department );
         }
     }
     public   void  register ( Observer  obs )   {
        list . add ( obs );
     }
     public   void  unRegister ( Observer  obs )   {
        list . remove ( obs );
     }

     public   static   void  main ( String []  args )   {
         Application . launch ( args );
     }
}

p2/MainTab.java

p2/MainTab.java


import  java . util . ArrayList ;
import  java . util . Calendar ;
import  java . util . Date ;

import  javafx . application . Application ;
import  javafx . collections . FXCollections ;
import  javafx . event . ActionEvent ;
import  javafx . event . EventHandler ;
import  javafx . geometry . Pos ;
import  javafx . scene . Group ;
import  javafx . scene . Scene ;
import  javafx . scene . chart . BarChart ;
import  javafx . scene . chart . CategoryAxis ;
import  javafx . scene . chart . NumberAxis ;
import  javafx . scene . chart . PieChart ;
import  javafx . scene . chart . XYChart ;
import  javafx . scene . control . ComboBox ;
import  javafx . scene . control . Tab ;
import  javafx . scene . control . TabPane ;
import  javafx . scene . control . TableView ;
import  javafx . scene . layout . BorderPane ;
import  javafx . scene . layout . HBox ;
import  javafx . scene . layout . VBox ;
import  javafx . stage . Stage ;

public   class   MainTab   extends   Application   implements   Subject {
    
     String  department = "Furniture" ;
     BarChart  barChart ;
     TableView  tableView ;
    
     SalesData  data = new   SalesData ( "Transactions.dat" );
    
     ArrayList < Observer >  list = new   ArrayList < Observer > ();
    @ Override
     public   void  start ( Stage  primaryStage )   throws   Exception   {
        primaryStage . setTitle ( "Current Sales" );

         BarChartExperiments  b = new   BarChartExperiments ( data ,   this );
        barChart = b . createBarChart ();
               
         TableExperiments  t = new   TableExperiments ( data , this );
        tableView = t . createTableView ();
        
        
         String  depts []   = {   "Furniture" ,   "HardWare" ,   "Electronics" };  

         // Create a combo box 
         ComboBox  combo_box  =  
              new   ComboBox ( FXCollections . observableArrayList ( depts ));  

        combo_box . setValue ( "Furniture" );
         // Create action event 
         EventHandler < ActionEvent >  event  =   new   EventHandler < ActionEvent > ()   {  
             public   void  handle ( ActionEvent  e )  
             {  
                department = ( String ) combo_box . getValue ();  
                notifyObservers ();
             }  
         };  

         // Set on action 
        combo_box . setOnAction ( event );  
        
        
         TabPane  tabPane  =   new   TabPane ();
         BorderPane  mainPane  =   new   BorderPane ();
        
         VBox  vbox1 = new   VBox ();
        vbox1 . setAlignment ( Pos . CENTER );          
        vbox1 . getChildren (). add ( tableView );
        
        
         //Create Tabs
         Tab  tabA  =   new   Tab ();
        tabA . setText ( "Table View" );
        tabA . setContent ( vbox1 );
        tabPane . getTabs (). add ( tabA );
        
         VBox  vbox2 = new   VBox ();
        vbox2 . setAlignment ( Pos . CENTER );          
        vbox2 . getChildren (). add ( barChart );
        
        
         //Create Tabs
         Tab  tabB  =   new   Tab ();
        tabB . setText ( "Bar Chart" );
        tabB . setContent ( vbox2 );
        tabPane . getTabs (). add ( tabB );         
               
        mainPane . setTop ( combo_box );
        mainPane . setAlignment ( combo_box ,   Pos . CENTER );
        mainPane . setCenter ( tabPane );
        
         Scene  scene  =   new   Scene ( mainPane ,   400 ,   600 );
        
         /*BorderPane border = new BorderPane();
        border.setTop(vbox);
        border.setCenter(hbox);

        Scene scene = new Scene(border, 800, 200);
        
        hbox.getChildren().addAll(tableView,barChart,pieChart);
        hbox.setAlignment(Pos.CENTER);*/  

        primaryStage . setScene ( scene );
        primaryStage . setHeight ( 300 );
        primaryStage . setWidth ( 1200 );

        primaryStage . show ();

     }
    
     public   void  notifyObservers ()   {
         for ( Observer  o : list )   {
            o . refresh ( department );
         }
     }
     public   void  register ( Observer  obs )   {
        list . add ( obs );
     }
     public   void  unRegister ( Observer  obs )   {
        list . remove ( obs );
     }

     public   static   void  main ( String []  args )   {
         Application . launch ( args );
     }
}

p2/Observer.java

p2/Observer.java


public   interface   Observer   {
   public   void  refresh ( String  dept );
}

p2/SaleItem.java

p2/SaleItem.java



public   class   SaleItem   {
     private   String  dept ;
     private   int  month ;
     private   int  day ;
     private   int  quantity ;
     private   int  amount ;
    
     public   String  getDepartment ()
     {
         return  dept ;
     }
     public   int  getMonth ()   {
         return  month ;
     }
     public   int  getDay ()   {
         return  day ;
     }
     public   String  getDept ()   {
         return  dept ;
     }
     public   int  getQuantity ()   {
         return  quantity ;
     }
     public   int  getAmount ()   {
         return  amount ;
     }
     public   SaleItem ( String  d , int  month ,   int  day ,   int  quantity ,   int  amount )   {
        dept = d ;
         this . month  =  month ;
         this . day  =  day ;
         this . quantity  =  quantity ;
         this . amount  =  amount ;
     }
}

p2/SalesData.java

p2/SalesData.java


import  java . io . File ;
import  java . io . IOException ;
import  java . util . ArrayList ;
import  java . util . Calendar ;
import  java . util . Date ;
import  java . util . Scanner ;
import  java . util . StringTokenizer ;

public   class   SalesData   {
     ArrayList < SaleItem >  allRows ;
     String  department = "Furniture" ;

     public   SalesData ( String  fileName )
     {
        allRows  =   new   ArrayList < SaleItem > ();
         Scanner  input  =   null ;
         try   {
            input  =   new   Scanner ( new   File ( fileName ));
         }   catch   ( IOException  e )   {
             System . err . println ( "File not found!" );
         }
         while   ( input . hasNext ())   {
             String  line = input . nextLine ();
             StringTokenizer  st  =   new   StringTokenizer ( line ,   "," );
             String  s = st . nextToken ();
             int  m = Integer . parseInt ( st . nextToken ());
             int  d = Integer . parseInt ( st . nextToken ());
             int  q = Integer . parseInt ( st . nextToken ());
             int  a = Integer . parseInt ( st . nextToken ());
    
             SaleItem  item = new   SaleItem ( s , m , d , q , a );
            allRows . add ( item );
         }
     }

     public   String  getDepartment (){ return  department ;      }

     public   void  setDepartment ( String  d ){ department = d ;}

     public   int []  getYTDTotals ( String  department )   {
         int []  totals  =   {   0 ,   0 ,   0 ,   0 ,   0 ,   0 ,   0 ,   0 ,   0 ,   0 ,   0 ,   0   };
         for   ( int  i  =   0 ;  i  <   12 ;  i ++ )   {
            totals [ i ]   =  getMonthlyTotal ( +   1 ,  department );
         }
         return  totals ;
     }

     public   int  getMonthlyTotal ( int  month ,   String  department )   {
         int  total  =   0 ;

         ArrayList < SaleItem >  result = getCurrentMonthTransactions ( month , department );

         for   ( SaleItem  s : result )   {
            total  =  total  +  s . getAmount ();
         }
         return  total ;
     }

     public   ArrayList  getCurrentMonthTransactions ( int  month , String  department )   {
         ArrayList < SaleItem >  result  =   new   ArrayList < SaleItem > ();

         for   ( SaleItem  s : allRows )   {
             if   ( s . getDepartment (). equals ( department )   &&  s . getMonth () == month )   {
                result . add ( s );
             }
         }
         return  result ;
     }


}

p2/Subject.java

p2/Subject.java


public   interface   Subject   {
   public   void  notifyObservers ();
   public   void  register ( Observer  obs );
   public   void  unRegister ( Observer  obs );
}

p2/TableExperiments.java

p2/TableExperiments.java



import  java . util . ArrayList ;
import  java . util . Calendar ;
import  java . util . Date ;
import  java . util . List ;

import  javafx . application . Application ;
import  javafx . collections . FXCollections ;
import  javafx . collections . ObservableList ;
import  javafx . event . ActionEvent ;
import  javafx . event . EventHandler ;
import  javafx . geometry . Pos ;
import  javafx . scene . Scene ;
import  javafx . scene . chart . BarChart ;
import  javafx . scene . chart . CategoryAxis ;
import  javafx . scene . chart . NumberAxis ;
import  javafx . scene . chart . XYChart ;
import  javafx . scene . control . ComboBox ;
import  javafx . scene . control . TableColumn ;
import  javafx . scene . control . TableView ;
import  javafx . scene . control . cell . PropertyValueFactory ;
import  javafx . scene . layout . VBox ;
import  javafx . stage . Stage ;

public   class   TableExperiments   implements   Observer   {
     String  department ;
     TableView < SaleItem >  table ;
    
     SalesData  data ;
    
     public   TableExperiments ( SalesData  data ,   Subject  s )   {
        s . register ( this );
         this . data = data ;
        department = "Furniture" ;
     }
  
     public   TableView  createTableView (){
        
        table  =   new   TableView <> ();

        refresh ( department );
         return  table ;

     }
     public   void  refresh ( String  department )
     {
         this . department = department ;
         ObservableList < SaleItem >  items  =  getInitialTableData ();      
        table . setItems ( items );

         TableColumn  monthCol  =   new   TableColumn ( "Month" );
        monthCol . setCellValueFactory ( new   PropertyValueFactory < SaleItem ,   Integer > ( "month" ));
         TableColumn  dayCOl  =   new   TableColumn ( "Day" );
        dayCOl . setCellValueFactory ( new   PropertyValueFactory < SaleItem ,   Integer > ( "day" ));
         TableColumn  quanityCol  =   new   TableColumn ( "Quantity" );
        quanityCol . setCellValueFactory ( new   PropertyValueFactory < SaleItem ,   Integer > ( "quantity" ));
         TableColumn   amountCol =   new   TableColumn ( "Amount" );
        amountCol . setCellValueFactory ( new   PropertyValueFactory < SaleItem ,   Integer > ( "amount" ));
        
        table . getColumns (). setAll ( monthCol ,  dayCOl , quanityCol , amountCol );
        table . setPrefWidth ( 450 );
        table . setPrefHeight ( 300 );
        table . setColumnResizePolicy ( TableView . CONSTRAINED_RESIZE_POLICY );
     }

        
     private   ObservableList < SaleItem >  getInitialTableData ()   {
        
        

         Calendar  cal  =   Calendar . getInstance ();
        cal . setTime ( new   Date ());
         int  month  = cal . get ( Calendar . MONTH )   +   1 ;
        
         ArrayList < SaleItem >  result = data . getCurrentMonthTransactions ( month , department );
        
        
         ObservableList < SaleItem >  list  =   FXCollections . observableList ( result );

         return  list ;
     }
}

p2/Transactions.dat

Furniture 1 1 2 200
Furniture 1 10 2 400
Furniture 1 15 2 400
Furniture 2 1 2 2000
Furniture 2 10 2 2000
Furniture 2 15 2 1000
Furniture 3 1 2 2000
Furniture 3 10 2 1000
Furniture 3 15 2 1000
Furniture 4 1 2 200
Furniture 4 10 2 400
Furniture 4 15 2 400
Furniture 5 1 2 2000
Furniture 5 1 2 2000
Furniture 5 1 2 2000
Furniture 6 10 2 2000
Furniture 6 15 2 2000
Furniture 6 1 2 1000
Furniture 6 2 2 4000
Furniture 7 10 2 200
Furniture 7 15 2 700
Furniture 7 1 2 100
Furniture 8 10 2 200
Furniture 8 15 2 200
Furniture 8 1 2 1600
Furniture 9 10 2 200
Furniture 9 15 2 200
Furniture 9 1 2 600
Furniture 10 10 2 1000
Furniture 10 15 2 2000
Furniture 10 1 2 1000
Furniture 11 10 2 200
Furniture 11 15 2 200
Furniture 11 1 2 800
Furniture 12 10 2 2000
Furniture 12 15 2 2000
Furniture 12 1 2 2000
HardWare 1 1 2 2000
HardWare 1 10 2 2000
HardWare 1 15 2 1000
HardWare 2 1 2 2000
HardWare 2 10 2 2000
HardWare 2 15 2 2000
HardWare 3 1 2 200
HardWare 3 10 2 1000
HardWare 3 15 2 800
HardWare 4 1 2 200
HardWare 4 10 2 400
HardWare 4 15 2 400
HardWare 5 1 2 200
HardWare 5 1 2 200
HardWare 5 1 2 600
HardWare 6 10 3 3000
HardWare 6 15 2 2000
HardWare 6 1 2 1000
HardWare 7 10 2 200
HardWare 7 15 2 700
HardWare 7 1 2 100
HardWare 8 10 2 200
HardWare 8 15 2 200
HardWare 8 1 2 600
HardWare 9 10 2 200
HardWare 9 15 2 200
HardWare 9 1 2 600
HardWare 10 10 2 2000
HardWare 10 15 2 2000
HardWare 10 1 2 2000
HardWare 11 10 2 1000
HardWare 11 15 2 200
HardWare 11 1 2 1800
HardWare 12 10 2 200
HardWare 12 15 2 200
HardWare 12 1 2 600
Electronics 1 1 2 200
Electronics 1 10 2 400
Electronics 1 15 2 400
Electronics 2 1 2 2000
Electronics 2 10 2 2000
Electronics 2 15 2 1000
Electronics 3 1 2 2000
Electronics 3 10 2 1000
Electronics 3 15 2 1000
Electronics 4 1 2 200
Electronics 4 10 2 400
Electronics 4 15 2 400
Electronics 5 1 2 200
Electronics 5 1 2 200
Electronics 5 1 2 600
Electronics 6 10 2 2000
Electronics 6 15 1 1000
Electronics 6 1 2 1000
Electronics 7 10 2 200
Electronics 7 15 2 700
Electronics 7 1 2 100
Electronics 8 10 2 1200
Electronics 8 15 2 1200
Electronics 8 1 2 1600
Electronics 9 10 2 200
Electronics 9 15 2 200
Electronics 9 1 2 600
Electronics 10 10 2 1000
Electronics 10 15 2 2000
Electronics 10 1 2 1000
Electronics 11 10 2 1000
Electronics 11 15 2 200
Electronics 11 1 2 1800
Electronics 12 10 2 200
Electronics 12 15 2 200
Electronics 12 1 2 600