x.scene.layout.HBox;
import javafx.scene.layout.VBox;
public class PanelKanan extends VBox{
HBox hbSearch = new HBox(10);
TextField tfSearch = new TextField();
Button btSearch,btAdd,btEdit,btDelete ;
TableView<MHSM> tbMHS = new TableView();
MHSC mhsc = new MHSC();
public PanelKanan(){
Image imgAdd = new Image("image/tambah.png");
Image imgEdit = new Image("image/edit.png");
Image imgDel = new Image("image/del.png");
Image imgSearch = new Image("image/search.png");
ImageView ivAdd = new ImageView(imgAdd);
ivAdd.setFitWidth(70);
ivAdd.setFitWidth(30);
ImageView ivEdit = new ImageView(imgEdit);
ivEdit.setFitWidth(70);
ivEdit.setFitWidth(30);
ImageView ivDel = new ImageView(imgDel);
ImageView ivSearch = new ImageView(imgSearch);
btSearch = new Button("Search",ivSearch);
btAdd = new Button("Add",ivAdd);
btEdit = new Button("Edit",ivEdit);
btDelete = new Button("Delete",ivDel);
btAdd.setPrefWidth(120);
btAdd.setPrefHeight(40);
209
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
btEdit.setPrefWidth(120);
btEdit.setPrefHeight(40);
btDelete.setPrefWidth(120);
btDelete.setPrefHeight(40);
btSearch.setPrefWidth(120);
btSearch.setPrefHeight(40);
tfSearch.setPrefWidth(200);
TableColumn<MHSM,Integer> colIdmhs= new TableColumn("ID");
TableColumn<MHSM,String> colNim=new TableColumn("NIM");
TableColumn<MHSM,String> colNama=new TableColumn("Nama");
TableColumn<MHSM,String> colKota_asal=new TableColumn("Kota
Asal");
colIdmhs.setCellValueFactory(new
PropertyValueFactory<>("idmhs"));
colNim.setCellValueFactory(new
PropertyValueFactory<>("nim"));
colNama.setCellValueFactory(new
PropertyValueFactory<>("nama"));
colKota_asal.setCellValueFactory(new
PropertyValueFactory<>("kota_asal"));
colIdmhs.prefWidthProperty().bind(tbMHS.widthProperty().divide(4));
colNim.prefWidthProperty().bind(tbMHS.widthProperty().divide(4));
colNama.prefWidthProperty().bind(tbMHS.widthProperty().divide(4));
colKota_asal.prefWidthProperty().bind(tbMHS.widthProperty().
divide(4));
tbMHS.getColumns().addAll(colIdmhs,colNim,colNama,colKota_asal);
tbMHS.setItems(mhsc.getAllMhs());
210
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
//hbSearch.setAlignment(Pos.CENTER);
hbSearch.getChildren().addAll(btAdd,btEdit,btDelete,tfSearch,
btSearch);
this.getChildren().addAll(hbSearch,tbMHS);
btAdd.setOnMouseClicked(e->{
AplikasJiFX5.pnKiri.aktif(true);
AplikasJiFX5.pnKiri.blAdd=true;
AplikasJiFX5.pnKiri.tfID.requestFocus();
});
btSearch.setOnMouseClicked(e->{
this.tbMHS.setItems(mhsc.searchMHS(tfSearch.getText()));
});/*
tbMHS.setOnMouseClicked(e->{
MHSM m= tbMHS.getSelectionModel().getSelectedItem();
AplikasJiFX5.pnKiri.tfID.setText(
String.valueOf(m.getIdmhs()));
AplikasJiFX5.pnKiri.tfNIM.setText( m.getNim());
AplikasJiFX5.pnKiri.tfNama.setText( m.getNama());
AplikasJiFX5.pnKiri.tfKota.setText( m.getKota_asal());
AplikasJiFX5.pnKiri.tempId=m.getIdmhs();
}); */
btEdit.setOnMouseClicked(e->{
MHSM m= tbMHS.getSelectionModel().getSelectedItem();
AplikasJiFX5.pnKiri.tfID.setText(
String.valueOf(m.getIdmhs()));
AplikasJiFX5.pnKiri.tfNIM.setText( m.getNim());
AplikasJiFX5.pnKiri.tfNama.setText( m.getNama());
AplikasJiFX5.pnKiri.tfKota.setText( m.getKota_asal());
AplikasJiFX5.pnKiri.tempId=m.getIdmhs();
AplikasJiFX5.pnKiri.aktif(true);
211
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
AplikasJiFX5.pnKiri.tfID.setEditable(false);
AplikasJiFX5.pnKiri.blAdd=false;
AplikasJiFX5.pnKiri.tfNama.requestFocus();
});
btDelete.setOnMouseClicked(e->{
MHSM m= tbMHS.getSelectionModel().getSelectedItem();
//
Alert alert = new Alert(AlertType.CONFIRMATION);
alert.setTitle("Hapus Data");
alert.setHeaderText("Yakin data dihapus?");
alert.setContentText("data "+m.getNama()+" dihapus");
Optional<ButtonType> option = alert.showAndWait();
if (option.get() == ButtonType.OK){
mhsc.delete(String.valueOf(m.getIdmhs()));
this.tbMHS.setItems(mhsc.getAllMhs());
}
//
});
}
}
Kode 13.11 PanelKiri.java
1
2
3
4
5
6
7
8
9
10
package aplikasijfx5.view;
import aplikasijfx5.controller.MHSC;
import aplikasijfx5.model.MHSM;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.image.Image;
212
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import javafx.scene.image.ImageView;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.VBox;
public class PanelKiri extends VBox {
Label lbID = new Label("ID");
Label lbNIM = new Label("NIM");
Label lbNama = new Label("Nama");
Label lbKota = new Label("Kota Asal");
TextField tfID=new TextField();
TextField tfNIM=new TextField();
TextField tfNama=new TextField();
TextField tfKota=new TextField();
Button btUpdate ;
Button btCancel;
int tempId;
boolean blAdd;
MHSC mhsc = new MHSC();
public PanelKiri(){
GridPane gp = new GridPane();
gp.add(lbID,0,0);
gp.add(lbNIM,0,1);
gp.add(lbNama,0,2);
gp.add(lbKota,0,3);
gp.add(tfID,1,0);
gp.add(tfNIM,1,1);
gp.add(tfNama,1,2);
gp.add(tfKota,1,3);
gp.setVgap(5);gp.setHgap(5);
tfID.setPromptText("ID MHS");
tfNIM.setPromptText("NIM");
213
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
tfNama.setPromptText("Nama");
tfKota.setPromptText("Kota Asal");
lbID.setStyle("-fx-text-fill:white;");
lbNIM.setStyle("-fx-text-fill:white;");
lbNama.setStyle("-fx-text-fill:white;");
lbKota.setStyle("-fx-text-fill:white;");
Image imgUpd = new Image("image/diskette.png");
Image imgCancel = new Image("image/rotation.png");
ImageView ivUpd = new ImageView(imgUpd);
ImageView ivCancel = new ImageView(imgCancel);
ivUpd.setFitWidth(70);
ivUpd.setFitWidth(30);
btUpdate = new Button("Update",ivUpd);
btUpdate.setPrefWidth(120);
btUpdate.setPrefHeight(40);
btCancel = new Button("Cancel",ivCancel);
btCancel.setPrefWidth(120);
btCancel.setPrefHeight(40);
//btUpdate.setStyle("-fx-background-color:green;-fx-text-
fill:white;-fx-font-size:14;");
//btCancel.setPrefWidth(100);
//btCancel.setStyle("-fx-background-color:green;-fx-text-
fill:white;-fx-font-size:14;");
tfID.setEditable(false);
this.getChildren().addAll(gp,btUpdate,btCancel);
this.setSpacing(10);
this.setPadding(new Insets(10));
this.setStyle("-fx-background-color:blue;");
this.setAlignment(Pos.CENTER);
aktif(false);
214
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
btCancel.setOnMouseClicked(e -> {
kosong();
aktif(false);
});
btUpdate.setOnMouseClicked(e -> {
if (!tfID.getText().equals("")){
MHSM m = new MHSM();
m.setIdmhs(Integer.parseInt(tfID.getText()) );
m.setNim(tfNIM.getText());
m.setNama(tfNama.getText());
m.setKota_asal(tfKota.getText());
if (blAdd==true)
mhsc.insert(m);
else{
m.setIdmhs(tempId);
mhsc.update(m);
}
AplikasJiFX5.pnKanan.tbMHS.setItems(mhsc.getAllMhs());
kosong();
aktif(false);
}
});
}
public void kosong(){
tfID.setText("");
tfNIM.setText("");
tfNama.setText("");
tfKota.setText("");
}
public void aktif(boolean bl){
215
104
105
106
107
108
109
tfID.setEditable(bl);
tfNIM.setEditable(bl);
tfNama.setEditable(bl);
tfKota.setEditable(bl);
}
}
Package model
Kode 13.12 MHSM.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package aplikasijfx5.model;
public class MHSM {
private int idmhs;
private String nim;
private String nama;
private String kota_asal;
@Override
public String toString() {
return "MHSM{" + "idmhs=" + idmhs + ", nim=" + nim + ",
nama=" + nama + ", kota_asal=" + kota_asal + '}';
}
public MHSM(){
}
public int getIdmhs() {
return idmhs;
}
public void setIdmhs(int idmhs) {
this.idmhs = idmhs;
}
public String getNim() {
return nim;
}
216
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public void setNim(String nim) {
this.nim = nim;
}
public String getNama() {
return nama;
}
public void setNama(String nama) {
this.nama = nama;
}
public String getKota_asal() {
return kota_asal;
}
public void setKota_asal(String kota_asal) {
this.kota_asal = kota_asal;
}
}
Package controller
Kode 13.13 MHSC.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package aplikasijfx5.controller;
import aplikasijfx5.model.MHSM;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
public class MHSC {
Statement st;
217
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public void insert(MHSM m){
try {
st=MyConnection.getConnection().createStatement();
String sql="insert into tbmhs
(idmhs,nim,nama,kota_asal) values('"+m.getIdmhs()+"','"+m.
getNim()+"','"+m.getNama()+"','"+m.getK ota_asal()+"') ";
st.executeUpdate(sql);
} catch (SQLException ex) {
Logger.getLogger(MHSC.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void update(MHSM m){
try {
st=MyConnection.getConnection().createStatement();
String sql="update tbmhs set Nim =
'"+m.getNim()+"',nama='"+m.getNama()+"',kota_asal='"+
m.getKota_asal()+"' where idmhs='"+m.getIdmhs()+"'";
st.executeUpdate(sql);
} catch (SQLException ex) {
Logger.getLogger(MHSC.class.getName()).log(Level.SEVERE,
null, ex);
}
}
public void delete(String idMhs){
try {
st=MyConnection.getConnection().createStatement();
String sql = "delete from tbmhs where idMhs='"+
idMhs+"'";
st.executeUpdate(sql);
} catch (SQLException ex) {
218
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
Logger.getLogger(MHSC.class.getName()).log(Level.SEVERE,
null, ex);
}
}
public ObservableList<MHSM> getAllMhs(){
ObservableList<MHSM> lmhs=
FXCollections.observableArrayList();
try {
st=MyConnection.getConnection().createStatement();
String sql="select * from tbmhs";
ResultSet rs=st.executeQuery(sql);
rs.beforeFirst();
while(rs.next()){
MHSM m = new MHSM();
m.setIdmhs(Integer.parseInt(rs.getString(1)));
m.setNim(rs.getString(2));
m.setNama(rs.getString(3));
m.setKota_asal(rs.getString(4));
lmhs.add(m);
System.out.println(m);
}
} catch (SQLException ex) {
Logger.getLogger(MHSC.class.getName()).log(Level.SEVERE,
null, ex);
}
return lmhs;
}
public ObservableList<MHSM> searchMHS(String nama){
ObservableList<MHSM> lmhs=
FXCollections.observableArrayList();
try {
219
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
st=MyConnection.getConnection().createStatement();
String sql="select * from tbmhs where nama
like'%"+nama+"%'";
ResultSet rs=st.executeQuery(sql);
rs.beforeFirst();
while(rs.next()){
MHSM m = new MHSM();
m.setIdmhs(Integer.parseInt(rs.getString(1)));
m.setNim(rs.getString(2));
m.setNama(rs.getString(3));
m.setKota_asal(rs.getString(4));
lmhs.add(m);
System.out.println(m);
}
} catch (SQLException ex) {
Logger.getLogger(MHSC.class.getName()).log(Level.SEVERE,
null, ex);
}
return lmhs;
}
}
Kode 13.14 MyConnection.java
1
2
3
4
5
6
7
8
9
package aplikasijfx5.controller;
import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;
public class MyConnection {
private static Connection con;
private MyConnection(){
}
220
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public static Connection getConnection(){
if (con==null){
try{
con =
DriverManager.getConnection("jdbc:mysql://localhost/javadb","root",
"");
//System.out.println("KOneksi berhasil...");
}catch(SQLException se){
se.printStackTrace();
}
}
return con;
}
public static void disconnect(){
if (con!=null)
con=null;
}
}
221
13.6 SQLLite
SQLite adalah database-engine SQL transaksional yang berdiri sendiri. dan merupakan
database yang dalam penggunaannya tidak memerlukan konfigurasi sehingga berbeda
dengan database lain .
SQLite tidak memerlukan proses server atau sistem yang terpisah untuk beroperasi
(serverless).
SQLite tidak memerlukan konfigurasi dalam penggunaannya, yang artinya tidak diperlukan
pengaturan atau administrasi terhadap database. Database SQLite lengkap disimpan dalam
sebuah file disk yang memiliki format lintas platform. SQLite sangat kecil dan ringan,
dengan ukuran kurang dari 400KB atau kurang dari 250KB dengan fitur opsional
dihilangkan.
SQLite mandiri, yang berarti tidak ada ketergantungan eksternal dengan aplikasi dan sistem
lainnya.
Transaksi SQLite sepenuhnya sesuai standar ACID(Atomicity, Consistency, Isolation,
Durability), yang memungkinkan akses yang aman dari berbagai proses atau threads. SQLite
mendukung sebagian besar fitur bahasa query dalam standar SQL92 (SQL2).SQLite ditulis
dalam ANSI-C dan menyediakan API yang sederhana dan mudah digunakan.SQLite tersedia
di UNIX (Linux, Mac OS-X, Android, iOS) dan Windows (Win32, WinCE, WinRT).
Tabel 13.1 Beberapa fitur yang tidak didukung dari SQL92 di SQLite
No Fitur yg tidak didukung Keterangan
1 RIGHT OUTER JOIN Hanya mendukung LEFT OUTER JOIN
2 FULL OUTER JOIN Hanya LEFT OUTER JOIN yg didukung
3 ALTER TABLE RENAME TABLE dan ADD COLUMN pada the ALTER
TABLE didukung
DROP COLUMN, ALTER COLUMN, ADD
CONSTRAINT tidak didukung.
4 Trigger FOR EACH ROW triggers didukung
Tapi FOR EACH STATEMENT triggers tidak didukung
222
5 View VIEW dalam SQLite bersifat read-only
Tidak bisa menggunakan statemtnt DELETE, INSERT, or
UPDATE pada view.
6 GRANT and REVOKE Satu-satunya izin akses yang dapat diterapkan adalah izin
akses file normal dari sistem operasi yang mendasarinya.
Kode 13.15 Contoh koneksi sekaligus membuat database baru “testdb”
1
2
3
4
5
6
7
8
9
Connection c ;
Statement stmt;
try {
Class.forName("org.sqlite.JDBC");
c = DriverManager.getConnection("jdbc:sqlite:test.db");
System.out.println("Opened database successfully");
} catch ( ClassNotFoundException | SQLException e ) {
System.err.println( e.getClass().getName() + ": " +
e.getMessage() );
}
Kode 13.16 Contoh membuat tabel baru pada SQLLite
1
2
3
4
5
6
7
8
Connection c ;
Statement stmt;
try {
Class.forName("org.sqlite.JDBC");
c = DriverManager.getConnection("jdbc:sqlite:test.db");
System.out.println("Opened database successfully");
stmt = c.createStatement();
String sql = "CREATE TABLE tbmhs " +
"(idmhs INT PRIMARY KEY NOT NULL," +
" nim TEXT NOT NULL, " +
223
9
10
11
12
13
14
15
" nama TEXT NOT NULL, " +
" kota_asalCHAR(50))";
stmt.executeUpdate(sql);
stmt.close();
c.close();
} catch ( ClassNotFoundException | SQLException e ) {
System.err.println( e.getClass().getName() + ": " +
e.getMessage() );
}
Kode 13.17 Contoh menambahkan data pada tabel
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Connection c = null;
Statement stmt = null;
try {
Class.forName("org.sqlite.JDBC");
c = DriverManager.getConnection("jdbc:sqlite:test.db");
System.out.println("Opened database successfully");
stmt = c.createStatement();
String sql = "insert into tbmhs(idmhs,nim,nama,kota_asal)
values (1,'A11.2017.00001','AGUS','SMG') ";
stmt.executeUpdate(sql);
sql = "insert into tbmhs(idmhs,nim,nama,kota_asal) values
(2,'A11.2017.00002','BUDI','SOLO) ";
stmt.executeUpdate(sql);
sql = "insert into tbmhs(idmhs,nim,nama,kota_asal) values
(3,'A11.2017.00003','WATI',KUDUS) ";
stmt.executeUpdate(sql);
stmt.close();
c.commit();
224
18
19
20
c.close();
} catch ( Exception e ) {
System.err.println( e.getClass().getName() + ": " +
e.getMessage() );
}
Kode 13.18 Contoh memproses resultSet
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Connection c ;
Statement st;
ResultSet rs;
try {
c = DriverManager.getConnection("jdbc:sqlite:test.db");
String sql="select * from tbmhs";
st = c.createStatement();
rs=st.executeQuery(sql);
String idmhs,nim,nama,kota_asal;
while(rs.next()){
idmhs= rs.getString(1);
nim= rs.getString(2);
nama= rs.getString(3);
kota-asal= rs.getString(4);
System.out.println(idmhs+” ”+nim+” ”+nama);
}
} catch (Exception ex) {
System.err.println(ex);
}
225
Contoh Aplikasi Lengkap dengan database SQLLite:
Gambar 13.4 Menambahkan driver sqlite-jdbc-3.27.2.1.jar pada library NetBeanIDE
Kode 13.19 JFXSQLLite1.java
1
2
3
4
5
6
7
8
9
10
11
12
package jfxsqllite1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
226
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class JFXSQLLite1 extends Application {
TableView<MHS> tbMHS = new TableView();
@Override
public void start(Stage primaryStage) {
Button btnDB = new Button("createDB");
Button btnTB = new Button("createTable");
Button btnIns = new Button("InserData");
btnDB.setOnAction(e->{
createDB();
});
btnIns.setOnAction(e->{
insertData();
});
btnTB.setOnAction(e->{
createTabel();
});
HBox hb = new HBox();
hb.getChildren().addAll(btnDB,btnTB,btnIns);
VBox vb = new VBox();
227
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
vb.getChildren().addAll(hb,getTbl());
Scene scene = new Scene(vb, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
void createDB(){
Connection c ;
Statement stmt;
try {
Class.forName("org.sqlite.JDBC");
c = DriverManager.getConnection("jdbc:sqlite:test.db");
System.out.println("Opened database successfully");
c.close();
} catch ( ClassNotFoundException | SQLException e ) {
System.err.println( e.getClass().getName() + ": " +
e.getMessage() );
//System.exit(0);
}
System.out.println("Opened database successfully");
}
void createTabel(){
Connection c = null;
Statement stmt = null;
try {
228
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
Class.forName("org.sqlite.JDBC");
c = DriverManager.getConnection("jdbc:sqlite:test.db");
System.out.println("Opened database successfully");
stmt = c.createStatement();
String sql = "CREATE TABLE tbmhs " +
"(idmhs INT PRIMARY KEY NOT NULL," +
" nim TEXT, " +
" nama TEXT, " +
" kota_asal TEXT )";
stmt.executeUpdate(sql);
stmt.close();
c.close();
} catch ( Exception e ) {
System.err.println( e.getClass().getName() + ": " +
e.getMessage() );
//System.exit(0);
}
System.out.println("Create table successfully");
}
void insertData(){
Connection c = null;
Statement stmt = null;
try {
Class.forName("org.sqlite.JDBC");
c = DriverManager.getConnection("jdbc:sqlite:test.db");
System.out.println("Opened database successfully");
stmt = c.createStatement();
String sql = "insert into tbmhs(idmhs,nim,nama,kota_asal)
values (1,'A11.2017.00001','AGUS','SEMARANG') ";
stmt.executeUpdate(sql);
229
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
sql = "insert into tbmhs(idmhs,nim,nama,kota_asal) values
(2,'A11.2017.00002','BUDI','SEMARANG') ";
stmt.executeUpdate(sql);
sql = "insert into tbmhs(idmhs,nim,nama,kota_asal) values
(3,'A11.2017.00003','WATI','SEMARANG') ";
stmt.executeUpdate(sql);
stmt.close();
c.commit();
c.close();
} catch ( Exception e ) {
System.err.println( e.getClass().getName() + ": " +
e.getMessage() );
}
System.out.println("insert data successfully");
}
@SuppressWarnings("CallToPrintStackTrace")
public ObservableList<MHS> getAllMhs(){
Connection c ;
Statement st;
ResultSet rs;
ObservableList<MHS> lmhs=
FXCollections.observableArrayList();
try {
c = DriverManager.getConnection("jdbc:sqlite:test.db");
String sql="select * from tbmhs";
st = c.createStatement();
rs=st.executeQuery(sql);
while(rs.next()){
MHS m = new MHS();
230
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
m.setIdmhs(Integer.parseInt(rs.getString(1)));
m.setNim(rs.getString(2));
m.setNama(rs.getString(3));
m.setKota_asal(rs.getString(4));
lmhs.add(m);
System.out.println(m);
}
} catch (Exception ex) {
System.err.println(ex);
}
return lmhs;
}
public HBox getTbl(){
HBox hb = new HBox();
TableColumn<MHS,Integer> colIdmhs= new TableColumn("ID");
TableColumn<MHS,String> colNim=new TableColumn("NIM");
TableColumn<MHS,String> colNama=new TableColumn("Nama");
TableColumn<MHS,String> colKota_asal=new TableColumn("Kota
Asal");
colIdmhs.setCellValueFactory(new
PropertyValueFactory<>("idmhs"));
colNim.setCellValueFactory(new
PropertyValueFactory<>("nim"));
colNama.setCellValueFactory(new
PropertyValueFactory<>("nama"));
colKota_asal.setCellValueFactory(new
PropertyValueFactory<>("kota_asal"));
colIdmhs.prefWidthProperty().bind(tbMHS.widthProperty().divide(4));
colNim.prefWidthProperty().bind(tbMHS.widthProperty().divide(4));
231
157
158
159
160
161
162
163
164
165
166
colNama.prefWidthProperty().bind(tbMHS.widthProperty().divide(4));
colKota_asal.prefWidthProperty().bind(tbMHS.widthProperty().divide(4)
);
tbMHS.getColumns().addAll(colIdmhs,colNim,colNama,colKota_asal);
tbMHS.setItems(getAllMhs());
hb.getChildren().add(tbMHS);
return hb;
}
}
Kode 13.20 MHS.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package jfxsqllite1;
public class MHS {
private int idmhs;
private String nim;
private String nama;
private String kota_asal;
@Override
public String toString() {
return "MHSM{" + "idmhs=" + idmhs + ", nim=" + nim + ",
nama=" + nama + ", kota_asal=" + kota_asal + '}';
}
public MHS(){
}
public int getIdmhs() {
return idmhs;
}
public void setIdmhs(int idmhs) {
this.idmhs = idmhs;
232
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
}
public String getNim() {
return nim;
}
public void setNim(String nim) {
this.nim = nim;
}
public String getNama() {
return nama;
}
public void setNama(String nama) {
this.nama = nama;
}
public String getKota_asal() {
return kota_asal;
}
public void setKota_asal(String kota_asal) {
this.kota_asal = kota_asal;
}
}
Output
233
BAB 14 GUI DAN MVC CRUD MENGGUNAKAN NETBEANS
Pada bab-bab sebelumnya, untuk membuat program Java kita menggunakan Notepad.
Selain itu kita juga bisa menggunakan text editor yang lain seperti Wordpad, Sublime, Visual
Studio Code, atau yang lain. Untuk compile dan run program menggunakan command
window. Namun, pada bab ini kita bisa menggunakan Java development tools berupa
Integrated Development Evironment (IDE) seperti Netbeans atau Eclipse. IDE itu dapat
digunakan untuk membuat, mengedit, compile, run, dan debugging pemrograman Java
dengan cepat dengan satu tampilan. Sehingga kita dapat meningkatkan produktivitas kita
dalam pemrograman. Berikut cara membuat pemrograman Graphical User Interface (GUI)
Java menggunakan IDE Netbeans.
14.1 Persiapan menggunakan Netbeans
Hal yang pertama diperlukan adalah instalasi, kunjungi website ini Download
Netbeans https://netbeans.org/downloads/8.0.2/ pilih untuk Desktop dan Install. Komponen-
komponen GUI menggunakan Java Swing yang terdiri dari Swing Containers, Swing
Controls, Swing Menus,dan Swing Windows. Di dalam setiap komponen swing terdapat
berbagai macam bentuk seperti pada gambar 14.1.
Gambar 14.1 Komponen dari Java Swing
234
14.2 Java Form
Setelah membuka Netbeans, mari kita membuat Project untuk program kita. Ikuti
langkah-langkah berikut dengan seksama:
1. Klik File – New Project – pilih Java – Java Application – Next – ketik judul project
dengan “MenuForm” – terakhir klik Finish.
Gambar 14.2 Membuat project MenuForm
2. Buat JFrame Form dengan nama “MainMenuForm”. Tambahkan komponen Button,
Label, dan textfield. F2 untuk mengganti keterangan text pada Button/Label/Textfield.
Gambar 14.3 Membuat JFrame Form MainMenuForm
235
3. Rubah nama variabel pada textfield. Nama variabel digunakan sebagai perwakilan dari
komponen UI itu untuk dapat di program. Cara 1: klik pada textfield lihat
property. Cara 2: klik kanan pada textfield Change Variable Name. Beri nama variabel
textfield denga nama “txtNama”. Selain itu untuk label output “Nama saya ...” ganti
nama variabel menjadi “txtOutput”. Button cetak ganti variabelnya menjadi “btnCetak”.
Gambar 14.4 Rubah nama variabel
4. Netbeans menyediakan Event-Listener Otomatis dengan cara double klik pada btnCetak.
Tambahkan kode seperti pada gambar berikut:
Gambar 14.5 Event-Listener Otomatis
5. Run, jadikan MainMenuForm sebagai Main Form.
Gambar 14.6 Hasil output
6. Tambahkan 1 button dengan nama variabel btnPindah dimana 1 button itu
digunakan sebagai navigasi untuk berpindah form. Setelah itu buat Form baru Jframe
Form dengan nama “CreditsForm”. Di dalamnya terdapat txtNama dan btnBack.
txtNama
txtOutput btnCetak
236
Gambar 14.7 Tambah button txtPindah dan JFrame CreditsForm
7. Mari kita kirimkan teks antar form. Buat Method di dalam form MainMenuForm dengan
nama GetNama().
Gambar 14.8 Buat method GetNama() da isi btnPindah di form MainMenuForm
8. Buka CreditsForm, tambahkan konstruktor baru dengan parameter txtNama. Buat
variabel property untuk menampung txtOutput dari Form MainMenuForm.
Gambar 14.9 Buat konstruktor baru di Form CreditsForm
9. Masih di dalam Form CreditsForm, klik kanan pada Form dan tambahkan event seperti
pada gambar 14.10. Tambahkan didalam event listener windowActivated kode:
txtNama.setText(txtNamaDariFormLain). Tambahkan event pada btnBack (double
klik pada btnBack) seperti pada gambar 14.10. Run dan lihat apa yang terjadi!
btnPindah txtNama
btnBack
GetNama()
237
Gambar 14.10 Edit beberapa tempat di Form CreditsForm
14.3 MVC CRUD menggunakan Netbeans
Pada bab 10.6 terdapat konsep tentang Model-View-Controller (MVC). Dimana MVC
adalah sebuah metode untuk membuat sebuah aplikasi dengan memisahkan data (Model) dari
tampilan (View) dan cara bagaimana memprosesnya (Controller). Mari kita implementasikan
bersama.
1. Persiapan database dengan mendownload dan install xampp
https://www.apachefriends.org/index.html Aktifkan Apache local server dan mysql. Buat
database dengan nama db_crud. Buat tabel database dengan nama tblmahasiswa yang
berisi id int(11), nim varchar(20), nama varchar(30), jk varchar(15), dan alamat text.
2. Buat Project dengan nama “CRUD_MVC”. Uncheck create Main Class.
Gambar 14.11 Buat Project dengan nama CRUD_MVC
238
3. Tambahkan Library Mysql dengan cara klik kanan pada Libraries Pilih Add Library
Cari MySQL JDBC Driver Add Library
Gambar 14.12 Tambahkan Library Mysql
4. Siapkan Package/ Folder untuk MVC. Klik kanan pada Source Packages New Java
Packages. Buat package dengan nama “mvc.Controller”, ”mvc.DAO”,
”mvc.DAOInterface”, ”mvc.Koneksi”, ”mvc.Model”, dan “mvc.View”.
Gambar 14.13 Menyiapkan package
5. Buat Class Koneksi didalam package mvc.Koneksi (Klik kanan pada mvc.Koneksi new
Java Class
239
Gambar 14.14 Class Koneksi
6. Buat Class Mahasiswa didalam package mvc.Model. Buatlah property private Integer id,
private String nim, private String nama, private String jk, dan private String alamat.
Setelah itu, blok semua kode diatas klik kanan Refactor Encapsulate Fields
Refactor. Maka akan membuat Getter Setter otomatis.
Gambar 14.15 Getter Setter otomatis
240
7. Buat Class TabelModelMahasiswa.java didalam package mvc.Model.
Gambar 14.16 Class TabelModelMahasiswa.java
8. Buat Class interface Imahasiswa.java didalam package mvc.DAOInterface.
Gambar 14.17 Class interface Imahasiswa.java
241
9. Buat Class DAOMahasiswa.java didalam package mvc.DAO yang berisi CRUD.
242
243
Gambar 14.18 Class DAOMahasiswa.java
10. Buat Form dengan JFrame Form dialam package mvc.View dengan nama
“FormMahasiswa”. Khusus untuk jkel combo box properties Model diganti L,P.
244
Gambar 14.19 GUI dan aturan nama variabel pada FormMahasiswa
• Tambahkan kode sebagai properti:
• ControllerMahasiswa cbt;
• Tambahkan kode didalam Konstruktor FormMahasiswa setelah pemanggilan
initComponents():
• cbt = new ControllerMahasiswa(this);
• cbt.isiTable();
• Tambahkan kode Simpan dengan double klik button Simpan:
• cbt.insert();
• cbt.isiTable();
245
• cbt.reset();
• Tambahkan kode Ubah dengan double klik button Ubah:
• cbt.update();
• cbt.isiTable();
• cbt.reset();
• Tambahkan kode Hapus dengan double klik button Hapus:
• cbt.delete();
• cbt.isiTable();
• cbt.reset();
• Tambahkan kode Batal dengan double klik button Batal:
• cbt.reset();
• Tambahkan kode Cari dengan double klik button Cari :
• cbt.carinama();
• Tambahkan beberapa method berikut , jangan lupa import juga
Gambar 14.20 Tambahan beberapa method di View
246
11. Buat Class ControllerMahasiswa.java didalam package mvc.Controller
247
248
Gambar 14.21 Class ControllerMahasiswa.java
12. Run di FormMahasiswa sebagai Main Class.
14.4 Deploy Aplikasi
Deploy adalah proses untuk menjadikan program bisa digunakan user. Mari ikuti
langkah-langkah berikut ini:
1. Install Inno Setup dengan mendownload di http://www.jrsoftware.org/ Pilih versi yang
terbaru dan bukan Beta. Install lalu tambahkan ke Path, System Environment variabel:
C:\Program Files (x86)\Inno Setup 5 (langkah ini seperti setting javac). Cek di cmd:
cmd.exe /c cmd.exe /k iscc.exe
2. Aktifkan Native Packaging pada Project.. Klik kanan pada project misal: CRUD_MVC
Pilih dan klik Properties. Cari Deployment centang enable native pakaging oke
Gambar 14.22 Proses deployment
249
3. Klik kanan pada project Package as EXE Installer. Tunggu beberapa saat sebab
prosesnya cukup lama.
Gambar 14.23 Packaging (exe)
4. Installer (.exe) saved to:
C:\Users\ASUS\Documents\NetBeansProjects\CRUD_MVC\dist\bundles
Gambar 14.24 Tempat exe tersimpan
14.5 Kesimpulan
Kita bisa menggunakan Java development tools berupa Integrated Development
Evironment (IDE) seperti Netbeans atau Eclipse untuk membuat, mengedit, compile, run, dan
debugging pemrograman Java dengan cepat dengan satu tampilan. Sehingga kita dapat
meningkatkan produktivitas kita dalam pemrograman. Komponen-komponen GUI
menggunakan Java Swing yang terdiri dari Swing Containers, Swing Controls, Swing Menus,
dan Swing Windows.
250
14.6 Kuis dan Latihan Soal
1. Jelaskan alasan kenapa lebih cepat membuat program Java menggunakan IDE
daripada menggunakan text editor?
2. Komponen Java Netbenas apa yang digunakan untuk membuat GUI?
3. Sebutkan 3 isi dari Swing Menus!
14.7 Praktikum
Terdapat suatu event yang diadakan oleh pemerintah yaitu tentang Pendaftaran Duta Coding.
Pemerintah membutuhkan sebuah sistem yang dapat mempermudah User untuk mendaftar
ketika sudah berada ditempat. Sistem itu harus dapat memberikan setidaknya informasi
Nomer KTP atau NIK, Nama, Jenis Kelamin, Tempat Tinggal, Usia, dan Alasan kenapa
mengikuti acara itu . User hanya bisa menginputkan informasi itu . Admin dari
pegawai pemerintah dapat melihat data User, kemudian dapat melakukan edit dan delete.
Perhatikan bahwa user HANYA bisa menginputkan informasi.
Petunjuk: Ada dua form. Satu untuk user dan satu untuk admin. Keduanya terpisah.
Meskipun demikian hanya menggunakan 1 tabel database.
Buat aplikasi CRUD.nya yang sudah terhubung dengan database!
251