oop[5] - graphical user interface & events

23
MODUL 5 Graphical User Interface (GUI) & Events Tujuan Praktikum 1. Memahami Konsep Graphical User Interface 2. Membuat interface aplikasi dengan berbasiskan GUI 3. Memahami dan Menerapkan Action Listener 4. Praktikan mampu mengimplementasikan GUI serta event Landasan Teori Graphical User Interface (GUI) adalah tampilan-interface grafis pada suatu aplikasi yang berfungsi untuk menjadi perantara antara pengguna dengan suatu program. Pada pemograman Java terdapat komponen untuk membangun GUI. Salah satu komponen yang dapat digunakan adalah Swing yang didefinisikan dalam package javax.swing. Figure 5.1 - Components of the javax.swing package

Upload: gredy-ramadhany

Post on 30-Jan-2016

52 views

Category:

Documents


1 download

DESCRIPTION

OOP[5] - Graphical User Interface & Events

TRANSCRIPT

Page 1: OOP[5] - Graphical User Interface & Events

MODUL 5 Graphical User Interface (GUI) & Events

Tujuan Praktikum1. Memahami Konsep Graphical User Interface 2. Membuat interface aplikasi dengan berbasiskan GUI 3. Memahami dan Menerapkan Action Listener 4. Praktikan mampu mengimplementasikan GUI serta event

Landasan TeoriGraphical User Interface (GUI) adalah tampilan-interface grafis pada suatu aplikasi yang berfungsi untuk menjadi perantara antara pengguna dengan suatu program. Pada pemograman Java terdapat komponen untuk membangun GUI. Salah satu komponen yang dapat digunakan adalah Swing yang didefinisikan dalam package javax.swing.

Figure 5.1 - Components of the javax.swing package

Page 2: OOP[5] - Graphical User Interface & Events

1. JFrameClass ini digunakan untuk menampilkan Main Windows (Form/Jendela Utama) sebagai Top-Level-Container untuk menampung JComponent aplikasi GUI lainnya. Luas atau besarnya sebuah JFrame diatur melalui width-height.Contoh Penggunaan JFrame :

package modul5;import javax.swing.JFrame;

public class ExampleJFrame {private JFrame contohFrame;

public ExampleJFrame(){contohFrame = new JFrame();

}

public void launchFrame(){//Set Title FramecontohFrame.setTitle("Contoh Frame");//Menetapkan Ukuran (Width,Height)contohFrame.setSize(400,200);//Mengatur Agar Besar JFrame tak dapat di resizecontohFrame.setResizable(false);contohFrame.setVisible(true);

}

public static void main(String[] args) {ExampleJFrame a = new ExampleJFrame();a.launchFrame();

}}

Output :

2. JComponentComponent diletakan di dalam JFrame, dimana Frame bertindak sebagai Container. Pada Penggunaan JContainer jika pemilihan jenis layout di set null dikenal .setSize(width, height) dan .setLocation(x,y), atau dapat menggunakan .setBounds(x,y,width,height)

yang mewakili function diatas.Berikut Ilustrasi nya :

Page 3: OOP[5] - Graphical User Interface & Events

Pada Ilustrasi diatas dicontohkan, sebuah JFrame berukuran 400x200 (WidthxHeight) dengan sebuah JComponent JLabel dengan nama Label0 didalamnya yang berukuran 75x40 dan diletakan di .setLocation(75,50) atau dengan .setBounds dapat kita tuliskan Label0.setBounds(75,40,75,50);

a. JLabelClass JLabel berfungsi menampilkan teks String dan Icon di GUI. JLabel bersifat read-only tanpa behavior, yang berarti tidak akan berubah jika terjadi pemrosesan event.

package modul5;import javax.swing.JFrame;import javax.swing.JLabel;import java.awt.Font;

public class ExampleJLabel extends JFrame{JFrame contohFrame;JLabel Header,label0;

public ExampleJLabel(){/*Set ukuran ,jenis layout, title frame*/getContentPane().setLayout(null);setSize(300, 300);setTitle("Example01");contohFrame = new JFrame();

//Inisialisasi JLabelHeader = new JLabel("Contoh Label");Header.setFont(new Font("Tahoma", Font.PLAIN, 20));Header.setLocation(50,30);Header.setSize(200,100);

label0 = new JLabel("Hello World");label0.setLocation(150,100);label0.setSize(100,50);

//CallgetContentPane().add(Header);getContentPane().add(label0);contohFrame.setVisible(true);

}

public static void main(String[] args) {ExampleJLabel example = new ExampleJLabel();

}}

Page 4: OOP[5] - Graphical User Interface & Events

b. JTextField, JPasswordField dan JTextAreaJTextField dan JPasswordField adalah Class yang digunakan untuk menampilkan, menampung, dan menuliskan teks sebagai input atau output. Perbedeaan antara JTextField dengan JPasswordField yaitu penampilan teks dengan format asterisk (*) pada JPasswordField.

package modul5;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JTextArea;import javax.swing.JPasswordField;import javax.swing.JTextField;import java.awt.Font;

public class ExampleJText extends JFrame{JFrame contohFrame;JLabel label0,label1,label2;JTextField Username;JPasswordField Password;JTextArea Detail;

public ExampleJText(){/*Set ukuran ,jenis layout, title frame*/getContentPane().setLayout(null);setSize(650, 400);setTitle("Example01");contohFrame = new JFrame();

//Inisialisasi//Penggunaaan JTextFieldlabel0 = new JLabel("Username");label0.setBounds(110, 125, 100, 30);Username = new JTextField(10);Username.setBounds(230, 125, 155, 30);

//Penggunaan Password Fieldlabel1 = new JLabel("Password");label1.setBounds(110, 165, 100, 30);Password = new JPasswordField(10);Password.setBounds(230, 165, 155, 30);

//Penggunaan Text Arealabel2 = new JLabel("Alamat");label2.setBounds(110, 205, 100, 30);Detail = new JTextArea();Detail.setLocation(230, 205);Detail.setSize(250,125) ;

//CallgetContentPane().add(label0);getContentPane().add(label1);getContentPane().add(label2);getContentPane().add(Username);getContentPane().add(Password);getContentPane().add(Detail);setVisible(true);

}

public static void main(String[] args) {ExampleJText example1 = new ExampleJText();

}}

Page 5: OOP[5] - Graphical User Interface & Events

c. JButton, JCheckBox dan JRadioButtonJButton merupakan JComponent berbentuk tombol yang terdiri dari beberapa tipe, yaitu command button, toggle button, check boxes, dan radio button. Command button men-trigger ActionEvent ketika diklik.

JComponent, JCheckBox dan JRadioButton memiliki nilai on/off atau true/false. Pada JCheckBox mengubah nilai ItemEvent. Pengubahan nilai ItemEvent ini ditangani oleh interface ItemListener yang mendefinisikan method itemStateChanged. Method getStateChange pada kelas ItemEvent mengembalikan nilai integer ItemEvent.Selected atau ItemEvent.DESELECTED.

Sedangkan JRadioButtons memiliki dua status yaitu selected dan deselected. Pada umumnya radio button ditampilkan dalam sebuah buttonGroup. Hanya satu radio button di dalam suatu grup yang dapat dipilih pada satu waktu. Pemilihan satu button menyebabkan button lain berstatus off.

package modul5;import javax.swing.DefaultComboBoxModel;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JButton;import javax.swing.JCheckBox;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JRadioButton;import javax.swing.ButtonGroup;import java.awt.Font;

public class ExampleJButton extends JFrame{JFrame contohFrame;JLabel JK,Hobi;JButton button;JRadioButton radio1,radio2;JCheckBox check1,check2;private final ButtonGroup buttonGroup = new ButtonGroup();

Page 6: OOP[5] - Graphical User Interface & Events

public ExampleJButton(){/*Set ukuran ,jenis layout, title frame*/getContentPane().setLayout(null);setSize(650, 350);setTitle("Example01");contohFrame = new JFrame();

//Inisialisasi//radioButtonJK = new JLabel("JK :");JK.setBounds(110, 100, 100, 30);radio1 = new JRadioButton("Pria");radio1.setBounds(230, 100, 90, 20);buttonGroup.add(radio1);radio2 = new JRadioButton("Wanita"); radio2.setBounds(400, 100, 90, 20);buttonGroup.add(radio2);

//checkboxHobi = new JLabel("Hobby :");Hobi.setBounds(110, 150, 100, 30);check1 = new JCheckBox("Programming");check1.setBounds(230, 150, 150, 20);check2 = new JCheckBox("Design");check2.setBounds(400, 150, 150, 20);

//Button/*Set Button Submit */button = new JButton("Submit");button.setBounds(350,200,140,50);

//Call getContentPane().add(JK);getContentPane().add(Hobi);getContentPane().add(radio1);getContentPane().add(radio2);getContentPane().add(check1);getContentPane().add(check2);getContentPane().add(button);setVisible(true);

}

public static void main(String[] args) {ExampleJButton example1 = new ExampleJButton();

}}

