Archive for the ‘ NetBeans ’ Category

Tutorial cara install JDK dan NetBeans di Windows

Ada tutorial sederhana nih tentang tata cara Install JDK dan NetBeans di Microsoft Windows. Sangat sederhana tapi saya yakin berguna. Pada tutorial ini proses instalasi di lakukan pada Windows XP Profesional tetapi cara yang sama dapat dilakukan pada Windows yang lebih baru seperti Vista dan Seven. Oh iya tutorial ini sebenarnya adalah hasil pekerjaan dari salah satu mahasiswa yang ikut mata kuliah Pemrograman Visual yang saya ampu di Universitas Janabadra.

Penulisnya adalah abdul aziz, mahasiswa Teknik Informatika Universitas Janabadra Yogyakarta.
Tutorialnya dapat di download di sini.

Masalah baru Master-detail ! TableCellRenderer!

Salah satu teman saya yaitu si echo punya masalah dan telah berhasil menyelesaikannya. Kalau gak salah masalah yang dihadapi adalah master-detail di Java Swing nah kira-kira seperti dibawah ini hasil penyelesaian masalahnya.

Masalah diatas sudah diselesaikan oleh echo, tapi kok saya menemukan masalah baru. Antara lain :

  1. Tanggal lahir masih muncul secara komplit sampai ke detik-detiknya juga, bagaimana cara memperbaiki tampilan tanggal lahir agar sesuai dengan format yang diinginkan seperti 04-April-1990.
  2. Kolom Jenis kelamin juga baru menampilkan tampilan apa adanya seperti yang ada pada Enum JenisKelamin, bagaimana cara kita agar dapat menampilkan sesuai dengan keinginan.
  3. Bagaimana kalau data dari sebuah kolom bertipe double dan merupakan data berupa uang. Standar penulisan uang di Indonesia adalah simbol  “Rp.”, pemisah ribuan “.” dan koma “,” contohnya “Rp. 90.000,00”. Sedangkan default pada Java menggunakan standar amerika yaitu simbol “$”, pemisah ribuan “,” dan koma “.”.
  4. Apabila seorang mahasiswa mempunyai data berupa foto, bagaimana cara agar JTable dapat menampilkan data foto berupa gambar bukan hanya string.

Saya berfikir sejenak……………
Nah ketemu solusinya!!

Solusi tak lain dan tak bukan adalah TableCellRenderer yaitu Kelas yang digunakan untuk merender cell pada JTable sehingga kita bisa menentukan bagaimana format data dan komponen yang akan dimunculkan. Komponen yang dirender secara default oleh JTable adalah JLabel sehingga kita hanya perlu mengatur text yang tampil pada JTable, tetapi tidak menutup kemungkinan kita untuk merender komponen lain seperti JPanel.
TableCellRenderer didaftarkan pada JTable sesuai dengan type class pada setiap column, contoh TableCellRenderer untuk Date.class.

tabelMahasiswa.setDefaultRenderer(Date.class, new DateTableCellRenderer());
Source code diatas salah satu contoh pendaftaran TableCellRenderer dengan type Date.class. Oh iya untuk memastikan type dari column-column di JTable kita harus menambahkan sedikit kode program pada TableModel.

    @Override
    public Class<?> getColumnClass(int columnIndex) {
        switch (columnIndex) {
            case 0:
                return String.class;
            case 1:
                return String.class;
            case 2:
                return String.class;
            case 3:
                return Date.class;
            case 4:
                return Mahasiswa.JenisKelamin.class;
            case 5:
                return Image.class;
            default:
                return null;
        }
    }

Fungsi getColumnClass(int) merupakan hasil override dari kelas AbstractTableModel seperti halnya fungsi getColumnName(int). Pada NetBeans kita cukup menekan alt+insert, pilih ‘Override Method…’ kemudian pilih fungsi yang akan di override. Cara kerja fungsi getColumnClass(int) sama seperti fungsi getColumnName(int) kita harus menentukan secara manual type-type kolom sesuai dengan urutannya (ingat dimulai dari 0 bukan 1).

