Monday, December 21, 2009

Hello World JSP

Java sebagai bahasa pemrograman paling populer saat ini bahkan sejak beberapa tahun yang lalu, menghadirkan solusi bagi programmer pada platform mobile dengan Java Micro Edition (Java ME), desktop dengan Java Standard Edition (Java SE) dan enterprise dengan Java Enterprise Edition (Java EE).


Pada lingkungan enterprise, Java menghadirkan servlet untuk merespon request dari client. Servlet merupakan bahasa pemrograman Java murni yang dikompilasi dan dijalankan di web server, sehingga untuk menggunakannya seorang programmer harus mempelajari bahasa pemrograman Java terlebih dahulu. Respon dari server yang berupa halaman HTML juga dimasukkan dalam servlet. Hal ini mengakibatkan campur-aduknya antara proses dan tampilan. Sebagai solusi, Sun menghadirkan Java Server Pages (JSP) yang dapat memisahkan antara proses dan tampilan.

Menggunakan JSP

Ada dua cara untuk menggunakan JSP. Pertama dengan memasukkan tag HTML ke dalam skrip JSP. Cara ini mirip dengan servlet dan Java SE versi konsole. Contoh:


HelloWorld.jsp


<%@ page contentType="text/html" pageEncoding="ISO-8859-1" %>
<%
out.println("<h1>Hello World!</h1>");
%>
Sintaks JSP dimasukkan diantara <% dan %>. Jika menggunakan Java SE pada aplikasi konsole, maka sintaksnya:

System.out.println("Hello World!");

Tampak keduanya sangat mirip, sehingga bagi programmer Java SE yang ingin mengembangkan aplikasi web dengan JSP sangatlah mudah beradaptasi karena sintaksnya yang mirip.



Cara kedua adalah dengan menyisipkan sintaks JSP ke dalam tag HTML. Contohnya:


HelloWorld.jsp

                <html>
                    <head>
                        <title>JSP Pertama</title>
                    </head>
                    <body>
                        <h1><%= "Hello World!" %></h1>
                    </body>
                </html>
            
      

Sintaks JSP <%= data %> digunakan untuk menampilkan isi dari variable data langsung ke layar. Cara kedua isi lebih familier bagi programmer HTML.Yang perlu diingat bahwa cara pertama dan kedua, nama file kesemuanya harus disimpan dengan ekstensi (
*.jsp)


Cara menjalankan

Contoh JSP tersebut dapat dijalankan pada Servlet/JSP container apa saja. Misalnya Glassfish, Tomcat maupun lainnya. Sebagai contoh ini digunakan Tomcat-6.0.20. Caranya ikuti langkah berikut:

  1. Ketik kode tersebut dengan editor text apa saja.
    Jika di Windows dapat menggunakan Notepad maupun Edit. Pada menu Run
    ketik notepad atau edit, maka akan muncul editor. Jika pada Linux dapat
    digunakan Gedit maupun vi editor.
  2. Simpan dengan nama HelloWorld.jsp pada direktori misal
    D:\web\HelloWorld.jsp pada Windows atau /home/umar/web/HelloWorld.jsp
    pada Linux.
  3. Buat file baru belajarjsp.xml dan simpan pada direkrori {install-tomcat}/conf/Catalina/localhost
  4. Isi belajarjsp.xml tersebut dengan baris berikut:
    <Context docBase="D:/web" path="/belajarjsp" />

    docBase diisi sesuai letak direktori utama data (berbeda di windows atau linux)
  5. Restart Tomcat
  6. Buka browser dan ketik: http://localhost/belajarjsp/HelloWorld.jsp
Selamat Mencoba!!!

Monday, November 9, 2009

Bagi-bagi Komponen StatusBar Gratis!!!

Bagi-bagi Komponen StatusBar Gratis!!!


Pecinta bahasa pemrograman Java yang ingin membuat aplikasi berbasis Java Swing dengan status bar berupa tanggal dan waktu, kini tidak perlu lagi membuat kode panjang.  Komponen atau library untuk membuatnya telah ada. Komponen ini saya beri nama jUmarComponent.


Komponen versi perdana ini memiliki satu kelas bernama umar.faisol.PanelJam yang kompatibel dengan JDK versi 1.4.2 atau yang lebih baru. Kelas tersebut berfungsi menampilkan hari, tanggal, bulan, tahun, jam, menit, detik secara real time.


Saran dan kritik dari teman-teman semua sangat diperlukan untuk pengembangan lebih lanjut. Permintaan penambahan fitur baru untuk memperkaya tampilan juga dipersilahkan.

Petunjuk menggunakan jUmarComponent


jUmarComponent adalah library yang disediakan gratis untuk pengembang aplikasi berbasis Java Swing. Pada versi 1.0 ini disediakan 1 kelas bernama umar.faisol.PanelJam yang digunakan untuk menampilkan hari, tanggal, bulan, tahun, jam, menit dan detik pada status bar secara real time.