Page 7: OOP[5] - Graphical User Interface & Events

d. JComboBoxJComboBox merupakan komponen GUI yang berfungsi untuk menampilkan daftarListitem. Penggunaan konstuktor dari JComboBox adalah sebagai berikut:

JcomboBox(arrayOfNames);

Setiap item di JComboBox diberi indeks numerik. Elemen pertama diberi indeks 0 dan elemen tersebut dimunculkan sebagai item yang dipilih pada saat instance JComboBox tampil untuk pertama kalinya.

Method penting JComboBox adalah sebagai berikut : getSelectedIndex() mengembalikan indeks dari item yang sedang dipilih setMaximumRowCount(n) menentukan jumlah maksimum elemen yang

ditampilkan ketika pengguna mengklik instance JComboBox. Scrollbar secara otomatis dihasilkan.

package modul5;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JMenu;import javax.swing.DefaultComboBoxModel;import java.awt.Font;

public class ExampleJComboBox extends JFrame{JFrame contohFrame;JLabel ItemList;JComboBox ListMobil;

public ExampleJComboBox(){/*Set ukuran ,jenis layout, title frame*/getContentPane().setLayout(null);setSize(600, 200);setTitle("Example01");contohFrame = new JFrame();

//inisiaslisasi//comboboxItemList = new JLabel("Pilihan Mobil :");ItemList.setBounds(110, 75, 100, 30);;ListMobil = new JComboBox();

ListMobil.setModel(new DefaultComboBoxModel(new String[] {"Nissan Skyline GT-R","Toyota Supra","Lambhrogini","Chevrolet Camaro","Honda Civic"

}));ListMobil.setBounds(230, 75, 200, 30);

//Call JLabelgetContentPane().add(ItemList);getContentPane().add(ListMobil);

setVisible(true);}

public static void main(String[] args) {ExampleJComboBox example1 = new ExampleJComboBox();

}}

Page 8: OOP[5] - Graphical User Interface & Events

e. JMenuBarMenu merupakan bagian penting dalam GUI. Objek menu dapat dikonfigurasi dan diberikan action menggunakan ActionListener, Menu juga dapat mempunyai ActionEvents.

package modul5;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import java.awt.Font;

public class ExampleJMenu extends JFrame{JFrame contohFrame;JMenuBar menu;JMenu file, help;JMenuItem newMenu, openMenu, exitMenu, helpMenu;

public ExampleJMenu(){/*Set ukuran ,jenis layout, title frame*/getContentPane().setLayout(null);setSize(300, 200);setTitle("Example01");contohFrame = new JFrame();

//inisiaslisasi MenuBarmenu = new JMenuBar();//Instaniasi Menu file = new JMenu("File");help = new JMenu("Help");//instantiasi item dari menunewMenu = new JMenuItem("New");openMenu = new JMenuItem("Open");exitMenu = new JMenuItem("Exit");helpMenu = new JMenuItem("Help");

setJMenuBar(menu);menu.add(file);menu.add(help);file.add(newMenu);file.add(openMenu);file.addSeparator();file.add(exitMenu);help.add(helpMenu);

setVisible(true);}

Page 9: OOP[5] - Graphical User Interface & Events

public static void main(String[] args) {ExampleJMenu example1 = new ExampleJMenu();

}}

3. Layout Manager Layout Manager berfungsi menyusun komponen GUI di atas container. Penggunaan layout memberikan kemudahan dibandinkan dengan menentukan ukuran eksak dan posisi setiap komponen. Pada layout manager, komponen diletakan dari kiri ke kanan dan lalu ke baris berikutnya. Komponen dapat diletakan dengan cara rata kiri, di tengah, ataupun rata kanan. Nilai defaultnya adalah di tengah. Tipe-tipe layout dapat berupa FlowLayout, BorderLayout, GridLayout.

a. FlowLayout FlowLayout adalah layout yang menyusun komponen dari kiri ke kanan, selanjutnya ke baris berikutnya. Jika ukuran windows diperbesar ukuran komponen pada FlowLayout tidak berubah. Method-method penting dari FlowLayout adalah sebagai berikut :

setAlignment(position_CONSTANT); method untuk menentukan posisi layout. Nilai positition_CONSTANT dapat berupa FlowLayout.LEFT, FlowLayout.CENTER, atau FlowLayout.RIGHT, yang masing-masing mengatur posisi rata kiri, rata tengah, atau rata kanan.

layoutContainer(container): method untuk melakukan update container

Page 10: OOP[5] - Graphical User Interface & Events

package modul5;import javax.swing.*;import java.awt.*;

public class FlowLayoutTest extends JFrame {public FlowLayoutTest(){

super("Contoh Flow Layout");FlowLayout lay = new FlowLayout();lay.setAlignment(FlowLayout.RIGHT);lay.setVgap(25);//mengatur jarak vertikal antar komponenlay.setHgap(25);//mengatur jarak horisontal antar komponenContainer x = getContentPane();x.setLayout(lay);

//inisialisasiJButton t1 = new JButton("Tombol terpanjang no 1");JButton t2 = new JButton("Tombol 2");JButton t3 = new JButton("Tombol 3");JButton t4 = new JButton("Tombol 4");JButton t5 = new JButton("Tombol 5");JButton t6 = new JButton("Tombol 6");

//callx.add(t1);x.add(t2);x.add(t3);x.add(t4);x.add(t5);x.add(t6);

}

public static void main(String[] args){FlowLayoutTest flt = new FlowLayoutTest();

flt.setSize(500, 200);flt.setVisible(true);

}}

b. BorderLayout BorderLayout merupakan default manager untuk ContentPane. Layout ini menyusun komponen ke dalam 5 region, yaitu north, south, east, west, dan center. Komponenkomponen dapat diletakan pada:

North/South. Komponen di region ini dapat diperluas secara horisontal. East/West. Komponen di region ini dapat diperluas secara vertikal Center. Komponen di region ini dapat diperluas secara vertikal dan horizontal

Method-method penting yang dapat digunakan pada BorderLayout adalah sebagai berikut:

Konstuktor BorderLayout(hGap, vGap). Argumen hGap adalah ukuran gap horisontal antar region. Argumen vGap adalah ukuran gap vertikan antar region. Nilai defaultnya adalah 0 baik untuk vertikal maupun horizontal

myContainer.add(component, position) menambahkan komponen ke layout. Argaumen component menunjukan komponen yang ditambahkan ke layout, sedangkan argumen position menunjukan posisi peletakan komponen, sebagai contoh BorderLayout.NORTH, BorderLayout.South, BorderLayout.EAST, BorderLayout.WEST, ataupun BorderLayout.CENTER.

Page 11: OOP[5] - Graphical User Interface & Events

package modul5;

import javax.swing.JFrame;import javax.swing.JButton;import java.awt.BorderLayout;

public class DemoBorderLayout{private static void BorderLayout(){

JFrame frame = new JFrame("BorderLayout");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JButton North = new JButton("North");JButton South = new JButton("South");JButton Center = new JButton("Center");JButton West = new JButton("West");JButton East = new JButton("East");

frame.getContentPane().add(North, BorderLayout.NORTH);frame.getContentPane().add(Center, BorderLayout.CENTER);frame.getContentPane().add(South, BorderLayout.SOUTH);frame.getContentPane().add(West, BorderLayout.WEST);frame.getContentPane().add(East, BorderLayout.EAST);

frame.pack();frame.setVisible(true);

}

public static void main(String[] args){javax.swing.SwingUtilities.invokeLater(new Runnable(){

public void run(){BorderLayout();

}});

}}

C. GridLayout GridLayout membagi Container ke dalam suatu grid. Komponen diletakan dalam suatu baris dari kolom dam memiliki ukuran lebar dan tinggi yang sama. Komponenkomponen ditambahkan mulai dari kiri atas, selanjutnya ke kanan. Jika baris sudah penuh, maka komponen diletakkan di baris selanjutnya, kemudian dari kiri ke kanan. Konstruktor GridLayout adalah sebagai berikut :

