Monday, September 19, 2016

Menangani Kejadian-kejadian pada Aplikasi JavaFX : Event Handling

Pendahuluan

Pada bagian ini kita akan berbicara mengenai :
  1. Konsep dari event
  2. Menggunakan interface/class yang menangani event
  3. Membuat turunan interface EventHandler
  4. Menggunakan inner class untuk event handling
  5. Menggunakan annonymous class untuk event handling
  6. Lambda untuk event handling (akan dicontohkan pada penerbitan halaman berikutnya)

Konsep dari Event

  • Event adalah suatu kejadian (dalam bahasa Indonesia). Secara penulisan program, event adalah sebuah nilai/object yang dibuat ketika pengguna melakukan sebuah aksi dengan sebuah object seperti Button, TextEdit, ataupun control lainnya.  
  • Sebuah event diterbitkan oleh sebuah object, yang merupakan asal dari event.
  • Selanjutnya event akan ditujukan kepada object lain yang dirubah nilainya. Object tersebut merupakan target dari sebuah event.
  • Event handler adalah sebuah object yang menangani terjadinya event.
  • Sebuah aplikasi atau object yang akan bereaksi terhadap sebuah event harus menggunakan interface EventHandler, yang BERUMAH didalam sebuah PACKAGE javafx.event.
  • Interface tersebut memiliki sebuah method : void handle<T event>

Cara-cara penanganan event 

Ada empat cara yang saya pahami untuk penanganan event yaitu :
  • Menggunakan class tak bernama (annonym)
  • Menggunakan inner class
  • Mengimplementasikan interface EventHandler
  • Menggunkan fasilitas lambda untuk java 8 (akan dicontohkan pada penerbitan halaman berikutnya).
Pada dasarnya penanganan event menggunkan urut-urutan kerja sebagai berikut :
  1. Membuat asal event yaitu membuat object dari sebuah control seperti Button
  2. Membuat event handler dengan salah satu dari empat cara diatas
  3. Memasangkan event handler dengan asal event.
Selanjutnya kita akan melihat kode program yang memberikan contoh keempat cara diatas :

Menggunakan class tak bernama (annonym)

package javafxhello;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

/**
 *
 * @author joko
 */
public class JavaFXHello extends Application {
   
    @Override
    public void start(Stage primaryStage) {
        Button btn = new Button();
        btn.setText("Say 'Hello World'");
        //Object dari sebuah EventHandler
        //tetapi tanpa DIBERI NAMA REFERENSI
        //Operator new digunakan untuk membuat
        //object tersebut
        btn.setOnAction(new EventHandler<ActionEvent>() {
           
            @Override
            public void handle(ActionEvent event) {
                System.out.println("Hello World!");
            }
        });
       
        StackPane root = new StackPane();
        root.getChildren().add(btn);
       
        Scene scene = new Scene(root, 300, 250);
       
        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }
   
}

Menggunakan class bernama

package javafxhello;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

/**
 *
 * @author android
 */
public class JavaFXHello extends Application {
   
    Button btn;

    //Inner class untuk handler
    class ButtonHandler   
    implements EventHandler <ActionEvent>
    {
        @Override public void handle(ActionEvent e)   
        {   
            if(e.getSource()==btn){
                System.out.println("Hello World!");           
            }
        }
    }

   
    @Override
    public void start(Stage primaryStage) {
        ButtonHandler bh = new ButtonHandler();
        btn = new Button();
        btn.setText("Say 'Hello World'");
        //berikut ini adalah cara untuk menghubungkan
        //bh dan btn
        btn.setOnAction(bh);
       
        StackPane root = new StackPane();
        root.getChildren().add(btn);
       
        Scene scene = new Scene(root, 300, 250);
       
        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }
   
}

Mengimplementasikan interface EventHandler

package javafxhello;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

/**
 *
 * @author android
 */

//Program ini akan mengimplementasikan interface
//EventHandler
public class JavaFXHello extends Application
    implements EventHandler<ActionEvent> {
   
    Button btn;
    //method handle dioveride 
    @Override public void handle(ActionEvent e){
        if (e.getSource()==btn){
            System.out.println("Hello World");
        }  
       
       
    }


   
    @Override
    public void start(Stage primaryStage) {
       
        btn = new Button();
        btn.setText("Say 'Hello World'");
        //berikut ini adalah cara untuk menghubungkan
        //btn dan event handler : yang merupakan dirinya sendiri          

        btn.setOnAction(this);
       
        StackPane root = new StackPane();
        root.getChildren().add(btn);
       
        Scene scene = new Scene(root, 300, 250);
       
        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }
   
}



No comments:

Post a Comment