Cara menggunakannya cukup mudah. Kelas umar.faisol.PanelJam ini merupakan turunan dari kelas javax.swing.JPanel, sehingga untuk menggunakannya layaknya menempelkan  kelas javax.swing.JPanel pada umumnya. Untuk contoh penggunaanya, ikuti langkah berikut:
  1. Letakkan file jUmarComponent-1.0.jar pada CLASSPATH
  2. Buat sebuah kelas turunan dari kelas javax.swing.JFrame atau javax.swing.JDialog
  3. Atur layout kontainernya dengan java.awt.BorderLayout.
  4. Buat objek dari kelas umar.faisol.PanelJam
  5. Letakkan objek dari kelas umar.faisol.PanelJam pada posisi BorderLayout.SOUTH.
  6. Atur ukuran window
  7. Buat visibilitasnya menjadi true
Kode selengkapnya sepeti contoh berikut:

Contoh.java

package programku;

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

import umar.faisol.PanelJam;

public class Contoh extends JFrame implements Runnable
{
    private PanelJam panelJam = new PanelJam();

    public void run()
    {
        setTitle("Contoh jUmarComponent");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        getContentPane().setLayout(new BorderLayout());
        getContentPane().add(panelJam, BorderLayout.SOUTH);
        setSize(550, 300);
        setVisible(true);
    }

    public static void main (String[] args)
    {
        JFrame.setDefaultLookAndFeelDecorated(true);
        SwingUtilities.invokeLater(new Contoh());
    }
}

Jika dijalankan tampilannya adalah seperti gambar berikut:




Tampak sebuah frame dengan status bar berupa tanggal dan waktu. Selamat mencoba!

Download source code di sini.

Tuesday, October 20, 2009

Pembulatan Bilangan Pecahan (Round Double Data Type)


Pembuatan software tidak bisa terlepas dari operasi matematika. Baik yang sederhana maupun kompleks. Misalnya pada aplikasi jual beli, perpajakan, akuntansi maupun sistem informasi akademik mahasiswa. Java mendukung penuh operasi matematika mulai dari yang sederhana sampai dengan matematika kompleks dengan beberapa kelas pada paket java.math.
 

Sebagai contoh, misalnya untuk membulatkan bilangan pecahan dapat digunakan metode setScale() dari kelas java.math.BigDecimal.
 

Contoh implementasi:


package umar.faisol;

import java.math.BigDecimal;

public class Bulat
{
    public static String bulat(double angka, int koma)
    {
        String returnValue = "";

        try
        {
            Double angkaDouble = new Double(angka);
            BigDecimal bigDecimal = new BigDecimal(angkaDouble.toString());
            BigDecimal hasilBulat = bigDecimal.setScale(koma, BigDecimal.ROUND_HALF_UP);

            returnValue = hasilBulat.toString();
        }
        catch(ArithmeticException ae)
        {
            returnValue = ae.getMessage();
        }

        return (returnValue);
    }
}


Penggunaannya dapat dilakukan pada kelas Main:



package umar.faisol;

public class Main
{
    public static void main (String[] args)
    {
        System.out.println("3.14446 = " + Bulat.bulat(3.14446, 2));
        System.out.println("3.15556 = " + Bulat.bulat(3.15556, 2));
    }
}

Keluarannya adalah:

3.14446 = 3.14
3.15556 = 3.16

Download source code di sini.

Thursday, October 8, 2009

Mendapatkan Home Directory

Home directory merupakan direktori utama pada setiap user. Path direktori ini selalu berubah/berbeda untuk setiap user dan untuk setiap sistem operasi. Bagaimana agar program Java yang dibuat menjadi portable untuk setiap sistem operasi dan untuk setiap user? Misalnya untuk meletakkan setting program atau hal lainnya.

Java memiliki kelas System yang terdapat pada paket java.lang. Pada kelas ini terdapat methode getProperty() yang dapat digunakan untuk mendapatkan Environment Variable, termasuk home directory, Desktop atau lainnya.

Contoh berikut digunakan untuk mendapatkan user home directory.



public class GetHomeDirectory
{
    public static void main(String args[])
    {
        try
        {
            String homeDirectory = System.getProperty("user.home");
            System.out.println(homeDirectory);
        }
        catch (Exception e)
        {
            System.out.println("Exception caught =" + e.getMessage());
        }
    }
} 

Keluaran dari program tersebut selalu berbeda untuk setiap user dan setiap sistem operasi. Misanya untuk linux keluarannya adalah:
/home/umar        jika nama usernya adalah umar.

Jika pada windows vista keluarannya adalah:
C:\Users\Umar      jika nama usernya adalah Umar


Selamat mencoba!

Friday, September 25, 2009

Multithreading (bagian 2) - Animasi Jam dan Titlebar