GridLayout(rows, columns, hGap, vGap). Konstruktor ini mendefinisikan jumlah baris, kolom, dan ukuran gap horisontal maupun vertikal antar elemen dalam satuan pixel;

Page 12: OOP[5] - Graphical User Interface & Events

Gridlayout(rows, columns). Sama halnya dengan konstruktor pertama, namun dengan nilai default hGap and vGap sama dengan 0.

package modul5;import javax.swing.*;import java.awt.*;

public class GridLayoutDemo extends JFrame{private JButton tombol[];private String m[] = {"Satu","Dua","Tiga","Empat","Lima","Enam"};private Container c;private GridLayout g;

public GridLayoutDemo(){super("GridLayout");g = new GridLayout(2,3,5,5);c = getContentPane();c.setLayout(g);

tombol = new JButton[m.length];

for(int i = 0; i<m.length;i++){tombol[i] = new JButton(m[i]); c.add(tombol[i]);

}

setSize(300,300);show();

}

public static void main(String[] args) {GridLayoutDemo Grid = new GridLayoutDemo();

}}

Page 13: OOP[5] - Graphical User Interface & Events

c. EventsPerubahan state atau keadaan sebuah JComponent dinamakan Event. Event dihasilkan dari hasil interaksi user dengan JComponent. Sebagai contoh : MenekanButton, MemindahkanKursor, MemasukanKarakterMelauiKeyboard, MemilihItemDariList adalah aktivitas yang men-trigger Events

Event HandlingEvent Handling adalah sebuah mekanisme yang mengkontrol event dan menentukan “apa yang terjadi” pada saat event berlangsung. Java menggunakan Delegation Event Model, untuk menghandle event.

Delegation Event ModelMemiliki komponen sebagai berikut :

Source, adalah Objek dimana Event berlangsung. Source bertanggungjawab untuk memberikan informasi terkait Event yang terjadi kepada Handler.

Listenerdikenal sebagai handler.Listener, bertanggungjawab untuk men-generate respon terhadap Event. Berdasarkan konsep pada Java Listener juga merupakan sebuah Objek. Listener bersifat pasif, menunggu event ter-trigger, ketika trigger aktif Listener memproses Event dan Mengubah objek Source.

Kelebihan dari Pendekatan ini ialah GUI Logic dengan Event Logic terpisah sehingga sebuah pada sebuah Source-Objek diperlukan ada nya inisialisasi Listener mana yang akan aktif, sehingga pemrosesan event lebih efisien.

Fase :Contoh Pemrosesan Event dengan Trigger JButton

Set FrameJFrame frame = new JFrame("app");frame.setSize(200, 100);frame.setVisible(true);

Insialisasi Button : JButton butt = new JButton("Click me!"); Tambahkan Button : frame.add(butt); Membuat Class Listener

class Listener implements ActionListener {public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null, "done!");}

} Menambahkan Action Listener

ActionListener listener = new Listener();butt.addActionListener(listener);

Page 14: OOP[5] - Graphical User Interface & Events

Perhatikan Contoh Berikut :

package javaIO;import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel;

public class theMain extends JFrame implements ActionListener { /*Perhatikan bahwa class theMain di atas terdapat tambahan baru, yaitu *implements ActionListener. Tujuannya adalah JFrame theMain dapat *”merespon" segala jenis klik dari JButton. */

JLabel headerLabel,statusLabel;JButton gantiTitle; theMain() { //tata letak form setLayout(null); // Menentukan ukuran form dalam satuan pixel LebarxTinggi setSize(400, 400); setVisible(true); // Agar form muncul //Komponen headerLabel = new JLabel("Jbutton Events"); statusLabel = new JLabel("Proses : Null");//Membuat button JButton gantiTitle = new JButton("SetTitle"); JButton okButton = new JButton("OK"); JButton submitButton = new JButton("Submit"); JButton cancelButton = new JButton("Cancel"); //Mengatur ukuran button(koordinat X, koordinat Y, panjang, lebar) headerLabel.setBounds(140, 75, 100, 50); statusLabel.setBounds(140, 275, 200, 50); gantiTitle.setBounds(65, 175, 100, 25); okButton.setBounds(185, 175, 100, 25); submitButton.setBounds(65, 225, 100, 25); cancelButton.setBounds(185, 225, 100, 25);

//Memasukkan button ke dalam form add(headerLabel); add(statusLabel); add(gantiTitle); add(okButton); add(submitButton); add(cancelButton); //Men-Registrasi Event pada Button

gantiTitle.addActionListener(this); okButton.setActionCommand("OK"); submitButton.setActionCommand("Submit"); cancelButton.setActionCommand("Cancel");

okButton.addActionListener(new ButtonClickListener()); submitButton.addActionListener(new ButtonClickListener()); cancelButton.addActionListener(new ButtonClickListener());

}

Page 15: OOP[5] - Graphical User Interface & Events

public static void main(String[] args) { new theMain(); } /* * fungsi actionPerformed ini adalah autogenerate ketika * JFrame di atas mengimplementasikan ActionListener * * Selalu perhatikan tanda seru/silang yang ada di * eclipse kalian. */ @Override public void actionPerformed(ActionEvent arg0) { //Di bawah ini terdapat fungsi yang akan dijalankan

//Mengganti judul/title form this.setTitle("Prodase!"); } private class ButtonClickListener implements ActionListener{

public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); if( command.equals( "OK" )) { statusLabel.setText("Proses Berhasil"); } else if( command.equals( "Submit" ) ) { statusLabel.setText("Submit Berhasil."); } else { statusLabel.setText("Proses Dibatalkan"); } } } }

Page 16: OOP[5] - Graphical User Interface & Events

Contoh lain, form sendiri (JFrame) juga bisa terjadi event, menggunakan implementasi WindowListener. Ketika mengimplementasi WindowListener, maka otomatis akan tergenerate fungsi berikut :

Maka ketika program dijalankan, console akan mengeluarkan tulisan “windowActivated” dan “windowOpened”, serta ketika form di tutup maka akan menampilkan tulisan “windowClosing” dan “windowDeactivated”.

Page 17: OOP[5] - Graphical User Interface & Events

Penggunaan :

package javaIO;

import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import javax.swing.JFrame; public class ExampleEvent extends JFrame implements WindowListener {

private static final long serialVersionUID = -3090893483416423354L;

ExampleEvent() { setLayout(null); // AbsoluteLayout setSize(300, 200); // Menentukan ukuran form dalam satuan pixel setVisible(true); // Menampakkan Form addWindowListener(this); }

public static void main(String[] args) { new ExampleEvent(); } @Override public void windowActivated(WindowEvent arg0) { System.out.println("windowActivated"); } @Override public void windowClosed(WindowEvent arg0) { System.out.println("windowClosed"); } @Override public void windowClosing(WindowEvent arg0) { System.out.println("windowClosing"); } @Override public void windowDeactivated(WindowEvent arg0) { System.out.println("windowDeactivated"); } @Override public void windowDeiconified(WindowEvent arg0) {

System.out.println("windowDeiconified"); } @Override public void windowIconified(WindowEvent arg0) {

System.out.println("windowIconified"); } @Override public void windowOpened(WindowEvent arg0) { System.out.println("windowOpened"); } }

Page 18: OOP[5] - Graphical User Interface & Events

Handling Mouse Events Mouse event dianalogikan seperti interaksi user saat menggerakkan mouse ( moving ) , dragging mouse ( menggerakkan mouse sambil menekan mouse button ) dan mengklik mouse button.

Untuk menangani mouse event ,kita harus mengimplementasikan salah satu interface berikut

1. MouseListener Mouse Listener merupakan sebuah interface yang digunakan untuk menangani reaksi event yang terjadi pada penekanan tombol mouse

2. MouseMotionListener MouseMotionListener adalah sebuah interface yang digunakan untuk menangani reaksi event dari suatu pergerakan mouse terhadap komponen

3. MouseWheelListener MouseWheelListener adalah sebuah interface untuk menangani reaksi event scroll pada mouse

Jika salah satu interface telah diimplementasikan ,maka kita juga harus menggunakan method method yang ada dalam interface tersebut. Method / event yang terdapat pada MouseListener adalah mouseClicked() yaitu method untuk menangani aksi saat mouse diklik dengan syarat

kode dalam mouseRelease tidak dijalankan mousePressed() yaitu method untuk menangani aksi saat menekan mouse mouseReleased() yaitu method untuk menangani aksi saat melepas button mouse. mouseEntered() yaitu method untuk menangani aksi saat cursor mouse masuk

kewilayah komponen mouseExited() yaitu method untuk menangani aksi saat cursor mouse keluar dari

wilayah komponen

Method / event yang terdapat pada MouseMotionListener adalah mouseMoved() yaitu method yang menangani aksi ketika pointer digerakkan mouseDragged()yaitu method yang menangani aksi mouse ketika didrag dan drop

Method / event yang terdapat pada MouseWheelListener adalah mouseWheelMoved()

Kita bisa mendapatkan koordinat x dan y ,ketika mouse ditekan dengan menggunakan 2 methods yang terdapat pada class MouseEvent . Methods tersebut adalah

int get(x) : untuk mendapatkan koordinat x int get(y) : untuk mendapatkan koordinat y

Tips : Biasakan untuk menulis semua variabel komponen di dalam class, bukan di dalam

method, agar semua method dapat memanipulasi komponen tersebut.

Page 19: OOP[5] - Graphical User Interface & Events

Latihan :Rental mobil Prodase ingin membuat aplikasi peminjaman mobil, anda sebagai mahasiswa Sistem Informasi diminta membuat GUI yang berisi Beranda,dan Halaman Registrasi Member

Buatlah Aplikasi tersebut!

Berikut Beberapa Ketentuan Mengenai Aplikasi : Tombol Registrasi pada Frame Beranda Jika ditekan akan men-trigger, halaman Registrasi untuk

muncul, menggantikan halaman beranda Pada halaman Registrasi, Jika tombol cancel ditekan maka navigasi akan berpindah ke halaman

beranda, sedangkan jika tombol Submit Ditekan maka akan muncul alert sebagai berikut :

-Selamat Mengerjakan-

Page 20: OOP[5] - Graphical User Interface & Events

HalamanUtama.java

package javaIO;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.*;

public class HalamanUtama extends JFrame {

JButton button0, button1, button2, button3;JLabel Title;

public HalamanUtama(){

//Registrasi registrasi = new Registrasi();

/*Set ukuran ,jenis layout, title frame*/getContentPane().setLayout(null);setSize(600,400);setTitle("HomePage");

/*Set Title*/Title = new JLabel("Aplikasi ...");Title.setFont(new Font("Tahoma", Font.PLAIN, 20));Title.setBounds(250, 23, 345, 50);

/*Set Button registrasi*/button0 = new JButton("Registrasi");button0.setBounds(235,100,125,30);reg r = new reg();button0.addActionListener(r); button1 = new JButton("List Mobil");button1.setBounds(235,150,125,30);//button1.addActionListener(listmobil);

button2 = new JButton("Detail Rental");button2.setBounds(235,200,125,30);//button2.addActionListener(detailrental);

/*Tambahkan semua elemen*/getContentPane().add(Title);getContentPane().add(button0);getContentPane().add(button1);getContentPane().add(button2);setVisible(true);

}

public static void main(String[] args) {HalamanUtama halamanUtama = new HalamanUtama();

}

class reg implements ActionListener{

@Overridepublic void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stubif(e.getSource()==button0){

Registrasi registrasi = new Registrasi();registrasi.setVisible(true);dispose();

}}

}}

Page 21: OOP[5] - Graphical User Interface & Events

Registrasi.java

package javaIO;

import java.awt.Container;import java.awt.FlowLayout;import java.awt.Font;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;

import javax.swing.JButton;import javax.swing.JCheckBox;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.JPasswordField;import javax.swing.JTextArea;import javax.swing.JTextField;import javax.swing.JRadioButton;import javax.swing.ButtonGroup;import javax.swing.DefaultComboBoxModel;

