Pendahuluan
Pada bagian ini kita akan berbicara mengenai :
- Konsep dari event
- Menggunakan interface/class yang menangani event
- Membuat turunan interface EventHandler
- Menggunakan inner class untuk event handling
- Menggunakan annonymous class untuk event handling
- 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 :
- Membuat asal event yaitu membuat object dari sebuah control seperti Button
- Membuat event handler dengan salah satu dari empat cara diatas
- 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 di
overide
@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);
}
}