suhe arie's pages

Programmer juga manusia

Lebih dari sekedar HelloWord

Artikel ini merupakan lanjutan dari artikel sebelumnya, yang berhenti sampai membuat dan manjalankan aplikasi yang terkenal, HelloWorld. Sekarang kita akan belajar apa itu classpath, imports, file java, file class, file jar, swing, dan hal-hal yang berkaitan erat dengan pemrograman Java lebih dalam daripada sekedar HelloWorld.

Saya akan tetap menggunakan editor sederhana seperti notepad dan melakukan semuanya secara manual. Mengapa tidak langsung pakai editor seperti Eclipse, Netbeans atau IDE canggih yang lain ?
Alasan pertama, karena ini akan membuat kita memahami “behind the scene things”, yang merupakan fundamental dari Java, sehingga ketika kita menggunakan IDE yang canggih, kita sudah mengetahui, apa yang sebenarnya terjadi.
Alasan kedua, supaya saya bisa berbagi tentang eclipse atau netbeans di artikel berikutnya… Hehe, it’s not a real reason friend 😀

Tipe Data

Java mengenal 2 macam tipe data. Yang pertama adalah tipe data primitif, yaitu byte, short, char, int, long, float, dan double. Yang kedua adalah tipe data object. Ini adalah tipe yang dibuat dari definisi class. Root class di Java adalah class Object, semua class yang ada di library java maupun yang kita buat sendiri adalah turunan dari class Object.

Ok, mari kita mulai dengan membuat aplikasi Kalkulator. Direktori kerja saya saat ini adalah C:\Java. Buka notepad, kemudian ketik kode berikut (saya tetap berpendapat bahwa mengetik lebih baik daripada copy and paste).

package suhearie.blog.morehelloworld;

public class Kalkulator {

	public static void main(String[] args) {
		if (args.length < 2) {
			System.out.println("Penggunaan: java Kalkulator operand1 operand2");
		}
		else {
			System.out.println("Hasil: 5");
		}
	}

}
&#91;/sourcecode&#93;
<p style="text-align:justify;"><span id="more-25"></span></p>
<p style="text-align:justify;">Kemudian lakukan langkah-langkah berikut:</p>

<ol>
	<li>Buat file source code. Save kode tersebut sebagai file source code dengan nama file Kalkulator.java. File source code harus memiliki extension <strong>.java</strong> dan harus sesuai dengan nama class utama, dalam hal ini Kalkulator.</li>
	<li>Package adalah mekanisme pengelompokan source code. Karena saya menggunakan nama package <strong>suhearie.blog.morehelloworld</strong>, maka kita harus membuat struktur direktori yang mencerminkan package tersebut, dan meletakkan file source kita disana.
<a href="https://suhearie.files.wordpress.com/2008/07/package.jpg"><img class="alignnone size-full wp-image-41" src="https://suhearie.files.wordpress.com/2008/07/package.jpg" alt="" width="450" height="121" /></a></li>
	<li>Compile source code. Buka command prompt, masuk ke direktori C:\Java, ketik <strong>