package org.jasoet.swing.cellrenderer;

import java.awt.Component;
import java.text.SimpleDateFormat;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableCellRenderer;

/**
 *
 * @author Deny Prasetyo
 */
public class DateTableCellRenderer extends DefaultTableCellRenderer {

    private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd MMMM yyyy");

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        JLabel component = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        component.setHorizontalAlignment(SwingConstants.CENTER);
        component.setText(simpleDateFormat.format(value));

        return component;
    }
}

Source code diatas merupakan solusi untuk masalah nomor 1. Kita hanya perlu memformat data yang berupa date menggunakan kelas SimpleDateFormat. Pattern yang digunakan kali ini adalah “dd MMMM yyyy” yang akan menghasilkan format tanggal seperti “01 January 2010”, untuk pattern-pattern yang lain bisa dilihat di dokumentasi kelas SimpleDateFormat.
Hasil dari format kelas SimpleDateFormat cukup kita masukkan sebagai properti text pada komponen JLabel dan apabila perlu kita atur juga alignment agar rata tengah (Center).Oh iya untuk membuat custom TableCellRender kita hanya perlu membuat kelas turunan dari DefaultTableCellRenderer dan meng-override fungsi getTableCellRendererComponent.
Nah masalah nomor 1 sudah selesai sekarang kita lanjut ke nomor 2. Konsep untuk menyelesaikan nomor 2 hampir sama seperti pada nomor 1. Pada dasarnya Enum merupakan sebuah kelas sehingga kita hanya perlu membuat sebuah TableCellRenderer dan mendaftarkannya untuk type JenisKelamin.class.

tabelMahasiswa.setDefaultRenderer(JenisKelamin.class, new JenisKelaminTableCellRenderer());
package org.jasoet.swing.cellrenderer;

import java.awt.Component;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableCellRenderer;
import khannedy.blogging.masterdetail.entity.Mahasiswa.JenisKelamin;

/**
 *
 * @author Deny Prasetyo
 */
public class JenisKelaminTableCellRenderer extends DefaultTableCellRenderer {

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        JLabel component = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        component.setHorizontalAlignment(SwingConstants.CENTER);
        JenisKelamin jk = (JenisKelamin) value;
        if (jk == JenisKelamin.LakiLaki) {
            component.setText("Laki-Laki");
        } else {
            component.setText("Perempuan");
        }
        return component;
    }
}
 

Untuk menyelesaikan masalah nomor 3 dan 4 kita harus menambahkan beberapa field pada kelas Mahasiswa dan MataKuliah karena pada program yang dibuat echo tidak menyertakan contoh field berupa double dan image.

Tambahkan 1 field berupa String dengan mana urlFoto. Field ini nanti akan berisi nama file gambar yang dimaksudkan sebagai Foto.


private String urlFoto;
 public String getUrlFoto() {
 return urlFoto;
 }

 public void setUrlFoto(String urlFoto) {
 this.urlFoto = urlFoto;
 }

Tambahkan 2 field yaitu sks dan biaya pada kelas MataKuliah, Sks bertipe Integer dan Biaya bertipe Double.  Untuk 2 field ini sudah jelas kan kegunaannya.


private int sks;
private Double biaya;

public Double getBiaya() {
return biaya;
}

public void setBiaya(Double biaya) {
this.biaya = biaya;
}

public int getSks() {
return sks;
}

public void setSks(int sks) {
this.sks = sks;
}

Dengan bertambahnya 1 field pada kelas Mahasiswa dan 2 Field pada otomatis kita diharuskan untuk mengedit TableModelMahasiswa,TableModelMataKuliah dan MahasiswaService.

TableModelMahasiswa.java


package khannedy.blogging.masterdetail.model;

import java.awt.Image;
import java.util.Date;
import java.util.List;
import javax.swing.table.AbstractTableModel;
import khannedy.blogging.masterdetail.entity.Mahasiswa;

