Jumat, 31 Desember 2010

Memperindah tampilan TableHeader dengan icon

TableHeader merupakan header pada JTable yang digunakan untuk menunjukan nama kolom. Dengan memodifikasi class yang mengimplement interface TableCellRenderer kita dapat membuat tampilan cell suatu tabel sesuai keinginan kita, baik itu cell pada isi tabel maupun cell pada header tabel. Gambar di bawah ini merupakan sebuah contoh tampilan dari header table yang dapat menampilkan icon.



Silahkan download projectnya disini

TableHeader.rar

Membatasi input pada jTextField

JTextField merupakan sebuah component dari java swing yang berguna untuk menerima inputan dari user. Kadang jika kita akan membuat sebuah textfield untuk tipe data tertentu, kita ingin membatasi inputnya. Misal kita ingin membuat sebuah textfield untuk no telpon. Kita menginginkan client hanya dapat memasukkan input dengan jumlah maximal 15 karakter, selain itu karakter yang dimasukan harus berupa angka dan tanda-tanda yang digunakan untuk menyimpan no telpon, seperti #, +, *. Untuk membuatnya kita hanya perlu mengubah setting document pada component jTextField. Tetapi sebelumnya kita harus membuat sebuah class baru yang diturunkan dari class PlainDocument untuk kita modifikasi sesuai kebutuhan kita.


import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author hauw
*/
public class PhoneValidator extends PlainDocument {

private int maxCharacter;
private boolean phoneOnly;
private String phoneChars = "+#*0123456789";

public PhoneValidator() {
this(-1, false);
}

public PhoneValidator(int maxCharacter, boolean phoneOnly) {
this.maxCharacter = maxCharacter;
this.phoneOnly = phoneOnly;
}

@Override
public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
if (phoneOnly) {
if (maxCharacter == -1) {
if (checkString(str)) {
super.insertString(offs, str, a);
}
} else {
int panjangTextLama = getLength();
int panjangTextBaru = str.length();
if ((panjangTextLama + panjangTextBaru) <= maxCharacter) {
if (checkString(str)) {
super.insertString(offs, str, a);
}
}
}
} else {
if (maxCharacter == -1) {
super.insertString(offs, str, a);
} else {
int panjangTextLama = getLength();
int panjangTextBaru = str.length();
if ((panjangTextLama + panjangTextBaru) <= maxCharacter) {
super.insertString(offs, str, a);
}
}
}
}

private boolean checkString(String input) {
boolean result = false;
for (int i = 0; i < input.length(); i++) {
if (phoneChars.indexOf(input.charAt(i)) == -1) {
result = false;
break;
} else {
result = true;
}
}
return result;
}
}


Setelah kita selesai membuat class untuk validasinya, sekarang saatnya kita mencoba untuk membatasi input pada jTextField kita. Misal kita memiliki sebuah JTextField dengan nama variabel textNoTelpon. untuk mengubah validasinya menjadi maximal 15 karakter dan hanya dapat diberikan input berupa no telpon, kita dapat melakukannya dengan cara seperti berikut.


import javax.swing.JFrame;
import javax.swing.JTextField;

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

