Anda di halaman 1dari 27

MODUL 5

Praktikum Pemrograman Object 2

15 april 2020

Nama : Yesi Sofia


NIM : 3411181140
Kelas :B

JURUSAN TEKNIK INFORMATIKA

FAKULTAS SAINS DAN INFORMATIKA

UNIVERSITAS JENDERAL ACHMAD YANI

2020
DAFTAR ISI
DAFTAR ISI................................................................................................................................................. i
BAB I ............................................................................................................................................................ 1
PEMBAHASAN .......................................................................................................................................... 1
BAB 2 ........................................................................................................................................................... 2
EKSEKUSI PROGRAM DAN HASIL ANALISA .................................................................................. 2
2.1 Program 5-1 .................................................................................................................................. 2
2.2 Program 5-2 .................................................................................................................................. 3
2.3 Program 5-3 .................................................................................................................................. 6
2.4 Program 5-4 .................................................................................................................................. 7
2.5 Program 5-5 .................................................................................................................................. 9
2.6 Program 5-6 ................................................................................................................................ 11
2.7 Program 5-7 ................................................................................................................................ 12
2.8 Program 5-8 ................................................................................................................................ 16
BAB 3 ......................................................................................................................................................... 20
TUGAS AKHIR ........................................................................................................................................ 20
3.1 Program TicTacToe .................................................................................................................... 20
DAFTAR PUSTAKA .................................................................................................................................. ii

i
BAB I

PEMBAHASAN

Event Handling
Pengguna berinteraksi dengan aplikasi GUI untuk menunjukkan tugas-tugas (tasks) yang
dilakukan aplikasi. Misalnya, ketika Anda menulis e-mail dalam aplikasi e-mail, mengklik tombol
Kirim memberitahu aplikasi untuk mengirim e-mail ke alamat e-mail yang ditentukan. GUI adalah
sesuatu yang bersifat event driven (mendorong adanya sebuah event). Ketika pengguna
berinteraksi dengan komponen GUI, interaksi yang dikenal sebagai events mendorong program
untuk melakukan tugas. Beberapa event yang umum (interaksi pengguna) yang mungkin
menyebabkan aplikasi untuk melakukan tugas termasuk mengklik tombol, mengetik di bidang
teks, memilih item dari menu, menutup jendela dan menggerakkan mouse. Kode yang melakukan
tugas sebagai tanggapan terhadap suatu kejadian disebut event handler. Keseluruhan proses
merespons event dikenal sebagai event handling
Dilegation Event Model
Model ini digunakan oleh java untuk menangani interaksi user dengan komponen komponen GUI.
Menjelaskan bagaimana program anda dapat merespon suatu interaksi user.
Terdapat 3 komponen penting
1. Event source
2. Event Listener/Handler
3. Event Object

1
BAB 2

EKSEKUSI PROGRAM DAN HASIL ANALISA


2.1 Program 5-1
A. Program 5-1. ActionListener
Source code
/*
* 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 modul5;

/**
*
* @author Yessi Sofia
*/

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class SwingApplication extends JFrame implements


ActionListener{

private int numClick = 0;


private JLabel lb1;
private JButton btn1;

public SwingApplication() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new GridLayout(2,1));

lb1 = new JLabel("0");


lb1.setHorizontalAlignment(JLabel.CENTER);
add(lb1);

btn1 = new JButton("I'm Swing Button");


btn1.addActionListener(this);
add(btn1);

pack();
setVisible(true);
}

2
@Override
public void actionPerformed(ActionEvent e) {
numClick++;
lb1.setText(String.valueOf(numClick));
}

public static void main(String[] args) {


new SwingApplication();
}

Hasil eksekusi Program

Jika di klik button I’m swing button angka akan bertambah

Analisis
Program SwingApllication ini merupakan contoh dari penggunaan ActionListener.
Untuk menggunakan ActionListener haruslah di registrasi terlebih dahulu seperti code
button. “ button.addActionListener(this);” Lalu membuat method untuk handles nya “
public void actionPerformed(ActionEvent e) ”. Pada method tersebut berisi actionnya
jika si button di klik . Untuk melengkapi code dalam modul ada beberapa tambahan
seperti pembuat JFrame, JPanel, Contentpane. Ini berfungsi untuk sebagai form untuk
di isi oleh label dan buttonnya.