public class TableModelMahasiswa extends AbstractTableModel {

private List<Mahasiswa> list;

public TableModelMahasiswa(List<Mahasiswa> list) {
this.list = list;
}

public List<Mahasiswa> getList() {
return list;
}

public int getRowCount() {
return list.size();
}

public int getColumnCount() {
return 6; //Edited by Jasoet
}

@Override
public String getColumnName(int column) {
switch (column) {
case 0:
return "Nim";
case 1:
return "Nama Depan";
case 2:
return "Nama Belakang";
case 3:
return "Tanggal Lahir";
case 4:
return "Jenis Kelamin";
//Added by Jasoet [start]
case 5:
return "Foto";
//Added by Jasoet [end]
default:
return null;
}
}

public Object getValueAt(int rowIndex, int columnIndex) {
switch (columnIndex) {
case 0:
return list.get(rowIndex).getNim();
case 1:
return list.get(rowIndex).getNamaDepan();
case 2:
return list.get(rowIndex).getNamaBelakang();
case 3:
return list.get(rowIndex).getTanggalLahir();
case 4:
return list.get(rowIndex).getJenisKelamin();
//Added by Jasoet [start]
case 5:
return list.get(rowIndex).getUrlFoto();
//Added by Jasoet [end]
default:
return null;
}
}

//Added by Jasoet [start]
@Override
public Class<?> getColumnClass(int columnIndex) {
switch (columnIndex) {
case 0:
return String.class;
case 1:
return String.class;
case 2:
return String.class;
case 3:
return Date.class;
case 4:
return Mahasiswa.JenisKelamin.class;
case 5:
return Image.class;
default:
return null;
}
}
//Added by Jasoet [end]
}

TableModelMataKuliah.java


package khannedy.blogging.masterdetail.model;

import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;
import khannedy.blogging.masterdetail.entity.MataKuliah;

public class TableModelMataKuliah extends AbstractTableModel {

private List<MataKuliah> list = new ArrayList<MataKuliah>();

public void setList(List<MataKuliah> list) {
this.list = list;
fireTableDataChanged();
}

public int getRowCount() {
return list.size();
}

public int getColumnCount() {
return 4;//Edited by Jasoet
}

@Override
public String getColumnName(int column) {
switch (column) {
case 0:
return "Kode";
case 1:
return "Nama";
//Added by Jasoet [start]
case 2:
return "SKS";
case 3:
return "Biaya";
//Added by Jasoet [end]
default:
return null;
}
}

public Object getValueAt(int rowIndex, int columnIndex) {
switch (columnIndex) {
case 0:
return list.get(rowIndex).getKode();
case 1:
return list.get(rowIndex).getNama();
//Added by Jasoet [start]
case 2:
return list.get(rowIndex).getSks();
case 3:
return list.get(rowIndex).getBiaya();
//Added by Jasoet [end]
default:
return null;
}
}

//Added by Jasoet [start]
@Override
public Class<?> getColumnClass(int columnIndex) {
switch (columnIndex) {
case 0:
return String.class;
case 1:
return String.class;
case 2:
return Integer.class;
case 3:
return Double.class;
default:
return null;
}
}
//Added by Jasoet [end]
}

MahasiswaService.java


package khannedy.blogging.masterdetail.service;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import khannedy.blogging.masterdetail.entity.Mahasiswa;
import khannedy.blogging.masterdetail.entity.MataKuliah;

public class MahasiswaService {

