KONSEP PEMROGRAMAN Create, Read, Update dan Delete Menggunakan GUI OLEH Zaiful Bahri,S.Si.,M.Kom Dosen Jurusan Ilmu Komputer Universitas Riau Pendahuluan Pada kuliah ini ada beberapa hal yang akan dijelaskan: 1. Pendahuluan 2. Download AppServ Version 9.3.0 3. Instalasi AppServe Version 9.3.0 4. Membuat Database 5. Membuat Tabel 6. Membuat Project 7. Manambahkan Library 8. Membuat Koneksi 9. Menguji Koneksi. Download AppServ Version 9.3.0 Pada bagian ini diberikan gambaran tentang pengolahan data menggunakan GUI Java menggunakan sebuah database. Database yang digunakan adalah MySQl. Di mana database MySQL ini sudah harus ada di komputer Anda. Jika belum ada ikuti langkah-langkah instalasinya. Database MySQL yang digunakan terdapat di dalam AppServ version 9.3.0. Untuk itu perlu mendownload file AppServ tersebut dengan link : https://www.appserv.org/en/download/ Instalasi AppServ 1. Buka file AppServ version 9.3.0. 2. Lakukan instalasi 3. Pada saat diminta untuk membuat password root, silahkan diisi dan kemudian dicatat supaya saat diminta untuk masuk dapat digunakan 4. Setelah selesai instalasinya buka drive C. 5. Lihat pada bagian AppServ di sana terdapat folder Apache24, MySQL, PHP7, PHP5, www dan Uninstall-AppServ9.3.0. Membuat Database 1. Buka browser anda. 2. Kemudian ketikan : http://localhost, maka akan terlihat halaman seperti berikut: Membuat Database Membuat Database 3. Pilih phpMyAdmin Database Manager Version 4.9.1. 4. Selanjutnya akan terlihat halaman seperti berikut: Membuat Database 5. Isikan pada username root dan pada Password isikan password yang anda catat. 6. Di sini anda juga bisa melakukan pemilihan bahasa. 7. Kemudin click Go, ditampilkan halaman sperti berikut: Membuat Database Membuat Database 8. Untuk membuat database silahkan click Baru(new) ata Basis Data. Kemudian akan tampil seperti berikut : 9. Pada bagian Nama basis data silahkan isi dengan penjualan, kemudian click Buat(Create). Membuat Tabel Database 10.Untuk membuat tabel silahkan diisi pada bagian nama tabel dengan produk dan jumlah field/kolom isikan dengan 7: 11.Kemudian click tombol go/kirim. Selajutnya anda diminta untuk membuat nama field/kolom tabel. Membuat Tabel Database 12.Untuk field tabel produk: NO Nama Field/Kolom Length Deskripsi 1. IDProduk Int(11) Primary Key, Auto increament 2. KodeProduk Varchar(32) 3. NamaProduk Varchar(40) 4. Satuan Char(10) 5. Harga Int(11) 6 Stok Int(11) 7 CreateDate datetime 13.Kemudian click tombol kirim. Dan hasilnya adala seperti berikut: Membuat Tabel Database Membuat Tabel Database Membuat Project Untuk membuat project ikuti langkah-langkah berikut: 1. Buka NetBeans anda. 2. Setelah terbuka pilih File->New Project. Maka akan terbuka sebuah jendela baru. 3. Pada bagian Category pilih Java dan pada Project pilih Java Application. Kemudian click Next 4. Pada windows baru atau jendela baru ini isikan pada bagian Application Name dengan Penjualan. 5. Buang tanda centang pada Create Main Class. Kemudian click Finish Membuat Koneksi 6. Untuk membuat koneksi antara Java dan MySQL buat sebuah package dengan nama penjualan dengan cara click kanan pada Source package kemudian New->Java Package. Isi nama packagenya penjualan. Kemudian click Finish. Selanjutnya... 7. Selajutnya click kanan pada package Penjualan, pilih New-> Java Class. Pada Class Name isikan dengan Koneksi. Kemuidan click Finish. 8. Pada panel Project pilih click kanan pada Library->Add Jar/Folder. Kemudian cari dimana letak dari file jar untuk koneksi ke database. File jarnya bisa di download di : https://dev.mysql.com/downloads/connector/j/5.1.html 9. Buat sebuah file Koneksi.java dengan cara click kanan padd package penjualan pilih New->Java Class. Kemudian isikan pada Class Name dengan Koneksi. Selanjutnya Click Finish. Membuat Koneksi 10. Selajutnya ketikan code untuk Koneksi.java. package penjualan; import java.sql.*; import javax.swing.JOptionPane; public class Koneksi { private static Connection KoneksiDatabse; public static Connection koneksiDB() throws SQLException { try { String DB ="jdbc:mysql://localhost/penjualan"; String user="root"; String pass="Zaifulati123"; DriverManager.registerDriver(new com.mysql.jdbc.Driver()); KoneksiDatabse = (Connection) DriverManager.getConnection(DB,user,pass); } catch (Exception e) { JOptionPane.showMessageDialog(null,"Tidak ada koneksi","Error", JOptionPane.INFORMATION_MESSAGE); System.err.println(e.getMessage()); System.exit(0); } return KoneksiDatabse; }} Membuat Koneksi 11. Jika tidak tampil pesan Tidak ada koneksi, maka anda sudah berhasil membuat konkesi antara Java dan Database MySQL dalam hal ini database penjualan. 12. Jika terdapat pesan error Koneksi tidak ada, maka berarti driver MySQL Connector yang anda gunakan tidak sesuai dengan MySQL yang digunakan. Membuat Design Project Pada bagian ini anda diminta untuk membuat sebuah design tampilan(GUI) yang digunakan untuk menambah(Create), Membaca(Read), Mengupdate(Update) dan Menghapus(Delete) data dari tabel produk pada database penjualan yang sudah dibuat. Tampilan yang akan anda buat adalah seperti berikut: Membuat Design Project Membuat Design Project 1. Untuk membuat label Data Produk, pilih Label pada Pallete Swing Controls, kemudian letakan di Frame. Pada Properties gantilah text Jlabel menjadi Data Produk dengan Font 18 Bold. 2. Untuk tombol Tambah Baru, click pada Button pada Pallete Swing Controls, kemudian letakan pada Frame. Gantilah semuah properties yang dibutuhkan pada Pallete Properties. 3. Lakukan juga untuk yang lainnya. 4. Untuk membuat Varibel yang dibutuhkan. Click kanan pada jTextField Kode Produk, kemudian pada Rename isikan New Name dengan nama yang anda sukai. Pada contoh ini, untuk jTextField Kode Produk dibuat nama baru jTextKodeProduk. 5. Untuk Nama dengan jTextNama Membuat Design Project 6. Untuk Field Satuan dengan jComboBoxSatuan 7. Untuk Field Harga dengan jTextHarga 8. Untuk Field Stok dengan jTextStok 9. Untuk Button Tambah Baru dengan jButtonAdd 10. Untuk Button Save dengan jButtonSave 11. Untuk Button Tambah Update dengan jButtonUpdate 12. Untuk Button Tambah Delete dengan jButtonDelete 13. Untuk Button Tambah Cancel dengan jButtonCancel 14. Untuk Table ganti dengan nama TabelProduk Semua nama varibel di atas digunakan di dalam program. Membuat Design Project Berikut adalah file class Produk.java package penjualan; import java.sql.*; import javax.swing.JOptionPane; import javax.swing.table.DefaultTableModel; import java.util.Scanner; import java.awt.*; /** * * @author Hp */ public class Produk extends javax.swing.JFrame { DefaultTableModel tabModel; ResultSet RsProduk=null; Membuat Design Project(Lanjutan) Berikut adalah file class Produk.java public Produk() { initComponents(); Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize(); Dimension frameSize=this.getSize(); if(frameSize.height > screenSize.height){ frameSize.height=screenSize.height; } if(frameSize.width > screenSize.width){ frameSize.width=screenSize.width; } this.setLocation((screenSize.width - frameSize.width) / 2,(screenSize.height = screenSize.height) / 20); //fungsi Tampil data dan set edit off dijalankan saat aplikasi di run tampilData(); SetEditOff(); } Membuat Design Project(Lanjutan) Berikut adalah file class Produk.java public Produk() { initComponents(); Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize(); Dimension frameSize=this.getSize(); if(frameSize.height > screenSize.height){ frameSize.height=screenSize.height; } if(frameSize.width > screenSize.width){ frameSize.width=screenSize.width; } this.setLocation((screenSize.width - frameSize.width) / 2,(screenSize.height = screenSize.height) / 20); //fungsi Tampil data dan set edit off dijalankan saat aplikasi di run tampilData(); SetEditOff(); } Membuat Design Project(Lanjutan) Berikut adalah file class Produk.java //fungsi untuk menampilkan data produk ke dalam tabel private void tampilData(){ try{ Object[] judul_kolom = {"Kode Barang", "Nama Barang", "Satuan", "Harga", "Stok", "Create Date"}; tabModel=new DefaultTableModel(null,judul_kolom); TabelProduk.setModel(tabModel); Connection conn=(Connection)Koneksi.koneksiDB(); Statement stt=conn.createStatement(); tabModel.getDataVector().removeAllElements(); RsProduk=stt.executeQuery("SELECT * from produk "); while(RsProduk.next()){ Object[] data={ RsProduk.getString("KodeProduk"), RsProduk.getString("NamaProduk"), RsProduk.getString("Satuan"), RsProduk.getString("Harga"), RsProduk.getString("Stok"), RsProduk.getString("CreateDate") Membuat Design Project(Lanjutan) Berikut adalah file class Produk.java }; tabModel.addRow(data); } } catch (SQLException ex) { System.err.println(ex.getMessage()); } // disable button jButtonSave.setEnabled(false); jButtonUpdate.setEnabled(false); jButtonDelete.setEnabled(false); jButtonCancel.setEnabled(false); } Membuat Design Project(Lanjutan) Berikut adalah file class Produk.java void tblKeForm(){ jTextKodeProduk.setText(tabModel.getValueAt(TabelProduk.getSelectedRow(),0)+""); jTextNama.setText(tabModel.getValueAt(TabelProduk.getSelectedRow(),1)+""); jComboBoxSatuan.setSelectedItem(tabModel.getValueAt(TabelProduk.getSelectedRow(),2)+""); jTextHarga.setText(tabModel.getValueAt(TabelProduk.getSelectedRow(),3)+""); jTextStok.setText(tabModel.getValueAt(TabelProduk.getSelectedRow(),4)+""); jButtonUpdate.setEnabled(true); jButtonDelete.setEnabled(true); jButtonCancel.setEnabled(true); jButtonSave.setEnabled(false); } Membuat Design Project(Lanjutan) Berikut adalah file class Produk.java //membersihkan form private void BersihData(){ jTextKodeProduk.setText(""); jTextNama.setText(""); jComboBoxSatuan.setSelectedIndex(0); jTextHarga.setText(""); jTextStok.setText(""); } //disable form private void SetEditOff(){ jTextKodeProduk.setEnabled(false); jTextNama.setEnabled(false); jComboBoxSatuan.setEnabled(false); jTextHarga.setEnabled(false); jTextStok.setEnabled(false); } Membuat Design Project(Lanjutan) Berikut adalah file class Produk.java private void seteditOn(){ jTextKodeProduk.setEnabled(true); jTextNama.setEnabled(true); jComboBoxSatuan.setEnabled(true); jTextHarga.setEnabled(true); jTextStok.setEnabled(true); } @SuppressWarnings("unchecked") //File di bawah @SuppressWarnings("unchecked") jgn diubah Membuat Design Project(Lanjutan) //menangani proses saat button add di klik private void jButtonAddActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: BersihData(); jTextKodeProduk.requestFocus(); jButtonSave.setEnabled(true); jButtonUpdate.setEnabled(false); jButtonDelete.setEnabled(false); seteditOn(); } //menangani proses saat button save di klik private void jButtonSaveActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: String KodeProduk=jTextKodeProduk.getText(); String NamaProduk=jTextNama.getText(); String Satuan=jComboBoxSatuan.getSelectedItem().toString(); String Harga=jTextHarga.getText(); String Stok=jTextStok.getText(); Membuat Design Project(Lanjutan) java.util.Date tanggal = new java.util.Date(); java.text.SimpleDateFormat TanggalFormat= new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String CreateDate=TanggalFormat.format(tanggal); if (KodeProduk.isEmpty() ) { JOptionPane.showMessageDialog(null,"Kode produk tidak boleh kosong"); jTextKodeProduk.requestFocus(); }else if (NamaProduk.isEmpty()) { JOptionPane.showMessageDialog(null,"Nama produk tidak boleh kosong"); jTextNama.requestFocus(); }else if (Satuan.isEmpty()) { JOptionPane.showMessageDialog(null,"Satuan produk tidak boleh kosong"); jComboBoxSatuan.requestFocus(); }else if (Harga.isEmpty()) { JOptionPane.showMessageDialog(null,"Harga produk tidak boleh kosong"); jTextHarga.requestFocus(); }else if (Stok.isEmpty()) { JOptionPane.showMessageDialog(null,"Stok produk tidak boleh kosong"); jTextStok.requestFocus(); } Membuat Design Project(Lanjutan) else if (!(new Scanner(Harga).hasNextInt())) { JOptionPane.showMessageDialog(null,"Harga produk harus angka"); jTextHarga.requestFocus(); }else if (!(new Scanner(Stok).hasNextInt())) { JOptionPane.showMessageDialog(null,"Stok produk harus angka"); jTextStok.requestFocus(); }else{ try{ Connection conn=(Connection)Koneksi.koneksiDB(); Statement stt=conn.createStatement(); stt.executeUpdate("insert into produk(KodeProduk,NamaProduk,Satuan,Harga,Stok,CreateDate)"+ "VALUES('"+KodeProduk+"','"+NamaProduk+"','"+Satuan+"','"+Harga+"','"+Stok+"','"+CreateDate+"')"); BersihData(); tampilData(); SetEditOff(); JOptionPane.showMessageDialog(this,"Data berhasil disimpan","Success",JOptionPane.INFORMATION_MESSAGE); } catch(SQLException e){ JOptionPane.showMessageDialog(this,"Simpan data gagal\n"+e.getMessage(),"Error",JOptionPane.ERROR_MESSAGE); } }} Membuat Design Project(Lanjutan) //menangani proses saat button Update di klik private void jButtonUpdateActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: String KodeProduk=jTextKodeProduk.getText(); String NamaProduk=jTextNama.getText(); String Satuan=jComboBoxSatuan.getSelectedItem().toString(); String Harga=jTextHarga.getText(); String Stok=jTextStok.getText(); java.util.Date tanggal = new java.util.Date(); java.text.SimpleDateFormat TanggalFormat= new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String CreateDate=TanggalFormat.format(tanggal); if (KodeProduk.isEmpty() ) { JOptionPane.showMessageDialog(null,"Kode produk tidak boleh kosong"); jTextKodeProduk.requestFocus(); }else if (NamaProduk.isEmpty()) { JOptionPane.showMessageDialog(null,"Nama produk tidak boleh kosong"); jTextNama.requestFocus(); Membuat Design Project(Lanjutan) }else if (Satuan.isEmpty()) { JOptionPane.showMessageDialog(null,"Satuan produk tidak boleh kosong"); jComboBoxSatuan.requestFocus(); }else if (Harga.isEmpty()) { JOptionPane.showMessageDialog(null,"Harga produk tidak boleh kosong"); jTextHarga.requestFocus(); }else if (Stok.isEmpty()) { JOptionPane.showMessageDialog(null,"Stok produk tidak boleh kosong"); jTextStok.requestFocus(); } else if (!(new Scanner(Harga).hasNextInt())) { JOptionPane.showMessageDialog(null,"Harga produk harus angka"); jTextHarga.requestFocus(); }else if (!(new Scanner(Stok).hasNextInt())) { JOptionPane.showMessageDialog(null,"Stok produk harus angka"); jTextStok.requestFocus(); }else{ Membuat Design Project(Lanjutan) try{ Connection conn=(Connection)Koneksi.koneksiDB(); Statement stt=conn.createStatement(); stt.executeUpdate("UPDATE produk SET NamaProduk='"+NamaProduk+"', Satuan='"+Satuan+"', Harga='"+Harga+"',"+ "Stok='"+Stok+"' WHERE KodeProduk='"+KodeProduk+"'"); BersihData(); tampilData(); SetEditOff(); JOptionPane.showMessageDialog(this,"Data berhasil diubah","Success",JOptionPane.INFORMATION_MESSAGE); } catch(SQLException e){ JOptionPane.showMessageDialog(this,"Ubah data gagal\n"+e.getMessage(),"Error",JOptionPane.ERROR_MESSAGE); } } } Membuat Design Project(Lanjutan) //menangani proses saat button delete di klik private void jButtonDeleteActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: String KodeProduk=jTextKodeProduk.getText(); if (KodeProduk.isEmpty() ) { JOptionPane.showMessageDialog(null,"Kode produk tidak boleh kosong"); jTextKodeProduk.requestFocus(); }else if(JOptionPane.showConfirmDialog(null,"Apakah anda yakin akan menghapus data ini?", "Informasi",JOptionPane.OK_CANCEL_OPTION,JOptionPane.INFORMATION_MESSAGE)==JOptionPane.OK_OPTION){ try{ Connection conn=(Connection)Koneksi.koneksiDB(); Statement stt=conn.createStatement(); stt.executeUpdate("DELETE FROM produk WHERE KodeProduk='"+KodeProduk+"'"); BersihData(); tampilData(); SetEditOff(); JOptionPane.showMessageDialog(this,"Data berhasil di hapus","Success",JOptionPane.INFORMATION_MESSAGE); } catch(SQLException e){ JOptionPane.showMessageDialog(this,"Delete data gagal\n"+e.getMessage(),"Error",JOptionPane.ERROR_MESSAGE); } }} Membuat Design Project(Lanjutan) //menangani proses saat button cancel di klik private void jButtonCancelActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: BersihData(); jButtonSave.setEnabled(false); jButtonUpdate.setEnabled(false); jButtonDelete.setEnabled(false); SetEditOff(); } //menangani proses saat tabel produk di klik private void TabelProdukMouseClicked(java.awt.event.MouseEvent evt) { // TODO add your handling code here: seteditOn(); jTextKodeProduk.setEnabled(false); tblKeForm(); } Membuat Design Project(Lanjutan) private void jComboBoxSatuanActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: } Membuat Design Project(Lanjutan) // Variables declaration - do not modify private javax.swing.JTable TabelProduk; private javax.swing.JButton jButtonAdd; private javax.swing.JButton jButtonCancel; private javax.swing.JButton jButtonDelete; private javax.swing.JButton jButtonSave; private javax.swing.JButton jButtonUpdate; private javax.swing.JComboBox jComboBoxSatuan; private javax.swing.JLabel jLabelHarga; private javax.swing.JLabel jLabelHeader; private javax.swing.JLabel jLabelKodeProduk; private javax.swing.JLabel jLabelNama; private javax.swing.JLabel jLabelSatuan; private javax.swing.JLabel jLabelStok; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JTextField jTextHarga; private javax.swing.JTextField jTextKodeProduk; private javax.swing.JTextField jTextNama; private javax.swing.JTextField jTextStok; // End of variables declaration } Membuat Design Project(Lanjutan) Berikut adalah file class File Penjualan.java package penjualan; /** * * @author Hp */ public class Penjualan { /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here } } Menjalankan Project Penjualan Untuk menjalankan projec Penjualan ini lakukan langkah-langka berikut: 1. Click kanan pada Project Penjualan. 2. Pilih Properties 3. Pilih Run 4. Pada Main Class pilih penjulan.Produk. Kalau tidak ada silahkan diclick Browse. Kemudian telusuri penjualan.Produk. 5. Jika ketemu silahkan pilih dan click tombol Select Main Class. 6. Kemudian click Ok. 7. Lihat gambar berikut: Menjalankan Project Penjualan Hasil Project Penjualan Berikut adalah tampilan awal aplikasi dengan beberapa data yang sudah ditambahkan. Jika belum ada data yang ditambahkan, maka pada tabel akan terlihat kosong. Terliah semua field dimatikan(disable) Hasil Project Penjualan Jika tombol Tambah baru diclick, maka akan tampil seperti berikut: Terlihat bahwa tombol Save diaktifkan(Enable). Sudah siap untuk menambah data baru. Hasil Project Penjualan Berikut data baru ditambahkan: Kemudian click tombol simpan. Maka data tersimpan ke tabel dan ditampilkan di tabel sebelah kanan. Hasil Project Penjualan Berikut data baru ditambahkan: Data sudah ditambahkan dengan pesan “Data berhasil disimpan”. Stelah data ditambahkan Form Tambah Data akan dikosongkan dan dissable. Hasil Project Penjualan Untuk melakukan Update, Delete dan Cancel, silahkan click pada baris isi tabel. Maka tombol Update, Delete dan Cancel langsung di-Enable. Di sini bisa dilakukan Update, Delete dan Cancel data. Hasil Project Penjualan Berikut dilkukan Update data dengan mengganti Gunting dengan Cutter dan Stok dari 40 menjadi 20 Click tombol Update, maka akan tampil: Hasil Project Penjualan Kemudian click tombol OK. Maka hasilnya adalah seperti berikut: Hasil Project Penjualan Untuk menghapus data silahkan click pada salah satu baris data. Kemudian click tombol Delete, maka ada konfirmasi. Hasil Project Penjualan Di atas terpilih data dengan kode 122. Jika tombol Delete di-click, maka tampil seperti berikut: Hasil Project Penjualan Jika pilihan adalah Cancel, maka tampilan seperti berikut: Hasil Project Penjualan Jika pilihan adalah OK, maka tampilan seperti berikut: Hasil Project Penjualan Jika pilihan adalah OK, maka tampilan seperti berikut: Hasil Project Penjualan Tampil pesan “Data berhasil dihapus”. Pilih OK, maka tampil seperti berikut: Hasil Project Penjualan Untuk lebih sempurnanya, tambahkan sebuah JTextField baru dengan nama variabel jTextCari. Kemudian buatlah sebuah fungsi untuk mencari data yang ada di dalam tabel. Ini sangan berguna, jika data sudah banyak, sehingga tidak bisa ditampilkan semuanya. Oleh karena itu diperlukan sebuah fitur baru yaitu fitur pencarian data. Tampilan aplikasi/project menjadi seperti berikut: Hasil Project Penjualan Dengan Fitur Pencarian Data Hasil Project Penjualan Dengan Fitur Pencarian Data Untuk kesempurnaan aplikasi/project, tambahkan dua buah fungsi di dalam file Produk.java. Pertama funsi cariData(String key) private void cariData(String key){ try{ Object[] judul_kolom = {"Kode Barang", "Nama Barang", "Satuan", "Harga", "Stok", "Create Date"}; tabModel=new DefaultTableModel(null,judul_kolom); TabelProduk.setModel(tabModel); Connection conn=(Connection)koneksi.koneksiDB(); Statement stt=conn.createStatement(); tabModel.getDataVector().removeAllElements(); RsProduk=stt.executeQuery("SELECT * from produk WHERE KodeProduk LIKE '%"+key+"%' OR NamaProduk LIKE '%"+key+"%' OR Satuan LIKE '%"+key+"%'"); while(RsProduk.next()){ Object[] data={ Hasil Project Penjualan Dengan Fitur Pencarian Data RsProduk.getString("KodeProduk"), RsProduk.getString("NamaProduk"), RsProduk.getString("Satuan"), RsProduk.getString("Harga"), RsProduk.getString("Stok"), RsProduk.getString("CreateDate") }; tabModel.addRow(data); } } catch (Exception ex) { System.err.println(ex.getMessage()); } } Hasil Project Penjualan Dengan Fitur Pencarian Data Kedua tambahkan fungsi dengan cara click kanan pada jTextCari pilih Events->Key->keyRealised. Setelah itu tambahkan kode berikut di antaranya atau seperti sebaelah kanan: String key=jTextPencarian.getText(); System.out.println(key); if(key!=""){ cariData(key); }else{ tampilData(); } Hasil Project Penjualan Dengan Fitur Pencarian Data Jalankan program dan cobalah untuk mengetikan sesuatu di dalam kotak jTextCari. Tugas untuk proyek UAS. Buatlah sebuah sistem informasi dengan tampilan seperti berikut: Design Project UAS