Pada posting sebelumnya sudah diperlihatkan cara menggunakan thread pada aplikasi Java. Kali ini akan diperlihatkan bagaimana menampilkan 3 thread sekaligus dalam satu aplikasi. Thread pertama adalah thread utama pada kelas Main. Thread kedua digunakan untuk menampilkan animasi titlebar, dan thread yang ketiga digunakan untuk menampilkan waktu (hari, tanggal, bulan, tahun, jam, menit dan detik) secara real time.

Penggunaan thread utama pada kelas Main dan thread untuk animasi titlebar sudah dicontohkan pada posting sebelumnya. Untuk menambahkan informasi waktu secara real time, ikuti langkah berikut:

Pertama, buat kelas baru turunan dari kelas JPanel dengan mengimplementasikan interface Runnable, misalnya dengan nama PanelJam.

Kedua, buat dua buah objek dari kelas JLabel dengan nama labelJam dan labelHari. Objek labelHari digunakan untuk menampilkan informasi hari, tanggal, bulan dan tahun, sedangkan objek labelJam digunakan untuk menampilkan informasi jam, menit dan detik.

Ketiga
, atur kedua objek JLabel tersebut sedemikian rupa sehingga tampilannya pas.

Keempat
, buat pengulangan tanpa batas (infinity loop) dengan menggunakan for atau while pada methode run. Buat objek dari kelas GregorianCalendar dan inisialisasi secara berulang-ulang serta ambil property hari, tanggal, bulan, tahun, jam, menit, detik secara berulang pula pada loop tersebut.

Kelima, tampilkan property dari objek GregorianCalendar tersebut pada labelJam dan labelHari pada setiap loop.

Kode selengkapnya adalah sebagai berikut:

package animasititlebar;

import javax.swing.JPanel;
import javax.swing.JLabel;

import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;

import java.util.GregorianCalendar;
import javax.swing.border.LineBorder;
import javax.swing.border.BevelBorder;

public class PanelJam extends JPanel implements Runnable
{
    public PanelJam()
    {
        super();

        /**** Jam ****/
        JPanel panelJam = new JPanel();
        panelJam.setLayout(new FlowLayout(FlowLayout.RIGHT));
        panelJam.add(labelJam);

        labelJam.setFont(new Font("Monospaced", Font.BOLD, 16));
        labelJam.setBorder(new BevelBorder(BevelBorder.LOWERED));

        /**** Hari ****/
        JPanel panelHari = new JPanel();
        panelHari.setLayout(new FlowLayout(FlowLayout.LEFT));
        panelHari.add(labelHari);

        labelHari.setFont(new Font("Monospaced", Font.BOLD, 16));
        labelHari.setBorder(new BevelBorder(BevelBorder.LOWERED));

        setBorder(LineBorder.createBlackLineBorder());
        setLayout(new GridLayout(1, 2));
        add(panelHari);
        add(panelJam);

        threadJam = new Thread(this);
        threadJam.start();
    }

    public void run()
    {
        GregorianCalendar waktu;
        String detik;
        String menit;
        String jam;

        String hari;
        String tanggal;
        String bulan;
        String tahun;

        for (;;)
        {
            waktu = new GregorianCalendar();

            /* hari */
            int hariInt = waktu.get(waktu.DAY_OF_WEEK) - 1;
            hari = HARI[hariInt];

            /* tanggal */
            int tanggalInt = waktu.get(waktu.DAY_OF_MONTH);
            if (tanggalInt < 10)
            {
                tanggal = "0" + new Integer(tanggalInt).toString();
            }
            else
            {
                tanggal = new Integer(tanggalInt).toString();
            }

            /* bulan */
            int bulanInt = waktu.get(waktu.MONTH);
            bulan = BULAN[bulanInt];

            /* tahun */
            int tahunInt = waktu.get(waktu.YEAR);
            tahun = new Integer(tahunInt).toString();

            /* detik */
            int detikInt = waktu.get(waktu.SECOND);
            if (detikInt < 10)
            {
                detik = "0" + new Integer(detikInt).toString();
            }
            else
            {
                detik = new Integer(detikInt).toString();
            }

            /* menit */
            int menitInt = waktu.get(waktu.MINUTE);
            if (menitInt < 10)
            {
                menit = "0" + new Integer(menitInt).toString();
            }
            else
            {
                menit = new Integer(menitInt).toString();
            }

            /* jam */
            int jamInt = waktu.get(waktu.HOUR_OF_DAY);
            if (jamInt < 10)
            {
                jam = "0" + new Integer(jamInt).toString();
            }
            else
            {
                jam = new Integer(jamInt).toString();
            }

            labelJam.setText(" " + jam + ":" + menit + ":" + detik + " WIB ");
            labelHari.setText(" " + hari + ", " + tanggal + " " + bulan + " " + tahun + " ");

            try
            {
                threadJam.sleep(60);
            }
            catch(InterruptedException e)
            {
                e.printStackTrace();
            }
        }
    }

    /***********************/
    private JLabel labelJam = new JLabel();
    private JLabel labelHari = new JLabel();

    private String HARI[] = {"Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jum`at", "Sabtu"};
    private String BULAN[] = {"Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"};

    private Thread threadJam;
}


Jika dijalankan hasilnya adalah sebagai berikut:





Download source code lengkap di sini.

Monday, August 24, 2009

Multithreading (bagian 1) - Animasi Titlebar


Microsoft dikenal sebagai siatem operasi multitasking, karena sistem operasi ini memungkinkan beberapa aplikasi berjalan secara bersamaan. Misalnya, sambil mengetik dokumen di Microsoft Word, dapat dilakukan sambil mendengarkan musik dengan Winamp. Istilah multitasking ini biasanya diberikan kepada sistem operasi yang memiliki kemampuan menjalankan beberapa aplikasi dalam waktu yang bersamaan.

Istilah multithreading diberikan untuk level aplikasi. Misalnya aplikasi Winamp. Saat kita mendengarkan musik atau melihat film di Winamp, pada titlebar ditampilkan tulisan judul lagu yang bergerak, waktu yang telah dilalui dan juga waktu yang tersisa serta jam sekarang. Kemampuan sebuah aplikasi menjalankan beberapa proses sekaligus inilah yang dinakaman multithreading.

Bahasa pemrograman yang mampu menghasilkan aplikasi multithreading
dinamakan bahasa pemerograman multithreading, misalnya Java, Visual Basic dan Delphi.

Penerapan multithreading pada Java.

Contoh penerapan multithreading pada Java misalnya aplikasi dengan tulisan pada titlebar yang bergerak yang akan kita bahas sebentar lagi.

Ada 2 (dua) cara menerapkan multithreading pada aplikasi Java.
Pertama, dengan membuat kelas turunan dari kelas java.lang.Thread
Kedua, dengan membuat kelas yang mengimplementasikan interface java.lang.Runnable

Sebuah aplikasi Java setidaknya harus memiliki satu thread, yaitu thread untuk menjalankan aplikasi Java itu sendiri. Untuk kasus animasi titlebar ini, terdapat dua thread, yaitu thread untuk mengubah titlebar dan thread untuk menjalankan aplikasi itu.

Pada aplikasi animasi titlebar ini misalnya kita menerapkan dua cara penerapan thread, yaitu membuat kelas turunan dari kelas Thread dan yang satunya dengan mengimplementasikan interface Runnable.

Thread pertama untuk menganimasi titlebar, buat dengan membuat kelas turunan dari kelas Thread, misalnya sebagai berikut:

package animasititlebar;

import javax.swing.JFrame;

public class ProsesTitleBar extends Thread
{
public ProsesTitleBar(JFrame titleBar, String judul)
{
this.titleBar = titleBar;
this.judul = judul;

start();
}

public void run()
{
String tampung1, tampung2;
int ambil = 0;
while(true)
{
tampung1 = judul.substring(0, ambil);
tampung2 = judul.substring(ambil, judul.length());
titleBar.setTitle(tampung2 + tampung1);
try
{
Thread.sleep(1000);
}
catch(InterruptedException i)
{
}
ambil++;
if(ambil == judul.length())
{
ambil = 0;
}
}
}

/*********************************/
private JFrame titleBar = new JFrame();
private String judul = new String();
}
sedangkan untuk thread utama digunakan implementasi dari interface Runnable, misalnya berikut:

package animasititlebar;

import javax.swing.SwingUtilities;
import javax.swing.JFrame;

/**
*
* @author Umar Faisol, S.Si
*/

public class Main implements Runnable
{
public void run()
{
System.out.println("Animasi TitleBar...");
JFrame.setDefaultLookAndFeelDecorated(true);
new AnimasiTitleBar().setVisible(true);
}

public static void main(String[] args)
{
SwingUtilities.invokeLater(new Main());

}
}
Hasilnya adalah sebagai berikut:


Download Source code AnimasiTitleBar.zip

Friday, July 31, 2009

Penanganan Transaksi pada JDBC

Sebelum menjelaskan penerapan transaksi pada JDBC (Java Database Connectivity), maka akan diuraikan terlebih dahulu tentang konsep transaksi.

Transaksi merupakan sekumpulan perintah SQL yang diperlakukan sebagai satu unit atau satu kesatuan dan diberikan satu penanganan error. JDBC menyediakan fasilitas auto-commit pada setiap statement maupun setelah sekelompok statement sukses atau gagal dijalankan kemudian memanggil methode commit atau rollback.

Penggunaan transaksi ini dimaksudkan untuk menjaga integritas data agar tetap valid.

Syarat transaksi adalah:
  1. Atomik
  2. Transaksi, meskipun terdiri dari beberapa perintah SQL tetapi diperlakukan sebagai satu kesatuan eksekusi. Semua jalan atau tidak sama sekali!.
  3. Konsisten
  4. Bila suatu transaksi selesai dijalankan database tatap dalam kondisi valid.
  5. Isolasi
  6. Saat dilakukan eksekusi, transaksi tersebut diisolasi pada tingkat isolasi tertentu yang sesuai dengan transaksi lain.
  7. Durabilitas
  8. Bila transaksi selesai, perubahan yang terjadi adalah permanen.

Transaksi biasanya diterapkan saat insert maupun delete record. Misalnya saat proses mahasiswa mengundurkan diri, maka data di tabel KRS, Registrasi dan Beasiswa harus dihapus, sedangkan di tabel Mahasiswa dilakukan update status.

Contoh penggunaan:

    Connection con = null;
    try
    {
        Class.forName(driver).newInstance();
        con = DriverManager.getConnection(koneksi, user, password);
        con.setAutoCommit(false);
            
        /* REGISTRASI */
        PreparedStatement pst1 = con.prepareStatement("DELETE FROM REGISTRASI WHERE 

NIM = ?");
        pst1.setString(1, Nim);
        pst1.executeUpdate();
        System.out.println("Hapus dari tabel REGISTRASI.... Selesai...");
                      
        /* KRS */
        PreparedStatement pst2 = con.prepareStatement("DELETE FROM KRS WHERE NIM = 

?");
        pst2.setString(1, Nim);
        pst2.executeUpdate();
        System.out.println("Hapus dari tabel KRS.... Selesai...");
                
        /* MAHASISWA */
        PreparedStatement pst3 = con.prepareStatement("UPDATE MAHASISWA SET Status = 

? WHERE NIM = ?");
        pst3.setString(1, "M");
        pst3.setString(2, Nim);
        pst.executeUpdate();
        System.out.println("Update status dari tabel MAHASISWA.... Selesai...");
             
        con.commit();
        con.setAutoCommit(true);
                
        System.out.println("Proses sukses...");
    }
    catch(Exception e)
    {
        e.printStackTrace();
        try
 {
         con.rollback();
 }
 catch(Exception e1)
 {
            e1.printStackTrace();
 }
    }

Mudah bukan? Anda dapat melakukan variasi yang lain sesuai kebutuhan.

Monday, May 25, 2009

Mail Merge dengan JasperReport - Passing Parameter ke JasperReport


Pada posting sebelumnya sudah disajikan cara menampilkan JasperReport di aplikasi Java. Kali ini akan disajikan pembuatan report tingkat mahir dengan memasukkan parameter ke dalam report.

Sebagai contoh kasus, akan diuraikan cara membuat Mail Merge atau surat massal, dengan ciri pembuatan surat massal yang mirip dengan sedikit perbedaan, misalnya tujuan surat, alamat, dan sebagainya. Untuk contoh sekarang misalnya membuat surat keterangan masih kuliah mahasiswa secara massal. Mahasiswa dibedakan ke dalam beberapa kelas.

Cara membuatnya:
  1. Buat desain report sesuai keinginan
  2. Tambahkan parameter dengan cara 
  • Buka view -- parameters
  • Klik tombol new
  • Beri nama parameter: KELAS
  • Pada type masukkan java.lang.String




  1. Buat desain report
  2. Edit query sehingga menjadi berikut:

SELECT
MAHASISWA."NIM" AS MAHASISWA_NIM,
MAHASISWA."NAMA" AS MAHASISWA_NAMA,
MAHASISWA."KELAS" AS MAHASISWA_KELAS
FROM
"APP"."MAHASISWA" MAHASISWA
WHERE
KELAS=$P{KELAS}






Langkah berikutnya tinggal menampilkannya ke aplikasi Java. Caranya mirip dengan posting sebelumnya:


    private void updateReport()
    {
        try
        {
            System.out.println("kompile report...");
            JasperDesign jasperDesign = JasperManager.loadXmlDesign("../report/mahasiswa.xml");
            JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
            System.out.println("Selesai!");
            
            System.out.println("Pass parameter ke report!");
            String kelasId = comboKelas.getSelectedItem().toString();
            
            Map parameter = new HashMap();
            parameter.put("KELAS", kelasId);
            System.out.println("Selesai!");
            
            System.out.println("Buka koneksi database!");
            Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
            Connection con = DriverManager.getConnection("jdbc:derby:mahasiswa");
            System.out.println("Selesai!");
            
            System.out.println("Buat JasperPrint!");
            JasperPrint jasperPrint = JasperManager.fillReport(jasperReport, parameter, con);
            System.out.println("Selesai!");
            
            System.out.println("Tampilkan report!");
            displayReport(new JRViewer(jasperPrint));
            //JasperViewer.viewReport(jasperPrint, false);
            System.out.println("Selesai!");
        }
        catch (Exception e)
        {
            JDialog.setDefaultLookAndFeelDecorated(true);
            JOptionPane.showMessageDialog(this, "Gagal tampilkan report!\n" + e);
        }


Setelah metode tersebut dibuat, tinggal memanggilnya pada klik tombol. Hasilnya adalah sebagai berikut:



Sebagai contoh tersebut digunakan Java 1.4.2. Anda dapat mengkompilasi ulang dengan Java versi terbaru.

Kode selengkapnya dapat didownload di sini.

Thursday, April 30, 2009

Membuat MenuBar Ala Windows Vista - Vista Style MenuBar


Sejak dirilisnya Windows Vista, terdapat banyak perubahan tampilan pada aplikasi yang berjalan padanya, berbeda dengan pada Sistem Operasi sebelumnya. Misalnya pada MS Office 2007, Paint dan sebagainya berubah dari segi tampilan menubarnya. Jika biasanya menubar berbentuk drop-dwon atau diklik kemudian muncul menu di bawahnya, akan tetapi untuk vista style, menubar berbentuk tab.

Tampilan model begini pun diikuti berbagai aplikasi yang lain dan sudah menjadi trend. Misalnya MindManager, NetOP dan Nitro PDF kesemuanya mengikuti gaya menubar yang sama.

Untuk membuat tampilan seperti itu pada aplikasi Java cukup mudah. Anda dapat menggunakan kelas javax.swing.JTabbedPane yang diletakkan dengan layout java.awt.BorderLayout.NORTH.

Untuk membuatnya, ikuti langkah berikut:
  1. Buat objek dari kelas javax.swing.JTabbedPane sebagai pengganti dari kelas javax.swing.JMenuBar
  2. Buat objek dari kelas javax.swing.JButton sebagai pengganti dari kelas javax.swing.JMenuItem
  3. Masukkan semua sub menu pada kelas javax.swing.JPanel
  4. Masukkan setiap objek dari kelas javax.swing.JPanel ke kelas javax.swing.JTabbedPane
  5. Tempelkan objek dari kelas javax.swing.JTabbedPane ke Frame utama dengan layout java.awt.BorderLayout.NOTH
  6. Selesai
Kode selengkapnya adalah sebagai berikut:


package umar.faisol.vistastyle;

import javax.swing.JFrame;
import javax.swing.WindowConstants;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.ImageIcon;
import javax.swing.JTabbedPane;
import javax.swing.BorderFactory;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Color;

public class MainForm extends JFrame
{
    public MainForm()
    {
        super("Vista Style");
        setSize(400, 350);
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        
        getContentPane().setLayout(new BorderLayout());
        getContentPane().add(menuVista(), BorderLayout.NORTH);
        getContentPane().add(tampilan(), BorderLayout.CENTER);
    }
    
    private JTabbedPane menuVista()
    {
        JTabbedPane tabbedPane = new JTabbedPane();
        
        tabbedPane.addTab("File", menuFile());
        tabbedPane.addTab("Edit", menuEdit());
        
        return (tabbedPane);
    }
    
    private JPanel menuFile()
    {
        JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT));
        
        ImageIcon baru = new ImageIcon("../gambar/baru.png");
        ImageIcon simpan = new ImageIcon("../gambar/simpan.png");
        ImageIcon keluar = new ImageIcon("../gambar/keluar.png");
        
        panel.add(new JButton("Baru", baru));
        panel.add(new JButton("Simpan", simpan));
        panel.add(new JButton("Keluar", keluar));
        
        return (panel);
    }
    
    private JPanel menuEdit()
    {
        JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT));
        
        ImageIcon cari = new ImageIcon("../gambar/cari.png");
        ImageIcon atur = new ImageIcon("../gambar/atur.png");
        
        panel.add(new JButton("Cari", cari));
        panel.add(new JButton("Atur", atur));
        
        return (panel);
    }
    
    private JPanel tampilan()
    {
        JPanel panel = new JPanel();
        panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.BLUE), "Tampilan Utama"));
        
        return (panel);
    }
}


Jika dijalankan, tampilannya adalah sebagai berikut:


Cukup mudah bukan???
Source code lengkap dapat didownload di sini.

Tuesday, April 7, 2009

Menampilkan JasperReport pada Aplikasi Java

Jika pada tulisan sebelumnya sudah dipelajari cara membuat desain report dengan iReport, maka hal paling penting adalah memanggil/menampilkan hasil desain tersebut ke dalam aplikasi Java. Untuk membuatnya, ikuti cara berikut:

Pertama, buat desain form sederhana dengan satu tombol seperti berikut:


Kedua, buat method dengan nama misalnya cetak(). Lakukan pemanggilan report pada method ini. Langkahnya:
1. Load desain xml-nya
JasperDesign jasperDesign = JasperManager.loadXmlDesign(".." + File.separator + "report" + File.separator + "mahasiswa.xml");

2. Kompilasi report

JasperReport jasperReport = JasperManager.compileReport(jasperDesign);

3. Buat koneksi ke database, variabel dari java.sql.Connection ini yang akan dijadikan argumen ke report.

Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance();
Connection con = DriverManager.getConnection("jdbc:derby://localhost:7539/mahasiswa", "sa", "umar");


4. Fill report dengan data yang diambil dari objek Connection dan parameter lain yang diperlukan.

JasperPrint jasperPrint = JasperManager.fillReport(jasperReport, new HashMap(), con);

5. Tampilkan report. Dapat digunakan JasperViewer atau JRViewer.
JasperViewer.viewReport(jasperPrint, false);

Jika kelima langkah tersebut selesai, panggil method cetak() tersebut pada tombol cetak pada methode actionPerformed().

Hasilnya adalah seperti berikut, mudah bukan?

Download source code di sini

Sunday, April 5, 2009

Java - Mudah Membuat Laporan dengan JasperReport

Pencetakan laporan merupakan bagian penting dalam pembuatan program. Pada Java SDK sudah disediakan API untuk pencetakan laporan. Akan tetapi, cara seperti ini sangat susah karena harus menentukan koordinat (x, y) secara manual dalam mencetak tulisan maupun gambar pada kertas.

Cara termudah dapat menggunakan JasperReport. Membuat laporan dengan JasperReport ini cukup mudah karena disediakan iReport sebagai designernya. Sebelum dimulai tutorialnya, silakan download versi terbarunya. Sebagai contoh akan dibuat report sederhana menggunakan wizard.

1. Untuk membuat laporan dengan JasperReport, pertama buat desain report dengan iReport.


2. Pada menu File pilih Report Wizard


3. Pada dialog iReport Wizard pilih New pada Connections/Data Sources
4. Pada Connections properties pilih Database JDBC connection
5. Kemudian isikan data berikut:
Name : Mahasiswa
JDBC Driver : org.apache.derby.jdbc.ClientDriver
User Name : sa
Password : umar
Anda dapat mengisi sesuai dengan database yang digunakan.
6. Setelah setting koneksi selesai klik Save

7. Kemudian kembali pada iReport Wizard klik Design query
Anda dapat memilih kolom apa saja (atau query) yang akan ditampilkan. Kemudian klik OK.


8. Pada fields selection pilih semua kolom >>, klik next
9. Pada group by pilih jenis kelamin
10. Pada layout pilih tabular layout, untuk jenisnya terserah Anda
11. Klik next dan finish
12. Ganti judulnya menjadi Report Mahasiswa
13. Simpan dan beri nama dengan mahasiswa.xml
14. Untuk mencoba menjalankan, pilih Build --> Execute (With active connection)

Hasilnya adalah sebagai berikut:


Anda dapat mengubah desainnya dengan drag-drop. Cukup mudah bukan?

Untuk dapat menampilkannya pada program Java, tunggu bagian selanjutnya ^_^

Thursday, April 2, 2009

Mengganti Dekorasi Window pada JFrame

Dekorasi Window pada JFrame

Untuk dapat membuat program Java standalone digunakan top level container, yaitu JFrame, JDialog, JWindow dan
JApplet. Pada unumnya untuk sebuah aplikasi digunakan kelas JFrame. Namun, tampilan dekorasi window default adalah seperti yang biasanya kita lihat, monoton.

Bagaimana cara merubah dekorasi window (window decoration) dari JFrame?


Ikuti langkah berikut!

Pertama, matikan (disable) dekorasi window. Ini dapat dilakukan dengan
memanggil method setUndecorated(true).
Kedua, atur style dari RootPane. Caranya dengan memanggil method setWindowDecorationStyle(argumen) dari RootPane.

Argumennya dapat diisi dengan syle sesuai selera. Isi dengan konstanta dari kelas JRootPane. Misalnya jika ingin tampilan dekorasi window dari JFrame seperti JFileChooser, maka argumen diisi

JRootPane.FILE_CHOOSER_DIALOG.

Untuk konstanta lain dari kelas JRootPane dapat dilihat pada dokumentasi Java.
Contoh kodenya adalah sebagai berikut:

public class Style extends JFrame implements Runnable
{
public Style()
{
super("Contoh Dekorasi Window");
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setUndecorated(true);
getRootPane().setWindowDecorationStyle(JRootPane.FILE_CHOOSER_DIALOG);
setSize(300, 300);
}

public void run()
{
setVisible(true);
}

public static void main(String args[])
{
SwingUtilities.invokeLater(new Style());
}
}

Setelah dikompilasi dan dijalankan, maka hasilnya adalah sebagaimana berikut:


Tampak tampilannya seperti kelas JFileChooser.

Selamat Mencoba!

Source code dapat didownload disini.

Tuesday, February 24, 2009

Menangani Item Listener pada JComboBox

Menangani Item Listener pada JComboBox

JComboBox
secara visual berbentuk komponen drop-down yang dapat digunakan untuk memilih item tertentu. Komponen ini menampilkan satu item dalam satu waktu. Kelas ini terdapat pada paket javax.swing sehingga nama lengkapnya adalah javax.swing.JComboBox.

Jika ingin mendeteksi perubahan item pada JComboBox, maka objek dari kelas ini perlu didaftarkan dengan method addItemListener(ItemListener i) dimana i adalah kelas yang mengimplementasikan interface ItemListener.

Contoh pendeteksian perubahan item pada kelas JComboBox adalah sebagai berikut,
Misalnya contoh kasus:
1) Terdapat sebuah JComboBox yang menyimpan kode barang
2) Jika user memilih kode (merubah item) pada JComboBox tersebut, maka secara otomatis menampilkan nama barang dan harga pada JTextField.

Untuk menjawab soal ini, pertama buat tampilan user interface dengan deklarasi misalnya seperti berikut:

private JLabel labelKode = new JLabel("Kode");
private JComboBox comboKode = new JComboBox();

private JLabel labelNama = new JLabel("Nama");
private JTextField textNama = new JTextField(15);

private JLabel labelHarga = new JLabel("Harga");
private JTextField textHarga = new JTextField(15);

Untuk tampilannya terserah saja. Jangan lupa untuk mendaftarkan item listener dengan method addItemListener(),

comboKode.addItemListener(this);

Variabel this ini menunjukkan bahwa kelas yang sekarang dibuat ini telah mengimplementasikan ItemListener. Pendeteksian perubahan item ini ditempatkan pada method itemStateChanged(),

public void itemStateChanged(ItemEvent ie)
{
String kode = comboKode.getSelectedItem().toString();
String data[] = ambilHarga(kode);

textNama.setText(data[0]);
textHarga.setText(data[1]);
}

ambilHarga(kode) adalah method yang digunakan untuk mengambil keterangan nama barang dan harganya dari database. Pada contoh ini digunakan database MS Access. Isi method ini adalah:

private String[] ambilHarga(String kode)
{
String harga[] = new String[2];
try
{
Class.forName("jstels.jdbc.mdb.MDBDriver").newInstance();
Connection conn = DriverManager.getConnection("jdbc:jstels:mdb:../Database/Penjualan.mdb");

Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT nama, harga FROM TabelBarang WHERE kode='" + kode + "'");

while (rs.next())
{
harga[0] = rs.getObject("nama").toString();
harga[1] = rs.getObject("harga").toString();
}

rs.close();
stmt.close();
conn.close();
}
catch(Exception e)
{
System.out.println(e);
}

return (harga);
}

Penjelasan tentang cara koneksi ke database dengan JDBC dapat dilihat pada postingan sebelumnya. Jika dijalankan hasilnya adalah sebagai berikut:


Source code lengkap dapat di download pada link ini.

Friday, February 20, 2009

Membuat Aplikasi Desktop dengan Netbeans

Membuat Aplikasi Desktop dengan Netbeans

Java saat ini menjadi pilihan handal untuk membuat aplikasi portable. Komitmen Indonesia untuk meninggalkan perangkat lunak ilegal dengan Gerakan Open Source menjadikan Java suatu pilihan tepat untuk mengembangkan aplikasi. Untuk membuat aplikasi Java menggunakan IDE Netbeans, ikuti langkah berikut:

1) Buka/jalankan aplikasi Netbeans Anda



2) Pilih File -> New Project atau klik ikon pada Toolbar
3) Pada Categories, pilih Java
4) Pada Projects, pilih Java Desktop Apllication


5) Pilih direktori tempat project berada dan beri nama project misalnya Programku
6) Jika sudah selesai klik Finish dan secara otomatis dibuatkan 3 file: ProgramkuApp.java, ProgramkuView.java dan ProgramkuAboutBox.java

7) Klik Run -> Run Project atau tekan F6 untuk mencoba menjalankan

8) Contoh hasil aplikasinya adalah seperti berikut:


Demikian contoh membuat aplikasi desktop Java dengan Netbeans. Namun jika Anda belum pernah membuat program Java sebelumnya disarankan untuk belajar mulai dari aplikasi konsol, mengkompilasi dari terminal/command prompt, setting classpath/path serta menjalankan dari command prompt/terminal. Biasanya jika belajar langsung dari aplikasi GUI dengan Netbeans akan kesulitan untuk menginstall program yang sudah dibuat di komputer client/tujuan. Kebanyakan tidak jalan karena salah setting path atau classpath-nya. Juga akan kesulitan jika menemui sedikit saja error.

Download source code