/**
*
* @author hauw
*/
public class TestValidasi {
public static void main(String[] args) {
JFrame frame = new JFrame("Test validasi text field");

JTextField textNoTelpon = new JTextField();
textNoTelpon.setDocument(new PhoneValidator(15, true));

frame.add(textNoTelpon);
frame.setVisible(true);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

Selasa, 03 Agustus 2010

Convert decimal ke biner

Bilangan desimal adalah bilangan dengan basis 10, atau yang biasanya kita pakai sehari-hari. Bilangan biner merupakan bilangan dengan basis 2. Bilangan ini hanya terdiri dari 2 angka, yaitu 0 dan 1. Mungkin banyak yang udah tau ya caranya konversi bilangan desimal ke biner, tapi iseng2 aja aku posting caranya dengan bahasa java.


public String convertToBinary(int number) {
String binary = "";
while(number != 0) {
binary += number%2;
number /= 2;
}
return new StringBuffer(binary).reverse().toString();
}


Oh iya, sebenarnya class Integer sendiri juga sudah menyediakan method untuk mengkonversi bilangan desimal menjadi biner. Tinggal kita panggil aja method toBinaryString() dari class Integer. Contohnya seperti di bawah ini:


int number = 10;
String binary = Integer.toBinaryString(number);

Perfect Number pada Java

Perfect number adalah suatu bilangan yang seluruh faktornya jika dijumlahkan akan bernilai sama dengan bilangan tersebut. Contohnya adalah 6. --->
Faktor dari 6: 1, 2, 3
Hasil dari penjumlahan faktor-faktornya bernilai sama dengan bilangan itu sendiri, maka 6 merupakan perfect number. Di bawah ini adalah source code untuk mencari perfect number dengan java.


public class PerfectNumber {

public static void main(String[] args) {
System.out.println("Perfect numbers from 1 to 650");
for (int i = 1; i < 10000; i++) {
searchPerfectNumber(i);
}
}

public static void searchPerfectNumber(int number) {
int sum = 0;
for (int divisor = 1; divisor < number; divisor++) {
if ((number % divisor) == 0) {
sum += divisor;
}
}
if (sum == number) {
System.out.println(number + " is a perfect number");
}

}
}

Rabu, 23 Juni 2010

Javadoc Comment

Comment adalah sebuah pesan dalam program yang digunakan untuk memperjelas suatu source code. Comment dalam java terbagi menjadi 3:

1. Single-line comment, contoh:
// Ini adalah single-line comment

2. Multiple-line comment, contoh:
/*
Ini adalah multiple line comment
*/

3. Javadoc comment, contoh:
/**
Ini adalah javadoc comment
*/

Perbedaan javadoc comment dengan kedua comment yang lainnya adalah javadoc comment dapat digenerate ke dalam dokumentasi program. Supaya ngerti langsung aja saya beri contoh.

1. Buat sebuah file java baru.


2. Simpan file tersebut dengan nama JavaDocTest.java
3. Buka command prompt dan pindah ke direktori dimana file tersebut anda simpan(Contoh file ini saya simpan di drive D, pada folder myjavaprograms/javadoc).
4. Ketikkan javadoc JavaDocTest.java -d javadoc

5. Setelah itu akan tercipta folder javadoc tempat dimana javadoc untuk program java anda tersimpan.
6. Untuk melihatnya, bukalah file index.html.
Pada file tersebut akan terdapat comment yang tadi anda tulis dengan menggunakan style javadoc comment. Jika kita menulis dengan menggunakan style single-line comment atau multi-line comment, maka comment kita tidak akan ditampilkan pada javadoc.

Rabu, 16 Juni 2010

new Integer(i) == i ???

System.out.println(new Integer(10) == new Integer(10));//false

Kedua operand adalah Integer yang merupakan reference type, sehingga == akan membandingkan alamat reference mereka.

System.out.println(new Integer(10) == 10);//true

Operand sebelah kanan merupakan tipe numerik, sehingga == akan membandingkan nilai dari kedua operand tersebut dan bukan referencenya.

Senin, 31 Mei 2010

Menampilkan bilangan fibonaci

Udah pada tau kan bilangan fibonaci itu apa? nah bilangan fibonaci itu bilangan yang hasilnya sama dengan penjumlahan bilangan-bilangan sebelumnya. Contohnya kalo kita punya 4 buah bilangan. Bilangan pertama dan kedua itu selalu 0 dan 1. Bilangan ketiga = hasil penjumlahan dari bilangan pertama dan kedua yaitu 1. Bilangan ke-4 nya ya ditambahin lagi semuanya. Nich source code buat tampilin bilangan fibonaci di java.


public class Fibonaci {

public static void main(String[] args) throws IOException {
String input;
int n = 0;
int temp = 0;
int[] array;
System.out.print("Input: ");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
input = br.readLine();
if (input.equals("fibonaci")) {
System.out.print("Masukkan jumlah n: ");
try {
n = Integer.parseInt(br.readLine());
array = new int[n];
System.out.println("Deret Fibonaci:");
for (int i = 0; i < array.length; i++) {
if (i == 0) {
array[i] = 0;
} else if (i == 1) {
array[i] = 1;
} else {
temp = 0;
for (int j = 0; j < i; j++) {
temp += array[j];
array[i] = temp;
}
}
System.out.println(array[i]);
}
} catch (NumberFormatException numberFormatException) {
System.out.println("Masukkan angka yang benar");
}

} else {
System.out.println("Input Salah");
}
}
}


Oh iya, input nya masukin fibonaci dulu. Kalo ngga bakalan keluar pesan input salah.

Membuat Belah Ketupat Tanpa Isi dengan Java

Kalau bikin aplikasi java buat tampilin belah ketupat kan udah biasa. Nah, kali ini aku dapet tugas untuk bikin belah ketupat yang gak ada isinya. Langsung aja deh ni source codenya silahkan dicoba.


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class BelahKetupat {

public static void main(String[] args) throws IOException{
int tinggi, setengahTinggi;
String input;
System.out.println("Masukkan tinggi:");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
input = br.readLine();
tinggi = Integer.parseInt(input);
int l = 1;
if (tinggi%2 == 0) {
setengahTinggi = tinggi/2;
for (int i = 0; i < setengahTinggi; i++) {
for (int j = setengahTinggi; j > i; j--) {
System.out.print(" ");
}
for (int k = 1; k <= l; k++) {
if (k == 1 || k == l) {
System.out.print("*");
} else {
System.out.print(" ");
}
}
l += 2;
System.out.println();
}
l -= 2;
for (int i = 0; i < setengahTinggi; i++) {
for (int j = 0; j <= i; j++) {
System.out.print(" ");
}
for (int j = l; j > 0; j--) {
if (j == 1 || j == l) {
System.out.print("*");
} else {
System.out.print(" ");
}
}
l -= 2;
System.out.println();
}
} else {
setengahTinggi = (tinggi / 2);
for (int i = 0; i < setengahTinggi; i++) {
for (int j = setengahTinggi; j >= i; j--) {
System.out.print(" ");
}
for (int k = 1; k <= l; k++) {
if (k == 1 || k == l) {
System.out.print("*");
} else {
System.out.print(" ");
}
}
l += 2;
System.out.println();
}
for (int i = 0; i < tinggi-setengahTinggi; i++) {
for (int j = 0; j <= i; j++) {
System.out.print(" ");
}
for (int j = l; j > 0; j--) {
if (j == l || j == 1) {
System.out.print("*");
} else {
System.out.print(" ");
}
}
l -= 2;
System.out.println();
}
}
}
}





Gambar di atas merupakan screenshot waktu program dijalankan. Bentuk belah ketupat yang ditampilkan akan berbeda waktu kita menginput bilangan genap dan ganjil. Silahkan coba sendiri ya...