public class Registrasi extends JFrame {JMenuBar menu;JMenu file, help;JMenuItem newMenu, openMenu, exitMenu, helpMenu;JFrame Frame;JLabel Header,Nama,Username,Password,Alamat,Hobi,JK,ItemList,label9;JTextField text1, text2;JTextArea textarea1;JPasswordField pasw1;JCheckBox check1,check2;JRadioButton radio1,radio2;JComboBox combo1;JButton button1, button2;

private final ButtonGroup buttonGroup = new ButtonGroup();

public Registrasi(){/*Set ukuran ,jenis layout, title frame*/getContentPane().setLayout(null);setSize(600, 700);setTitle("Example01");

//MenuBar//Instaniasimenu = new JMenuBar();//Instaniasi Menu file = new JMenu("File");help = new JMenu("Help");//instantiasi item dari menunewMenu = new JMenuItem("New");openMenu = new JMenuItem("Open");exitMenu = new JMenuItem("Exit");helpMenu = new JMenuItem("Help");

setJMenuBar(menu);menu.add(file);menu.add(help);file.add(newMenu);file.add(openMenu);file.addSeparator();file.add(exitMenu);help.add(helpMenu);

//

Page 22: OOP[5] - Graphical User Interface & Events

/*Set Header Aplikasi */Header = new JLabel("Registrasi");Header.setFont(new Font("Tahoma", Font.PLAIN, 20));Header.setBounds(250, 25, 125, 50);

label9 = new JLabel("");

//Penggunaan Text Field, //10 adalah maksimal karakter yang dapat dimasukkan [Length]Nama = new JLabel("Nama :");Nama.setBounds(110, 85, 100, 30);text1 = new JTextField(10);text1.setBounds(230, 85, 155, 30);

Username = new JLabel("Username");Username.setBounds(110, 125, 100, 30);text2 = new JTextField(10);text2.setBounds(230, 125, 155, 30);

//Penggunaan Password FieldPassword = new JLabel("Password");Password.setBounds(110, 165, 100, 30);pasw1 = new JPasswordField(10);pasw1.setBounds(230, 165, 155, 30);

//Penggunaan Text AreaAlamat = new JLabel("Alamat");Alamat.setBounds(110, 205, 100, 30);textarea1 = new JTextArea();textarea1.setLocation(230, 205);textarea1.setSize(250,125) ;

//radioButtonJK = new JLabel("JK :");JK.setBounds(110, 345, 100, 30);radio1 = new JRadioButton("Pria");radio1.setBounds(230, 345, 90, 20);buttonGroup.add(radio1);radio2 = new JRadioButton("Wanita"); radio2.setBounds(400, 345, 90, 20);buttonGroup.add(radio2);

//checkboxHobi = new JLabel("Hobby :");Hobi.setBounds(110, 385, 100, 30);check1 = new JCheckBox("Programming");check1.setBounds(230, 385, 90, 20);check2 = new JCheckBox("Design");check2.setBounds(400, 385, 90, 20);

//comboboxItemList = new JLabel("Pilihan Item :");ItemList.setBounds(110, 425, 100, 30);;combo1 = new JComboBox();combo1.setModel(new DefaultComboBoxModel(new String[] {"Komputer","Printer","Mouse","Keyboard"}));combo1.setBounds(230, 425, 100, 30);

//Button/*Set Button Submit */button2 = new JButton("Submit");button2.setBounds(350,485,140,50);tambahuser tu = new tambahuser();button2.addActionListener(tu);

Page 23: OOP[5] - Graphical User Interface & Events

/*Set Button Cancel */button1 = new JButton("Cancel");button1.setBounds(110,485,140,50);cancel c = new cancel();button1.addActionListener(c);

/*Menamabahkan Komponen pada Container JFrame */getContentPane().add(Header);getContentPane().add(Nama);getContentPane().add(text1);getContentPane().add(Username);getContentPane().add(text2);getContentPane().add(Password);getContentPane().add(pasw1);getContentPane().add(Alamat);getContentPane().add(textarea1);getContentPane().add(JK);getContentPane().add(radio1);getContentPane().add(radio2);getContentPane().add(Hobi);getContentPane().add(check1);getContentPane().add(check2);getContentPane().add(ItemList);getContentPane().add(combo1);getContentPane().add(button1);getContentPane().add(button2);

}

/*Event Actionlistener tambahuser */public class tambahuser implements ActionListener{

@Overridepublic void actionPerformed(ActionEvent e) {if(e.getSource()==button2){JOptionPane.showMessageDialog(null,"Registrasi Berhasil","Alert", JOptionPane.CLOSED_OPTION);dispose();}}

}

public class cancel implements ActionListener{@Overridepublic void actionPerformed(ActionEvent e) {

if(e.getSource()==button1){HalamanUtama alhalamanUtama = new HalamanUtama();alhalamanUtama.setVisible(true);dispose();

}}

}

}