 public List<Mahasiswa> getAllMahasiswa(Integer count) {
 List<Mahasiswa> mahasiswas = new ArrayList<Mahasiswa>();

 for (int i = 0; i < count; i++) {
 if (i % 4 == 0) {
 Mahasiswa mahasiswa = createMahasiswa("10106031", "Eko Kurniawan", "Khannedy", new Date(), Mahasiswa.JenisKelamin.LakiLaki,"p.png");
 mahasiswa.add(createMataKuliah("IF3456", "Sistem Informasi Geografis",3,90000));
 mahasiswa.add(createMataKuliah("IF3457", "Komputer Grafika",3,80000));
 mahasiswa.add(createMataKuliah("IF3458", "Rekayasa Perangkat Lunak",2,12000));
 mahasiswa.add(createMataKuliah("IF3459", "Pemrograman Berorientasi Objek",4,45000));
 mahasiswas.add(mahasiswa);
 } else if (i % 4 == 1) {
 Mahasiswa mahasiswa = createMahasiswa("10106032", "Tini", "Sumarni", new Date(), Mahasiswa.JenisKelamin.Perempuan,"7.png");
 mahasiswa.add(createMataKuliah("IF3413", "Algoritma dan Pemrograman Lanjutan",1,21000));
 mahasiswa.add(createMataKuliah("IF3489", "Kewirausahaan",3,23000));
 mahasiswa.add(createMataKuliah("IF3468", "Manajemen Proyek",4,45000));
 mahasiswa.add(createMataKuliah("IF3499", "Sistem Basis Data",3,16000));
 mahasiswas.add(mahasiswa);
 } else if (i % 4 == 2) {
 Mahasiswa mahasiswa = createMahasiswa("10106032", "Tono", "Sumarno", new Date(), Mahasiswa.JenisKelamin.LakiLaki,"8.png");
 mahasiswa.add(createMataKuliah("IF3412", "Algoritma dan Pemrograman",5,23000));
 mahasiswa.add(createMataKuliah("IF3457", "Komputer Grafika",2,40000));
 mahasiswa.add(createMataKuliah("IF3468", "Manajemen Proyek",1,50000));
 mahasiswa.add(createMataKuliah("IF3449", "Pengolahan Citra",2,23000));
 mahasiswas.add(mahasiswa);
 } else {
 Mahasiswa mahasiswa = createMahasiswa("10106022", "Rina", "Sholihat", new Date(), Mahasiswa.JenisKelamin.Perempuan,"12.png");
 mahasiswa.add(createMataKuliah("IF3412", "Algoritma dan Pemrograman",2,45000));
 mahasiswa.add(createMataKuliah("IF3489", "Kewirausahaan",3,25000));
 mahasiswa.add(createMataKuliah("IF3466", "Database Lanjut",4,40000));
 mahasiswa.add(createMataKuliah("IF3423", "Pengenalan Ilmu Komputer",2,29000));
 mahasiswas.add(mahasiswa);
 }
 }

 return mahasiswas;
 }

 protected MataKuliah createMataKuliah(String code, String name,int sks,double biaya) {
 MataKuliah mataKuliah = new MataKuliah();
 mataKuliah.setKode(code);
 mataKuliah.setNama(name);
 mataKuliah.setSks(sks);
 mataKuliah.setBiaya(biaya);
 return mataKuliah;
 }

 protected Mahasiswa createMahasiswa(String nim, String namaDepan,
 String namaBelakang, Date tanggalLahir,
 Mahasiswa.JenisKelamin jenisKelamin,String urlFoto) {

 Mahasiswa mahasiswa = new Mahasiswa();
 mahasiswa.setJenisKelamin(jenisKelamin);
 mahasiswa.setNamaBelakang(namaBelakang);
 mahasiswa.setNamaDepan(namaDepan);
 mahasiswa.setNim(nim);
 mahasiswa.setTanggalLahir(tanggalLahir);
 mahasiswa.setUrlFoto(urlFoto);
 return mahasiswa;
 }
}

Setelah itu kita perlu membuat 2 buah TableCellRenderer lagi yaitu ImageTableCellRenderer dan DoubleTableCellRenderer.

ImageTableCellRenderer.java

package org.jasoet.swing.cellrenderer;

import java.awt.Component;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableCellRenderer;

/**
 *
 * @author Deny Prasetyo
 */
public class ImageTableCellRenderer extends DefaultTableCellRenderer {

 private String imageLocation = "/org/jasoet/swing/images/";

 @Override
 public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
 if (isSelected) {
 JLabel component = new JLabel();
 URL resource = getClass().getResource(imageLocation + value);
 ImageIcon imageIcon = new ImageIcon(resource);

 component.setIcon(imageIcon);
 component.setText("");
 component.setHorizontalAlignment(SwingConstants.CENTER);
 int currentHeight = table.getRowHeight(row);
 int currentRowWidth = table.getColumnModel().getColumn(column).getPreferredWidth();

 if (currentHeight < imageIcon.getIconHeight()) {
 table.setRowHeight(row, imageIcon.getIconHeight());
 }
 if (currentRowWidth < imageIcon.getIconWidth()) {
 table.getColumnModel().getColumn(column).setPreferredWidth(imageIcon.getIconWidth());
 }

 return component;
 } else {
 JLabel component = new JLabel();

 component.setText("" + value);
 component.setHorizontalAlignment(SwingConstants.CENTER);
 table.setRowHeight(row, 16);

 return component;
 }
 }
}

DoubleCellRenderer.java


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.jasoet.swing.cellrenderer;

import java.awt.Component;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.Locale;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableCellRenderer;

/**
 *
 * @author Deny Prasetyo
 */
public class DoubleCellRenderer extends DefaultTableCellRenderer {

 private DecimalFormat decimalFormat;

 public DoubleCellRenderer() {
 Locale idLocale = new Locale("id");
 DecimalFormatSymbols dfs = new DecimalFormatSymbols(idLocale);
 dfs.setCurrencySymbol("Rp. ");
 decimalFormat = new DecimalFormat("\u00A4##,###.##", dfs);
 }

 @Override
 public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
 JLabel component = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
 component.setHorizontalAlignment(SwingConstants.RIGHT);
 component.setText(decimalFormat.format(value));

 return component;
 }
}

Hasilnya kira-kira sperti ini.

Untuk kode program komplit  bisa di-checkout menggunakan Subversion di https://jasoet.googlecode.com/svn/tags/master-detail atau download file zipnya di sini.

Local Mirror NetBeans

Sekarang sudah tersedia mirror local untuk downlad NetBeans. Temen-temen yang kesulitan download dari netbeans.org atau yang dikampusnya ada koneksi IIX atau INHERENT bisa coba download disini. Versi yang disediakan mulai dari versi 6.1 sampai versi yang terbaru, untuk saat ini yang terbaru adalah versi 6.8 semoga nanti ketika ada versi yang lebih baru mirror local ini langsung menyediakan.

Contoh Program Apotik Java Swing

Saya sudah upload Contoh Program Apotik yang dibuat pakai Java Swing. Pattern yang saya gunakan DAO JDBC trus sudah komplit dengan Reporting. Program ini sudah lama saya buat trus bingung mau diapakan. Oh iya ini bukan program Apotik yang siap dipakai di Apotik beneran cuma program untuk belajar.
Kalau mau cobain monggi di Checkout pakai Subversion ke alamat
https://jasoet.googlecode.com/NewApotik
Untuk cara Checkout pakai NetBeans bisa dilihat disini dibagian agak bawah. Atau kalau tidak mau Checkout pakai NetBeans/Subversion bisa donlot file *.zip berbentuk NetBeans project disini.
Saya tidak sertakan library yang dibutuhkan karena cukup besar tapi saya sertakan juga daftar library yang perlu ditambahkan.
Selamat mencoba !!!!

Welcome NetBeans 6.7

NetBeans versi terbaru sudah rilis yaitu versi 6.7. Rilis NetBeans ini tepat pada tanggal yang telah di rencanakan yaitu tanggal 29 Juni 2009. NetBeans versi ini lebih stabil dibanding rilis awal dari NetBeans 6.5 dan pada versi ini NetBeans 6.7 dirasa relatif lebih ringan dibanding versi 6.5. Pada versi ini ada fitur yang dapat mengaktifkan/menonaktifkan modul secara mudah sehingga kita bisa mengatur NetBeans sesuai dengan kebutuhan kita saat ini.