javac suhearie/blog/morehelloworld/*.java</strong>. <strong>javac</strong> adalah compiler java. Jika kompilasi berhasil, javac akan menghasilkan file <strong>Kalkulator.class</strong>. Ini adalah file class (disebut juga bytecode) yang akan dieksekusi oleh Java Virtual Machine (JVM) pada saat runtime.</li>
	<li>Jalankan aplikasi. Di command prompt, ketik <strong>java suhearie.blog.morehelloword.Kalkulator</strong>. Perintah ini akan menjalankan JVM dan mengeksekusi kode yang ada di dalam method <strong>public static void main(String[ ] args) { }</strong>. <strong>String[ ] args</strong> adalah variable bertipe string array untuk menampung argumen yang kita berikan saat memulai aplikasi.</li>
</ol>
<p style="text-align:justify;"><a href="https://suhearie.files.wordpress.com/2008/07/compilenrun.jpg"><img class="alignnone size-full wp-image-42" src="https://suhearie.files.wordpress.com/2008/07/compilenrun.jpg" alt="" width="450" height="175" /></a></p>
<p style="text-align:justify;">Sejauh ini aplikasi kalkulator kita hanya melakukan print ke standard-output, ditambah logika sederhana untuk memeriksa apakah user sudah memasukkan dua argumen saat menjalankan aplikasi. Tapi hasilnya masih salah karena kita hanya menghasilkan nilai konstan tanpa memperdulikan input.</p>

<p style="text-align:justify;">Saatnya mengimplementasikan perhitungan yang sebenarnya pada aplikasi ini. Saya melakukannya dengan:
1. Membuat constructor. Constructor adalah method spesial dalam sebuah class. Sesuai namanya, blok kode ini dipanggil untuk meng-construct object baru. Method ini tidak mempunyai return type, dan namanya harus sama persis dengan nama class.
2. Membuat method baru. Method tersebut bernama jumlahkan, tujuannya untuk menghitung jumlah dari dua buah input yang diberikan


package suhearie.blog.morehelloworld;

public class Kalkulator {

	public Kalkulator() {
		System.out.println("Kalkulator baru saja dibuat");
	}

	private int jumlahkan(String operand1, String operand2) {
		int x = Integer.parseInt(operand1);
		int y = Integer.parseInt(operand2);
		int hasil = x + y;
		return hasil;
	}

	public static void main(String[] args) {
		if (args.length == 2) {
			Kalkulator myKalkulator = new Kalkulator();
			int hasil = myKalkulator.jumlahkan(args[0], args[1]);
			System.out.println("Hasil: "+hasil);
		}
		else {
			System.out.println("Penggunaan: java Kalkulator operand1 operand2");
		}
	}

}

Saatnya melakukan refactor, yaitu membuat code menjadi lebih reusable, agar kita bisa mendapatkan manfaat dari OOP. Kita akan membuat sebuah class baru yang bertugas sebagai “engine” untuk melakukan perhitungan.

Class KalkulatorEngine

package suhearie.blog.morehelloworld;

public class KalkulatorEngine {

	public int hitung(String operasi, String operand1, String operand2) {
		int x = Integer.parseInt(operand1);
		int y = Integer.parseInt(operand2);
		if (operasi.equals("tambah")) {
			return tambah(x, y);
		}
		else if (operasi.equals("kurang")) {
			return kurang(x, y);
		}
		else {
			System.out.println("Kalkulator tidak mendukung operasi "+operasi);
			return 0;
		}
	}

	private int tambah(int operand1, int operand2) {
		return operand1 + operand2;
	}

	private int kurang(int operand1, int operand2) {
		return operand1 - operand2;
	}

}

Integer.parseInt() adalah sintaks untuk mengubah dari String ke bilangan integer.

Class Kalkulator

package suhearie.blog.morehelloworld;

public class Kalkulator {

	private KalkulatorEngine engine = null;

	public Kalkulator() {
		System.out.println("Menyiapkan engine");
		engine = new KalkulatorEngine();
		System.out.println("Kalkulator baru saja dibuat");
	}

	private int hitung(String operasi, String operand1, String operand2) {
		return engine.hitung(operasi, operand1, operand2);
	}

	public static void main(String[] args) {
		if (args.length == 3) {
			Kalkulator myKalkulator = new Kalkulator();
			int hasil = myKalkulator.hitung(args[0], args[1], args[2]);
			System.out.println("Hasil: "+hasil);
		}
		else {
			System.out.println("Penggunaan: java Kalkulator operasi operand1 operand2");
		}
	}

}

Di Class Kalkulator yang telah diperbaharui ini, kita tidak lagi melakukan perhitungan di dalam class ini. Kita meng-create sebuah object KalkulatorEngine, dan menyuruh engine ini untuk melakukan perhitungan.

Class Kalkulator yang sudah kita buat adalah aplikasi berbasis text. Sekarang kita akan membuat sebuah class baru yang berbasis Graphical User Interface (GUI). Library standard Java untuk membuat GUI adalah Swing dan AWT. Sebelum mendeklarasikan class, kita melakukan import terlebih dahulu dari library yang kita butuhkan untuk memberi tahu compiler, bahwa kita akan menggunakan class-class yang berasal dari library tersebut. Kali ini kita akan mengimport semua class dari package javax.swing dan package java.awt.event.

JFrame adalah class yang kita gunakan untuk membuat window di Java. Kita akan membuat class baru yang meng-extend class JFrame ini. Selanjutnya, kita masukkan semua komponen yang kita butuhkan yaitu, JLabel untuk label, JComboBox untuk dropdown box, JTextField untuk text box, dan JButton untuk tombol.

Setelah membuat GUI nya, kita menambahkan action listener pada komponen tombol, sehingga ketika tombol tersebut di-klik oleh user, kita bisa melakukan action yang kita inginkan, dalam hal ini memanggil engine untuk melakukan perhitungan dan menampilkannya pada kotak hasil.

Class KalkulatorGUI

package suhearie.blog.morehelloworld;

import java.awt.event.*;
import javax.swing.*;

public class KalkulatorGUI extends JFrame {

	private KalkulatorEngine engine;
	private JComboBox comboOperasi;
	private JTextField txtOperand1;
	private JTextField txtOperand2;
	private JButton btnHitung;
	private JTextField txtHasil;

	public KalkulatorGUI() {
		System.out.println("Menyiapkan engine");
		engine = new KalkulatorEngine();

		System.out.println("Menyiapkan GUI");
		setTitle("Kalkulator GUI");
		setContentPane(createGUI());
		setupAction();
		setSize(600, 100);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	private JPanel createGUI() {
		JPanel panel = new JPanel();

		// Operasi
		panel.add(new JLabel("Operasi"));
		comboOperasi = new JComboBox();
		comboOperasi.addItem("tambah");
		comboOperasi.addItem("kurang");
		panel.add(comboOperasi);

		// Operand1
		panel.add(new JLabel("Operand 1"));
		txtOperand1 = new JTextField();
		txtOperand1.setColumns(5);
		panel.add(txtOperand1);

		// Operand2
		panel.add(new JLabel("Operand 2"));
		txtOperand2 = new JTextField();
		txtOperand2.setColumns(5);
		panel.add(txtOperand2);

		// Tombol Hitung
		btnHitung = new JButton("Hitung");
		panel.add(btnHitung);

		// Hasil
		panel.add(new JLabel("Hasil"));
		txtHasil = new JTextField();
		txtHasil.setColumns(5);
		panel.add(txtHasil);

		return panel;
	}

	private void setupAction() {
		btnHitung.addActionListener(new MyActionListener());
	}

	class MyActionListener implements ActionListener {
		public void actionPerformed(ActionEvent event) {
			String operasi = (String) comboOperasi.getSelectedItem();
			String operand1 = txtOperand1.getText();
			String operand2 = txtOperand2.getText();
			int hasil = engine.hitung(operasi, operand1, operand2);
			txtHasil.setText(String.valueOf(hasil));
		}
	}

	public static void main(String[] args) {
		KalkulatorGUI kalkulator = new KalkulatorGUI();
		kalkulator.setVisible(true);
	}

}

Anda akan mendapatkan tampilan seperti gambar berikut. Pilih operasi, masukkan operand 1 dan operand 2, kemudian tekan tombol Hitung, maka hasil perhitungan akan tampil di kotak hasil.

Disini kita dapat melihat keuntungan dari prinsip reusability, karena kita memiliki 2 aplikasi yang berbeda tapi menggunakan engine yang sama untuk melakukan perhitungan.

Ok, sekian untuk tutorial kali ini. Silahkan review kembali kode yang sudah kita buat untuk lebih memahami bagaimana kode tersebut bekerja. Selamat belajar !!

July 19, 2008 - Posted by | Java | , , ,

9 Comments »

  1. Pak, bagaimana cara memasukkan komponen2 kalkulator ke dalam suatu peralatan elektronik seperti bolpoin?? misalnya saja, membuat produk bolpoin dengan fasilitas tambahan kalkulator.
    Mohon jawabannya
    Trims

    Comment by Lala | November 1, 2008 | Reply

    • Hmm, maksudnya apa yah?
      Bikin kalkulator beneran? Hehe, saya mah bisanya cuman bikin program, bukan bikin kalkulatornya, maap yak..

      Comment by suhearie | March 5, 2009 | Reply

  2. Terimakasih banyak mas imunya

    Comment by sofyan | November 3, 2008 | Reply

  3. apakah java bisa menghitung durasi waktu yang tidak bisa langsung mengurangkan 2 waktu yg berbeda???
    bgaimana caranya???
    se simple vb kah??

    Comment by mohamadfachri | November 13, 2008 | Reply

    • biasanya sih dari object Date diubah ke milisecond dengan memanggil date.getTime();
      long diff = date1.getTime() – date2.getTime();
      Kalau ingin cari perbedaan dalam detik, tinggal dibagi 1000. Kalau mau menit, dibagi 1000*60, dst.
      Sedikit repot, tapi kalo sudah bikin methodnya kan tinggal panggil.

      Comment by suhearie | March 5, 2009 | Reply

  4. gan suhearie mohon bimbingannya..
    newbie baru belajar java gan.
    saya sudah coba coding kalkulatornya yg diatas.. yg source class Kalkulator yg pertama dan yg kedua pas di compile sukses.
    tp nyobain source yg ketiga yg pakai class KalkulatorEngine
    Pas compile source Kalkulator.java nya keluar error tidak mengenali class KalkulatorEngine nya
    pesan errornya
    “Kalkulator.java:5: cannot find symbol
    symbol : class KalkulatorEngine
    location: class suhearie.blog.morehelloworld.Kalkulator
    private KalkulatorEngine engine = null;
    ^
    Kalkulator.java:9: cannot find symbol
    symbol : class KalkulatorEngine
    location: class suhearie.blog.morehelloworld.Kalkulator
    engine = new KalkulatorEngine();
    ^
    2 errors”

    terimakasih sebelumnya

    Comment by hendy | October 7, 2009 | Reply

    • Class KalkulatorEngine nya udah dibikin dengan nama file yang benar (KalkulatorEngine.java) ? Udah di taruh di folder yang benar (suhearie/blog/morehelloworld/Kalkulator) ?

      Comment by suhearie | December 3, 2009 | Reply

  5. hmm…mohon petunjuknya Mas, saya ingin menampilkan menu dari JComboBox ke JLabel seperti :

    misalkan menu pada JCmb sudah di klik, saya ingin itu tercetak di form cetak setelah JbtnCetak di klik. apakah itu bisa jadi dalam satu event di JbtnCetak ? kalau iya, coding apa yang harus saya buat ?

    Terima kasih untuk bantuannya 😀

    salam hangat

    Comment by Hariez | May 30, 2010 | Reply

    • JbtnCetak.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent e) {
      // masukkan code yang mau di-execute disini
      }
      });

      Comment by suhearie | July 6, 2010 | Reply


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: