Wednesday, November 30, 2016

Membuat Aplikasi untuk Memasukkan Anggota Organization : Membuat Class MemberEntriScreen 2

Disini saya akan memodifikasi program Sebelumnya sehingga dapat memasukkan data kedalam database. Perubahan yang dilakukan adalah menambah class ButtonHandler yang nerupakan implementasi EventHandler :

/**
 *
 * @author Joko Adianto
 * Released under GPLv3
 */

package javafxorganization;

import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

public class MemberEntriScreen {
    String strSQL;
    Statement stmt;
    Group root;
    Stage stage;
    Scene scene;
    Connection conApp;
  
    Label lblId;
    TextField txfId;
    HBox hbxId;
  
    Label lblName;
    TextField txfName;
    HBox hbxName;
  
    Label lblAddress;
    TextField txfAddress;
    HBox hbxAddress;
    
    Button btnSave;
    Button btnCancel;
    HBox hbxButton;
  
    VBox vbxMember;
    
    ButtonHandler bh;
    
    class ButtonHandler implements EventHandler<ActionEvent>{
        
        @Override
        public void handle(ActionEvent t) {
            //BUTTON SAVE
            if (t.getSource().equals(btnSave)){
                strSQL = "insert into member values("+
                        "'"+txfId.getText()+
                        "', '" +txfName.getText()+
                        "', '" +txfAddress.getText()+
                        "')";
                txfAddress.setText(strSQL);
                try {
                    stmt.execute(strSQL);
                }
                catch (SQLException ex){
                }
            }
            //BUTTON CANCEL
            else if(t.getSource().equals(btnCancel)){
              txfId.setText("");
              txfName.setText("");
              txfAddress.setText("");
            }
        }
      
    }
  
    {
        lblId = new Label("Member Id");
        lblId.setMinWidth(80);
        txfId = new TextField();
        txfId.setMinWidth(120);
        hbxId = new HBox();
        hbxId.getChildren().addAll(lblId, txfId);
      
  
        lblName = new Label("Name");
        lblName.setMinWidth(80);
        txfName = new TextField();
        txfName.setMinWidth(120);
        hbxName = new HBox();
        hbxName.getChildren().addAll(lblName, txfName);
  
        lblAddress = new Label("Address");
        lblAddress.setMinWidth(80);
        txfAddress = new TextField();
        txfAddress.setMinWidth(120);
        hbxAddress = new HBox();
        hbxAddress.getChildren().addAll(lblAddress, txfAddress);
        
        bh = new ButtonHandler();
        btnSave = new Button("Save");
        btnSave.setMinWidth(200);
        btnSave.setOnAction(bh);
        
        btnCancel = new Button("Cancel");
        btnCancel.setMinWidth(200);
        btnCancel.setOnAction(bh);
        hbxButton = new HBox();
        hbxButton.getChildren().addAll(btnSave, btnCancel);
        
        vbxMember = new VBox();
        vbxMember.getChildren().addAll(hbxId, 
                hbxName, 
                hbxAddress,
                hbxButton);
    }
  
    MemberEntriScreen(Stage stage, Connection conApp) throws SQLException{
        this.stage = stage;       
        this.conApp = conApp;
        stmt = this.conApp.createStatement();        
        root = new Group();
        root.getChildren().addAll(vbxMember);
        scene = new Scene(root, 800, 600, Color.BEIGE);
        this.stage.setScene(scene);
        this.stage.setTitle("Entri Data Member");
        this.stage.show();
    }
  
}

Tuesday, November 29, 2016

Membuat Aplikasi untuk Memasukkan Anggota Organization : Membuat Class MemberEntriScreen 1

Disini kita akan membuat halaman untuk memasukkan data. Saya akan membuat class MemberEntriScreen. Class ini ditujukan untuk memasukkan data. Data yang dimasukkan disimpan didalam database. Program ini akan menampilkan Text Field untuk menerima Member Id, Member Name, Member Address.

Program ini menggunakan 3 buah label dan 3 buah field. Tetapi tanpa button, yang akan diimplementasi oleh ANDA : BE A HERO.  Program ini hanya bisa dan pasti hanya bisa MEMASUKKAN SATU BARIS DATA SAJA : KARENA SETIAP KALI BERJALAN PERNYATAAN BERIKUT INI DIEKSEKUSI DAN PRIMARY KEY MENUNJUK NILAI YANG UNIK DIDALAM TABEL TERSEBUT.