Selain fitur diatas ada beberapa fitur lain termasuk satu fitur yang cukup digembar-gemborkan yaitu integrasi dengan project Kenai. Nah apa project Kenai ini ? Menurut sumber yang terpercaya 🙂 yaitu situsnya Sun, NetBeans.org dan tentu saja kenai.com. Project kenai ini bisa dibilang sebagai sourceforge++ atau googlecode++ karena didalamnya tidak hanya tersedia server Subversion tapi juga bug tracking,forum, download, milis, wiki dan bahkan ada chat room. Beberapa sumber malah mengatakan bahwa project kenai dapat jadi sosial networking untuk para developer Java. Untuk lebih jelas bisa lihat di project kenai overview.
NetBeans 6.7 ini juga sudah support framework Qt untuk C++ seperti pada postingan sebelumnya. Selain itu Maven support yang pada versi 6.5 harus download lewat plugin manager untuk versi 6.7 sudah bundle. Jadi sekarang kita bisa memilih untuk tetap pakai Ant untuk build sistemnya atau ganti ke Maven yang sedikit lebih canggih dan lebih membantu (tapi butuh koneksi internet yang lumayan 🙂 ). Kapan-kapan kita akan bahas tentang maven, tunggu saja.

Bersamaan dengan rilisnya versi 6.7 ini ditambahkan juga beberapa tutorial tentang penggunaan fitur-fitur baru pada NetBeans 6.7 silahkan cek sendiri di netbeans.org.
Oke tunggu apa lagi segera download NetBeans 6.7 dan gunakan !!!!!!

Mengenal Qt

Qt yang di baca “cute” adalah UI framework dan platform yang ditulis dengan bahasa C++, ada yang inget dengan KDE salah satu desktopnya linux selain Gnome, kalau di Ubuntu pakenya Gnome kalau Kubuntu pakenya KDE. Nah Qt ini yang dipakai untuk membuat KDE beserta applikasi-applikasi yang berada didalamnya.
Qt sebelumnya dimiliki oleh perusahaan yang bernama Trolltech dan sekarang perusahaan tersebut telah dibeli oleh Nokia. Qt framework tersedia secara gratis dan multiplatform (ada versi untuk linux, windows dan Mac).

Kita bisa menggunakan Qt dengan 2 bahasa yaitu C++ sebagai bahasa utama dan Python dengan menggunakan PyQt. Sekarang saya menggunakan C++ pada Qt. Ya tujuan utamanya adalah belajar C++ juga :).
Nah Qt ini menyediakan Qt GUI Designer untuk mempermudah desain User Interface selain itu juga ada Qt Assistance yang berisi dokumentasi kelas-kelas pada Qt beserta beberapa tutorial serta ada Qt Linguist yang berguna ketika kita ingin membuat aplikasi Qt yang multilanguage. Ketika Tool tersebut sekarang telah dikumpulkan jadi satu pada tool bernama Qt Creator.