2.2 Program 5-2


A. Program 5-2. MouseEventDemo
Source code

3
/*
* 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 modul5;

/**
*
* @author Yessi Sofia
*/

import java.awt.Frame;
import java.awt.TextField;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.*;
import java.awt.event.*;

public class MouseEventsDemo extends Frame implements


MouseListener,MouseMotionListener{
TextField tf;
public MouseEventsDemo (String title) {
super (title);
tf = new TextField(60);
addMouseListener(this);
}

public void lauchFrame() {


//menambah komponen pada frame
add(tf,BorderLayout.SOUTH);
setSize(300,300);
setVisible(true);
}

public void mouseClicked(MouseEvent me) {


String msg = "mouse Clicked.";
tf.setText(msg);
}

public void mouseEntered(MouseEvent me) {


String msg = "mouse entered component.";
tf.setText(msg);
}

public void mouseDragged(MouseEvent arg0) {


String msg = "mouse mouse Dragged.";
tf.setText(msg);
}

public void mouseMoved(MouseEvent arg0) {


String msg = "mouse Moved.";
tf.setText(msg);
}

4
public void mouseExited(MouseEvent arg0) {
String msg = "mouse Exited.";
tf.setText(msg);
}

public void mousePressed(MouseEvent arg0) {


String msg = "mouse Pressed.";
tf.setText(msg);
}

public void mouseReleased(MouseEvent arg0) {


String msg = "mouse Released.";
tf.setText(msg);
}
public static void main(String []args) {
MouseEventsDemo med = new MouseEventsDemo ("Mouse
events demo");
med.lauchFrame();
}
}

Hasil eksekusi Program

Analisis
Program di atas adalah contoh dari penggunaan event MouseListner dan
MouseMotionlistener. Pada program ini jika semua method dari MouseEventnya tidak
di override maka program tidak akan jalan, karena jika class bukan sebuah abtract maka
method MouseEventnya harus di tuliskan semua.
B. Tugas 5-2
1. Jika salah satu method tidak di override, akan terjadi error karena class interface
maka harus di override semua.

5
No 2,3 dan 4 sudah dimasukan dalam program
2.3 Program 5-3
A. Program 5-3 CloseFrame
Source code
/*
* 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 modul5;

/**
*
* @author Yessi Sofia
*/
import java.awt.*;
import java.awt.event.*;

public class CloseFrame extends Frame implements


WindowListener{
Label label;
CloseFrame(String title){
super(title);
label = new Label("Close the frame.");
this.addWindowListener(this);
}
void lauchFrame() {
setSize(300,300);
setVisible(true);
}
public void windowActivated(WindowEvent e) {
}
public void windowClosed(WindowEvent e) {
}
public void windowClosing(WindowEvent e) {
setVisible(false);
System.exit(0);
}
public void windowDeactivated(WindowEvent e){
}
public void windowDeiconified(WindowEvent e){
}
public void windowIconified(WindowEvent e){
}
public void windowOpened(WindowEvent e){
}
public static void main(String[] args) {
CloseFrame cf = new CloseFrame("Close Window
Example");
cf.lauchFrame();
}
}

6
Hasil eksekusi program

Analisis
Program diatas adalah contoh penggunaan WindowsListener untuk methodnya hanya
di isi pada bagian windowClosing. setVisible(false) digunakan untuk menghilakan
frame awt. Sedangkan Class inner adalah class yang tidak berada pada top level atau
class yang dideklarasikan didalam class lain(Outer class).
B. Tugas 5-3
Inner Class adalah suatu Class yang didefinisikan di dalam Class lain. Dengan kata
lain, Inner Class adalah anggota (member) dari Class lain, sama halnya seperti variable
dan method. Hal ini mengakibatkan instance dari Inner Class dapat mengakses /berbagi
dengan instance dari outer Class-nya. Instance dari Inner Class dapat mengakses semua
member dari outer Class-nya, bahkan yang private.
Contoh :
Class OuterClass {
Class InnerClass{

}
}

2.4 Program 5-4


A. Program 5-4 CloseFrame1
Source code

7
/*
* 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 modul5;

/**
*
* @author Yessi Sofia
*/
import java.awt.*;
import java.awt.event.*;

public class CloseFrame1 extends Frame {


Label label;
CFListener w = new CFListener(this);
CloseFrame1(String title){
super(title);
label = new Label("Close the frame.");
this.addWindowListener(w);
}
void lauchFrame() {
setSize(300,300);
setVisible(true);
}
public static void main(String[] args) {
CloseFrame cf = new CloseFrame("Close Window
Example");
cf.lauchFrame();
}
}
class CFListener extends WindowAdapter{
CloseFrame1 ref;
CFListener(CloseFrame1 ref){
this.ref=ref;
}
public void windowClosing(WindowEvent e){
ref.dispose();
System.exit(1);
}

Hasil eksekusi Program

8
Analisis
Metode diatas merupakan contoh cara penggunaan WindowsAdapter. Jika seseorang
ingin menggunakan method Listener yang di buat dalam satu class yang sama maka
method yang ada di dalam Listener haruslah semuanya di tulis.

2.5 Program 5-5


A. Program 5-5 CloseFrame2
Source code
/*
* 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 modul5;

/**
*
* @author Yessi Sofia
*/
import java.awt.*;
import java.awt.event.*;

public class CloseFrame2 extends Frame{


Label label;

CloseFrame2(String title){
super(title);
label = new Label("Close the frame.");
this.addWindowListener(new CFListener());
}

void launchFrame() {

9
setSize(300,300);
setVisible(true);
}

class CFListener extends WindowAdapter{


public void windowClosing(WindowEvent e) {
dispose();
System.exit(1);
}
}

public static void main(String [] args) {


CloseFrame2 cf = new CloseFrame2("Close Window
Example");
cf.launchFrame();
}
}

Hasil eksekusi program

Analisis
Program diatas merupakan contoh dari inner class pada program 5.4 sudah coba untuk
membuat inner class Untuk mengeksekusi event WindowAdapter dan pada program
5.5 ini adalah untuk mengeksekusi event MouseAdapter
B. Tugas 5-5

10
2.6 Program 5-6
A. Program 5-6 CloseFrame3
Source code
/*
* 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 modul5;

/**
*
* @author Yessi Sofia
*/
import java.awt.*;
import java.awt.event.*;

public class CloseFrame3 extends Frame {


Label label;
CloseFrame3(String title){
super(title);
label = new Label("Close the frame.");
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {
dispose();
System.exit(1);
}
});
}

void launchFrame() {
setSize(300,300);
setVisible(true);
}

11
public static void main(String [] args) {
CloseFrame3 cf = new CloseFrame3("Close Window
Example");
cf.launchFrame();
}
}

Hasil eksekusi program

Analisis
Metode diatas merupakan contoh cara penggunaan WindowsAdapter. Jika seseorang
ingin menggunakan method Listener yang di buat dalam satu class yang sama maka
method yang ada di dalam Listener haruslah semuanya di tulis.

2.7 Program 5-7


A. Program 5-7 BMICalculator
Source code
/*
* 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 modul5;

/**
*
* @author Yessi Sofia
*/
import java.awt.Color;
import java.awt.Dimension;

12
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class BMICalculator extends JFrame{


private final JTextField txtMass=
makePrettyTextField();
private final JTextField txtHeight=
makePrettyTextField();
private final JButton btnCalc=
makePrettyButton("Calculate BMI");
private final BMICalculator self= this;

public BMICalculator() {
super();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("BMI Calculator");
getContentPane().setLayout(new
BoxLayout(getContentPane(), BoxLayout.PAGE_AXIS));
txtMass.setPreferredSize(new Dimension(200,30));
txtHeight.setPreferredSize(new
Dimension(200,30));

txtMass.setMaximumSize(txtMass.getPreferredSize());

txtHeight.setMaximumSize(txtHeight.getPreferredSize());
getContentPane().setBackground(new
Color(232,240,255));
getContentPane().add(makePrettyLabel("Your mass
(kg):"));
getContentPane().add(Box.createRigidArea(new
Dimension(5,5)));
getContentPane().add(txtMass);
getContentPane().add(Box.createRigidArea(new
Dimension(5,5)));
getContentPane().add(Box.createVerticalGlue());
getContentPane().add(makePrettyLabel("Your height
(cm):"));
getContentPane().add(Box.createRigidArea(new
Dimension(5,5)));
getContentPane().add(txtHeight);
getContentPane().add(Box.createRigidArea(new
Dimension(5,5)));
getContentPane().add(Box.createVerticalGlue());
getContentPane().add(btnCalc);
getContentPane().add(Box.createRigidArea(new
Dimension(5,5)));
//Add BMI Calculation

13
btnCalc.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent
arg0) {
double mass;
double height;
try {
mass =
Double.parseDouble(txtMass.getText());
height =
Double.parseDouble(txtHeight.getText());
}catch(NumberFormatException e) {

JOptionPane.showMessageDialog(self, "Pease enter a


valid number for mass and height.", "Input error",
JOptionPane.ERROR_MESSAGE);
return;
}
double result =
calculateBMI(mass,height);

JOptionPane.showMessageDialog(self,"Your BMI
is:"+(Math.round(result*100.0)/100.0),"Your BMI
Result",JOptionPane.PLAIN_MESSAGE);
}
});
pack();
setVisible(true);
}

protected double calculateBMI(double mass,double


height) {
return mass / Math.pow(height/100.0, 2.0);
}

private JButton makePrettyButton(String title){


JButton button = new JButton(title);
button.setFont(new Font(Font.SANS_SERIF,
Font.PLAIN,16));

button.setBorder(BorderFactory.createRaisedBevelBorder(
));
button.setBackground(Color.white);
button.setBackground(new
Color(53,124,255));
return button;
}

private JTextField makePrettyTextField(){


JTextField field = new JTextField();
field.setFont(new Font(Font.SANS_SERIF,
Font.ITALIC, 14));

field.setHorizontalAlignment(JTextField.RIGHT);

14
field.setBorder(BorderFactory.createLoweredBevelBorder(
));
return field;
}
private JLabel
makePrettyLabel(String title){
JLabel label = new
JLabel(title);
label.setFont(new
Font(Font.SANS_SERIF, Font.BOLD, 14));
label.setForeground(new
Color(53,124,255));
return label;
}

public static void


main(String[] args){
SwingUtilities.invokeLater(new
Runnable(){
public void run(){
new BMICalculator();
}
});
}

Hasil eksekusi program

Jika dijalankan

15
Jika ada yang belum diisi

Analisis
Dalam program ini adalah program untuk menghitung calculate BMI yang dimana data
yang dihitung atau diinputkan yaitu kg dan cm di calculate dan hasil akan ditampilkan
pada JoptionPane.

2.8 Program 5-8


A. Program 5-8 DiscolightsExample
Source code
/*
* 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 modul5;

/**
*
* @author Yessi Sofia
*/
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class DiscoLightsExample extends JFrame implements


ActionListener{
private final String ACTION_ON = "LIGHTS ON";
private final String ACTION_OFF = "LIGHTS OFF";

16
private final String ACTION_CYCLE = "CYCLE COLOR";
private final Color[] COLORS = new Color[] {
Color.white,
Color.green,
Color.red,
Color.yellow,
Color.orange,
Color.pink,
};
private int currentcolor = 0;
private boolean isLightsOn = false;
public DiscoLightsExample() {
setTitle("Disco Light Party Frame");
setLayout(new FlowLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton btnOffOn = new JButton("Lights ON");
JButton btnColor = new JButton("Cycle Color");
btnOffOn.setActionCommand(ACTION_ON);
btnColor.setActionCommand(ACTION_CYCLE);
btnOffOn.addActionListener(this);
btnColor.addActionListener(this);
getContentPane().add(btnOffOn);
getContentPane().add(btnColor);
pack();
setVisible(true);
}

@Override

public void actionPerformed(ActionEvent ev) {


String action = ev.getActionCommand();
System.err.println("Got Action"+action);
switch (action) {
case ACTION_ON:
isLightsOn = true;

getContentPane().setBackground(COLORS[currentcolor]);
((JButton)
ev.getSource()).setText("Lights Off");
((JButton)
ev.getSource()).setActionCommand(ACTION_OFF);
break;

case ACTION_OFF:
isLightsOn = false;

getContentPane().setBackground(Color.black);
((JButton) ev.getSource()).setText("Lights
On");
((JButton)
ev.getSource()).setActionCommand(ACTION_ON);
break;

case ACTION_CYCLE:
if(isLightsOn) {

17
getContentPane().setBackground(COLORS[++currentcolor %
COLORS.length]);
break;
}
}
}
public static void main(String args[]) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new DiscoLightsExample();
}
});

}
}

Hasil eksekusi
Lights on

Lights off

Warna dapat berubah ubah (klik button Cycle color)

18
Analisis
Dalam program ini menampilkan Disco Light Party apabila menekan Light On maka
tulisan “Got actionLight On” dan tampilan warna akan terlihat didalam frame (frame
terdapat warna ) apabila menekan Light Off maka tulisan “Got actionLight off” dan
tampilan tidak berwarna dan apabila menekan Cycle Color maka tulisan “Got
actionCYCLE COLOR” dan tampilan warna frame akan berubah ubah.
B. Tugas 5-8
InvokeLater () adalah metode di java pada paket swing dan milik kelas SwingUtilities.
Invokelater digunakan oleh pengembang java swing untuk memperbarui atau
melakukan tugas apa pun pada utas pengirim berita dengan asynchronously.

19
BAB 3

TUGAS AKHIR
3.1 Program TicTacToe
Source code
/*
* 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 modul5;

/**
*
* @author Yessi Sofia
*/
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class TicTacToe extends JPanel


{
JButton buttons[] = new JButton[9];
int alternate = 0;

public TicTacToe()
{
setLayout(new GridLayout(3,3));
initializebuttons();
}

public void initializebuttons()


{
for(int i = 0; i <= 8; i++)
{
buttons[i] = new JButton();
buttons[i].setText("");
buttons[i].addActionListener(new
buttonListener());

add(buttons[i]);
}
}
public void resetButtons()
{
for(int i = 0; i <= 8; i++)
{
buttons[i].setText("");

20
}
}

private class buttonListener implements ActionListener


{

public void actionPerformed(ActionEvent e)


{

JButton buttonClicked = (JButton)e.getSource();


if(alternate%2 == 0)
buttonClicked.setText("X");
else
buttonClicked.setText("O");

if(checkForWin() == true)
{
JOptionPane.showConfirmDialog(null, "Game
Over.");
resetButtons();
}

alternate++;

public boolean checkForWin()


{
if( checkAdjacent(0,1) && checkAdjacent(1,2) )
return true;
else if( checkAdjacent(3,4) && checkAdjacent(4,5)
)
return true;
else if ( checkAdjacent(6,7) &&
checkAdjacent(7,8))
return true;

//vertical win check


else if ( checkAdjacent(0,3) &&
checkAdjacent(3,6))
return true;
else if ( checkAdjacent(1,4) &&
checkAdjacent(4,7))
return true;
else if ( checkAdjacent(2,5) &&
checkAdjacent(5,8))
return true;

//diagonal win check


else if ( checkAdjacent(0,4) &&
checkAdjacent(4,8))
return true;
else if ( checkAdjacent(2,4) &&
checkAdjacent(4,6))
return true;
else
return false;

21
}

public boolean checkAdjacent(int a, int b)


{
if (
buttons[a].getText().equals(buttons[b].getText()) &&
!buttons[a].getText().equals("") )
return true;
else
return false;
}

public static void main(String[] args)


{
JFrame window = new JFrame("Tic-Tac-Toe");
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.getContentPane().add(new TicTacToe());
window.setBounds(300,200,300,300);
window.setVisible(true);
}
}

Hasil eksekusi program

22
Analisis
Pada game tictactoe diatas dirancang menggunakan BorderLayout dan GridLayout juga
telah ditambahkan Eventhandler. Komponen yang ada pada Games diatas andalah
Chooser yang dirancang diatas menggunakan BorderLayout yang diselipkan juga
GridLayout serta menambahkan event handler.

23
Bab 4
TUGAS GIT
Membuat Project modul 5

Graph

24
DAFTAR PUSTAKA

Yuniarti.R.[2020].Pemrograman Objek II

ii

Anda mungkin juga menyukai