.....
memasukkan 1 (satu) member SAJA : Karena pernyataan berikut :
this.stage.setTitle("Login To Application");
Statement stmt = conApp.createStatement();
stmt.execute("insert into member values('12345678', 'Budi Subudi',"
                + "'Jl. ABCDEFG NO 12345678')");
this.stage.show();
.....

Adapun kode program lengkapnya adalah sebagai berikut :
/**
 *
 * @author Joko Adianto
 * Released under GPLv3
 */

package javafxorganization;

import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

public class MemberEntriScreen {
    Group root;
    Stage stage;
    Scene scene;
    Connection conApp;
 
    Label lblId;
    TextField txfId;
    HBox hbxId;
 
    Label lblName;
    TextField txfName;
    HBox hbxName;
 
    Label lblAddress;
    TextField txfAddress;
    HBox hbxAddress;
 
    VBox vbxMember;
 
    {
        lblId = new Label("Member Id");
        lblId.setMinWidth(80);
        txfId = new TextField();
        txfId.setMinWidth(120);
        hbxId = new HBox();
        hbxId.getChildren().addAll(lblId, txfId);
     
 
        lblName = new Label("Name");
        lblName.setMinWidth(80);
        txfName = new TextField();
        txfName.setMinWidth(120);
        hbxName = new HBox();
        hbxName.getChildren().addAll(lblName, txfName);
 
        lblAddress = new Label("Address");
        lblAddress.setMinWidth(80);
        txfAddress = new TextField();
        txfAddress.setMinWidth(120);
        hbxAddress = new HBox();
        hbxAddress.getChildren().addAll(lblAddress, txfAddress);
     
        vbxMember = new VBox();
        vbxMember.getChildren().addAll(hbxId, hbxName, hbxAddress);
    }
 
    MemberEntriScreen(Stage stage, Connection conApp) throws SQLException{
        this.stage = stage;      
        this.conApp = conApp;
        root = new Group();
        root.getChildren().addAll(vbxMember);
        scene = new Scene(root, 800, 600, Color.BEIGE);
        this.stage.setScene(scene);
        this.stage.setTitle("Login To Application");

//YOU WILL IMPLEMENT THIS IN A BUTTON DEFINITION
        Statement stmt = conApp.createStatement();
        stmt.execute("insert into member values('12345678', 'Budi Subudi',"
                + "'Jl. ABCDEFG NO 12345678')");
//THIS STATEMENT USES conApp passed by previous Class

        this.stage.show();
    }
 
}

Membuat Aplikasi untuk Memasukkan Anggota Organization : Membuat Class LoginScreen

Class LoginScreen memiliki constructor yang menerima referensi Primary Stage dan Connection. PrimaryStage dan Connection tersebut akan digunakan oleh semua screen dari aplikasi-aplikasi. Constructor yang kita gunakan adalah :
LoginScreen(Stage stage, Connection conApp)

Perhatikanlah bahwa login screen ini hanya melakukan koneksi ke database. BeLuM menampilkan layar untuk memasukkan data-data Member. Hal ini terlihat dari inner ButtonHandler yang merupakan penerapan dari  EventHandler. Disebut penerapan karena EventHandler adalah interface.

Untuk melakukan menampilkan Layar MemberEntriScreen, kita akan mebuat program yang ditampilkan pada layar berikutnya.


class ButtonHandler implements EventHandler<ActionEvent>{

        @Override
        public void handle(ActionEvent t) {
            if (t.getSource().equals(btnLogin)){
                try {
                    conApp = DriverManager.getConnection(
                            "jdbc:derby://localhost:1527/Organization",
                            txfUser.getText(),
                            psfPassword.getText());
                    btnLogin.setText("Success");
                } catch (SQLException ex) {
                    txfUser.setText("failed login");
                }
             
            }
            else if(t.getSource().equals(btnCancel)){
             
            }
        }
     
    }

Adapun kode program lengkapnya adalah sebagai berikut :


/**
 *
 * @author Joko Adianto
 * Released under GPLv3;
 */

package javafxorganization;

import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.PasswordField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

public class LoginScreen {
    Group root;
    Stage stage;
    Scene scene;
    Connection conApp;
 
    Label lblUser;
    TextField txfUser;
    HBox hbxUser;
 
    Label lblPassword;
    PasswordField psfPassword;
    HBox hbxPassword;
 
    Button btnLogin;
    Button btnCancel;
    HBox hbxButton;
    VBox vbxLogin;
 
    ButtonHandler bh;
 
    class ButtonHandler implements EventHandler<ActionEvent>{