Selain Qt Creator tersedia juga plugin untuk eclipse dan visual studio. Pada eclipse maupun visual studio tool-tool seperti Gui Designer, Qt Assistance, dan Qt Linguist telah terintegrasi didalam IDE tersebut. Sedangkan untuk NetBeans versi 6.7 juga telah tersedia plugin Qt yang telah digabung dengan NetBeans CDT (Netbeans untuk C++) walaupun tool-tool seperti Gui Designer, Qt Assistance, dan Qt Linguist masih menggunaakan tool external walaupun dapat langsung diakses dari dalam NetBeans. Plugin untuk eclipse dan Visual Studio dapat di download secara gratis di situs resmi Qt sedangkan untuk NetBeans plugin Qt sudah di bundle pada NetBeans versi 6.7.
Untuk memulai Qt terlebih dahulu kita harus mendownload Qt Framework. Qt Framework dapat di download secara terpisah atau bundle dengan Qt Creator. Untuk yang versi linux Qt Framework berbentuk tar.gz sehingga untuk instalasi kita cukup meng-extrack file tersebut ke tempat yang diinginkan contoh /opt. Setelah itu kita harus menambahkan direktori /bin kedalam system path pada environtment variable. Kebetulan saya menggunakan linux mint (ubuntu) maka environtment berada pada file /etc/environtment. Qt juga membutuhkan compiler C++, pada linux kita cukup menginstall gcc/g++ standar untuk dapat menggunakan Qt Framework. Sedangkan untuk windows kita dapat menggunakan MinGW.
Saya baru mencoba Qt untuk linux sedangkan untuk windows dan mac saya belum pernah coba sehingga tidak banyak tahu konfigurasi  qt untuk kedua sistem operasi tersebut.
Saya sendiri menggunakan Netbeans versi 6.7 untuk mendevelop Qt, ini dikarenakan saya sudah sangat terbiasa dengan editor yang ada pada NetBeans selain itu code completion di NetBeans masih lebih bagus dibanding Qt Creator maupun Eclipse (versi saya lho :)). Untuk konfigurasi Qt pada NetBeans tidak banyak yang harus dilakukan asalkan Qt telah di set pada environtment variable dan kita dapat mengakses command “qmake” pada console maka Netbeans dapat digunakan dengan baik.

Menambahkan Custom Palette pada NetBeans

Kita akan mencoba menambahkan Custom Palette dari library. Kali ini kita akan mencoba menambahkan Komponen Swing dari Library JCalendar. Untuk library Swing yang lain caranya akan sama.

Langkah-langkahnya :

  1. Download dulu library JCalendar kalau belum punya.
  2. Daftarkan library JCalendar tersebut lewat Library Manager, bisa diakses lewat Tools -> Libraries. Beri nama “JCalendar” dan masukkan File jar yang telah di download sebelumnya.
  3. Setelah library di daftarkan. Sekarang klik Tools -> Palette -> Swing/AWT Component.
  4. Buat sebuah kategori baru dengan mengklik button “New Category” dan beri nama “JCalendar”.
  5. Klik “Add From Library” kemudian pilih Library JCalendar yang telah dibuat pada langkah 2. Dan klik Next.

  6. “Add From Library” digunakan apabila library JCalendar telah kita daftarkan seperti pada langkah ke 2 tetapi apabila ingin mengambil komponen Swing dari file jar lain tanpa di daftarkan ke Library maka gunakan “Add From JAR”. Tetapi Saya lebih menganjurkan untuk memasukkan dahulu file-file JAR tersebut menjadi sebuah library seperti pada langkah ke 2. Karena apabila Custom Palette yang kita gunakan maka Library yang dibutuhkan akan langsung ditambahkan kedalam Project kita.

  7. Setelah library di load oleh NetBeans maka akan muncul daftar Beans (Class) yang dapat di masukkan sebagai Custom Palette. Pilih kemudian klik Next.

  8. Perlu diingat tidak semua Bean/Class dibutuhkan dan kita harus tahu Bean/Class apa saja yang kita butuhkan. Pada JCalendar silahkan pilih nama Class yang mempunyai Bean Info seperti pada gambar diatas.

    Bean Info merupakan Class yang mengidentifikasi sebuah Bean/Class sehingga Bean/Class yang di identifikasikan akan mempunyai karakteristik berbeda seperti Nama, Icon dan lain-lain.

    Penamaan dari Bean Info biasanya hanya nama Class yang akan diidentifikasi ditambah dengan kata BeanInfo contohnya “JDayChooser” memiliki Bean Info “JDayChooserBeanInfo”.

    Lebih jelas tentang Bean Info akan saya bahas pada posting selanjutnya.

  9. Setelah memilih Bean apa saja yang akan dijadikan Custom Palette silahkan pilih kategori mana yang akan menjadi penampung Komponen-komponen baru tersebut. Karena kita sudah membuat categori baru seperti pada langkah 4 maka pilih kategori “JCalendar”.
  10. Komponen Baru siap di Gunakan.