        @Override
        public void handle(ActionEvent t) {
            if (t.getSource().equals(btnLogin)){
                try {
                    conApp = DriverManager.getConnection(
                            "jdbc:derby://localhost:1527/Organization",
                            txfUser.getText(),
                            psfPassword.getText());
                    btnLogin.setText("Success");
                } catch (SQLException ex) {
                    txfUser.setText("failed login");
                }
             
            }
            else if(t.getSource().equals(btnCancel)){
             
            }
        }
     
    }
 
    {
        lblUser = new Label("User");
        lblUser.setMinWidth(80);
        txfUser = new TextField();
        txfUser.setMinWidth(120);
        hbxUser = new HBox();
        hbxUser.getChildren().addAll(lblUser, txfUser);
     
 
        lblPassword = new Label("Password");
        lblPassword.setMinWidth(80);
        psfPassword = new PasswordField();
        psfPassword.setMinWidth(120);
        hbxPassword = new HBox();
        hbxPassword.getChildren().addAll(lblPassword, psfPassword);
 
        btnLogin = new Button("Login");
        btnLogin.setMinWidth(lblPassword.getMinWidth());
        btnCancel = new Button("Cancel");      
        btnCancel.setMinWidth(lblPassword.getMinWidth());
     
        hbxButton = new HBox(65);
     
     
        hbxButton.getChildren().addAll(btnLogin, btnCancel);
     
        vbxLogin = new VBox();
        vbxLogin.getChildren().addAll(hbxUser, hbxPassword, hbxButton);
 
        bh = new ButtonHandler();
        btnLogin.setOnAction(bh);
        btnCancel.setOnAction(bh);
    }
 
    LoginScreen(Stage stage, Connection conApp){
        this.stage = stage;      
        this.conApp = conApp;
        root = new Group();
        root.getChildren().addAll(vbxLogin);
        scene = new Scene(root, vbxLogin.getMinWidth(),
                vbxLogin.getMinHeight(),
                Color.AQUAMARINE);
        this.stage.setScene(scene);
        this.stage.setTitle("Login To Application");
        this.stage.show();
    }
 
}

Membuat Aplikasi untuk Memasukkan Anggota Organization : Membuat Titik masuk Aplikasi

Selanjutnya saya akan membuat aplikasi untuk memasukkan para anggota Organization kedalam Member. Titik masuk aplikasi ini adalah Stage dalam hal ini primary Stage. Cara yang dilakukan adalah :
  • Meneruskan primaryStage tersebut ke setiap class-class yang lain yang akan berisi scene.
  • Class-class yang lain tersebut juga akan berisi reference variable terhadap connection.
  • Jangan Lupa memasukkan JavaDB Driver library agar dapat melakukan eksekusi Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance();
Source kode yang dibuat adalah :
/**
 *
 * @author Joko Adianto
 * Released under GPLv3
 */
package javafxorganization;

import java.sql.Connection;
import javafx.application.Application;
import javafx.stage.Stage;


public class JavaFXOrganization extends Application {
    LoginScreen loginScreen;
        Connection conApp;
    @Override
    public void start(Stage primaryStage) throws ClassNotFoundException, InstantiationException {
        Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance();
        
        loginScreen = new LoginScreen(primaryStage, conApp);
        
        }

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

Jika kita belum membuat class LoginScreen maka aplikasi kita tidak dapat dieksekusi. Hal tersebut dikarenakan kita mencoba membuat reference variable yang jenisnya belum ada. Program ini baru dapat dieksekusi setelah membuat class LoginScreen.

LoginScreen akan dijelaskan pada halaman berikutnya

Membuat Database : Organization dan Table : Member

Saya membuat Database bernama Organization. Nama User adalah : app dan Password User adalah : app. Penamaan dan penentuan password dilakukan secara sederhana agar tidak lupa. Selanjutnya saya akan membuat table Member :

  • Koneksi ke database organisasi dengan muliskan nama user dan password yang sudah ditentukan sebelumnya
  • Melakukan penulisan perintah SQL dan dieksekusi :

create table Member (
    MemberId varchar(8),
    MemberName varchar(30),
    MemberAddress varchar(30),
    primary key(MemberId)
)

Tuesday, November 15, 2016

Contoh Combo Box dan ListView pada sebuah aplikasi

Saya membuat contoh aplikasi :

  • ObservableList diisi data dari TextField
  • ObservableList digunakan oleh ComboBox dan ListView Sekaligus
Berikut ini adalah potongan programnya :

/**
 *
 * @author Joko Adianto
 */
public class JavaFXComboBoxListView extends Application {
    final ObservableList<String> data = FXCollections.observableArrayList();
    final TextField inputField = new TextField();
    @Override
    public void start(Stage primaryStage) {
        ComboBox<String> comboBox = new ComboBox<>();
        comboBox.itemsProperty().setValue(data);
        ListView<String> listView = new ListView<>();
        listView.itemsProperty().setValue(data);
        
        inputField.setPromptText("insert new data type");
        //inputField.setOnAction(e -> data.add(inputField.getText()));
        inputField.setOnAction(new EventHandler<ActionEvent>() {
          
            @Override
            public void handle(ActionEvent event) {
                data.add(inputField.getText());
            }
        });
        
        
        VBox box = new VBox();
        box.getChildren().addAll(inputField, comboBox, listView);
        box.setAlignment(Pos.CENTER);
        Scene myScene = new Scene(box);
        primaryStage.setScene(myScene);
        primaryStage.show();
    }

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

Contoh Combo Box Sederhana

Berikut ini saya membuat contoh combo box yang berisi data teman-teman :

/**
 *
 * @author Joko Adianto
 */
public class JavaFXComboBox extends Application {
 
    @Override
    public void start(Stage primaryStage) {
        ComboBox<String> comboBox = new ComboBox<>();
        ObservableList<String> oblTeman = FXCollections.observableArrayList();
        comboBox.itemsProperty().setValue(oblTeman);
        oblTeman.addAll("Hannibal Lecter", "Three Fingers",
                "Saw Thooth", "Chucky", "Tiffany", "Anabelle");      
             
        StackPane root = new StackPane();
        root.getChildren().add(comboBox);
     
        Scene scene = new Scene(root, 300, 250);
     
        primaryStage.setTitle("Daftar Teman Masa Kecil");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

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

Contoh Membuat Combo Box

Berikut ini adalah potongan program untuk menghadirkan sebuah Combo Box :

/**
 *
 * @author Joko Adianto
 */
public class JavaFXComboBox extends Application {
   
    @Override
    public void start(Stage primaryStage) {
        ComboBox<String> comboBox = new ComboBox<>();
        ObservableList<String> oblTeman = FXCollections.observableArrayList();
        comboBox.itemsProperty().setValue(oblTeman);
        oblTeman.addAll("Hannibal Lecter", "Three Fingers", "Saw Thooth");      
               
        StackPane root = new StackPane();
        root.getChildren().add(comboBox);
       
        Scene scene = new Scene(root, 300, 250);
       
        primaryStage.setTitle("Daftar Teman Masa Kecil");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

Contoh Membuat Slider dengan Loop

Berikut ini ini adalah contoh membuat banyak slider dengan loop. Dimana inisiasi dilakukan pada initializer block :

/**
 *
 * @author Joko Adianto
 */
public class JavaFXSlider2 extends Application {
    Slider slider[] = new Slider[5];
    HBox box;

{
    box = new HBox();
    int j = 0;
    while(j<slider.length){
        slider[j] = new Slider(-12,12,1);
        box.getChildren().add(slider[j]);
        slider[j++].setOrientation(Orientation.VERTICAL);
    }
}

@Override
public void start(Stage primaryStage) throws Exception {
    box.setAlignment(Pos.CENTER);
    HBox.setHgrow(slider[4], Priority.ALWAYS);  
    Scene myScene = new Scene(box);
    primaryStage.setScene(myScene);
    primaryStage.setTitle("Contoh Membuat Banyak Slider dengan loop");
    primaryStage.setWidth(600);
    primaryStage.setHeight(600);
    primaryStage.show();
    }

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

Friday, November 11, 2016

Control Lanjutan : Membuat Slider

Berikut ini adalah kode program untuk membuat slider vertikal dan slider horizontal :

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package javafxslider;

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Orientation;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Slider;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.stage.Stage;
import javafx.util.StringConverter;
public class JavaFXSlider extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
    Slider slider1 = new Slider(-10, 70, 20);
    slider1.setMajorTickUnit(25);
    slider1.setShowTickLabels(true);
    slider1.setShowTickMarks(true);
    slider1.setBlockIncrement(25);
    slider1.setSnapToTicks(true);
    slider1.setMinorTickCount(25);
    slider1.setOrientation(Orientation.VERTICAL);
    slider1.setLabelFormatter(new StringConverter<Double>(){
   
    @Override
    public String toString(Double object) {
        return object + " °C";
    }

    @Override
    public Double fromString(String string) {
        return new Double(string.substring(0, string.length() - 3));
        }
    });
   
    slider1.valueProperty().addListener((e) -> System.out.println(slider1.
    getValue() + " °Celsius "));
    Slider slider2 = new Slider(-5.0, 5.0, 0.5);
    slider2.setMajorTickUnit(1);
    slider2.setShowTickLabels(true);
    slider2.setShowTickMarks(true);
    HBox box = new HBox(slider1, slider2);
    box.setAlignment(Pos.CENTER);
    box.setPadding(new Insets(12));
    HBox.setHgrow(slider2, Priority.ALWAYS);
    Scene myScene = new Scene(box);
    primaryStage.setScene(myScene);
    primaryStage.setTitle("Pengatur Suhu");
    primaryStage.setWidth(300);
    primaryStage.setHeight(200);
    primaryStage.show();
    }


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

Tuesday, November 8, 2016

Contoh Menu :Lanjutan

Berikut ini adalah contoh menu dengan separator dan sub menu


package javafxmenu1;

import javafx.application.Application;
import javafx.scene.Scene;

import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.scene.control.SeparatorMenuItem;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;


/**
 *
 * @author Joko Adianto
 */
public class JavaFXMenu1 extends Application {
    /*
    Urut-urutan eksekusi berkenaan dengan eksekusi deklarasi, static var/refvar,
    static initizialization block, var/refvar, initialization block, constructor
    1. Inisialisasi Super class
    2. Inisialisasi Static Var/RefVar dan Static Initialization Block
        sesuai dengan urut-urutan Penulisan
    3. Inisialisasi Non-Static Var/RefVar dan Non-Static Initialization Block
        sesuai dengan urut-urutan Penulisan
    4. Constructor
    */
   
    /*
    Deklarasi bermacam-macam reference variable yang menunjuk object :
    1. MenuBar
    2. MenuItem
    3. Separator
    */
    MenuBar menuBar1;
    Menu mnuFile;
    MenuItem mniNewProject;
    MenuItem mniNewFile;
    SeparatorMenuItem smiSeparator1;
    MenuItem mniOpenProject;
    Menu mnuOpenRecentProject;
    SeparatorMenuItem smiSeparator2;
    Menu mnuImportProject;
    MenuItem mniEclipseProject;
    MenuItem mniResychronizeEclipseProject;  
    MenuItem mniImportProjectFromZIP;  
    Menu mnuExportProject;  
    MenuItem mniToZIP;
    {
        menuBar1 = new MenuBar();
        mnuFile = new Menu("File");
        mniNewProject = new MenuItem("New Project");      
        mniNewFile = new MenuItem("New File");
        smiSeparator1 = new SeparatorMenuItem();
        smiSeparator2 = new SeparatorMenuItem();
        mniOpenProject = new MenuItem("Open Project");
        mnuOpenRecentProject = new Menu("Open Recent Project");
        mnuOpenRecentProject.setDisable(true);
       
        mnuImportProject = new Menu("Import Project");
        mniEclipseProject = new MenuItem("Import Eclipse Project");
        mniResychronizeEclipseProject = new
            MenuItem("Resynchronize Import Eclipse Project");
        mniImportProjectFromZIP = new MenuItem("Import from ZIP");
        mnuImportProject.getItems().addAll(
            mniEclipseProject,
            mniResychronizeEclipseProject,
            mniImportProjectFromZIP
            );
        mnuExportProject = new Menu("Export Project");
        mniToZIP = new MenuItem("Export Project To ZIP");
        mnuExportProject.getItems().add(mniToZIP);
        /*
        Letakkan menu item dan separator menu item kedalam container yang
        cocok :
        SeparatorMenuItem, Menu dan MenuItem diletakkan kedalam Menu
        Menu diletakkan kedalam menuBar
        */
        mnuFile.getItems().addAll(
            mniNewProject,
            mniNewFile,
            smiSeparator1,
            mniOpenProject,
            mnuOpenRecentProject,
            //Letakkan Menu yang memiliki Sub menu          
            smiSeparator2,
            mnuImportProject,
            mnuExportProject
            );
        menuBar1.getMenus().add(mnuFile);
    }
   
    @Override
    public void start(Stage primaryStage) {      
        BorderPane root = new BorderPane();
        root.setTop(menuBar1);      
        Scene scene = new Scene(root, 300, 250);      
        primaryStage.setTitle("Contoh Menu");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

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

   
   
}