Jumat, 01 April 2011

Sertifikasi Java & Oracle (Fundamental) Gratis dari Bamboomedia

Buat yang pengen punya sertifikat java tapi belom kesampaian, ini ada yang gratisan lho dari bamboomedia.




klik aja disini kalo pengen nyobain.

Bamboomedia

Rabu, 02 Maret 2011

Menyisipkan Baris Baru pada JLabel

Cara untuk memformat teks pada JLabel ternyata berbeda dengan cara memformat teks pada console. Pada console kita biasa menggunakan karakter '\n' untuk membuat baris baru. Sedangkan pada JLabel kita harus menggunakan format HTML untuk membuat sebuah baris baru.

Contoh yang salah:

jLabel.setText("Ini baris pertama\nIni baris kedua");


Contoh yang benar:

jLabel.setText("<html>Ini baris pertama<br>Ini baris kedua<html>");

Rabu, 09 Februari 2011

Membuat File Directory menggunakan JTree

Component JTree biasa digunakan untuk menampilkan sebuah hierarki data seperti yang sering kali kita lihat ketika kita membuka windows explorer pada bagian sebelah kiri. Kali ini saya akan membuat sebuah tampilan file directory dengan menggunakan JTree.

Berikut langkah-langkahnya:

1. Buat sebuah class turunan dari Vector misal saya beri nama NamedVector. Class ini nantinya akan digunakan untuk menampilkan nama dari node pada JTree, sehingga kita harus meng-override method toString() miliknya.


import java.util.Vector;

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

/**
*
* @author hauw
*/
public class NamedVector extends Vector{

private String nama;

public NamedVector(String nama) {
this.nama = nama;
}

@Override
public synchronized String toString() {
return nama;
}

}



2. Buat sebuah JFrame untuk menampilkan JTree, disini saya menggunakan netbeans. Contoh tampilannya seperti di bawah ini.



3. Masuk ke bagian source code dari form, lalu tambahkan beberapa baris.


private DefaultMutableTreeNode rootNode;
private DefaultTreeModel treeModel;

/** Creates new form Form */
public Form() {
initComponents();

File file = new File("D:/Kuliah");
rootNode = new DefaultMutableTreeNode(file.getAbsolutePath());
treeModel = new DefaultTreeModel(rootNode);
jTree1.setModel(treeModel);
JTree.DynamicUtilTreeNode.createChildren(rootNode, getFileDirectory(file));
}

private static NamedVector getFileDirectory(File directory) {
NamedVector vectorDirectory = new NamedVector(directory.getName());

File[] files = directory.listFiles();

for (File file : files) {
if(file.isDirectory()) {
NamedVector vector = getFileDirectory(file);
vectorDirectory.add(vector);
} else {
vectorDirectory.add(file.getName());
}
}

return vectorDirectory;
}


Di atas saya mengakses folder D:/kuliah pada pc saya. Kalau nanti kalian coba ganti aja pada bagian "File file = new File("");" menjadi folder yang ingin kalian explore. Contoh tampilannya seperti ini



project lengkapnya bisa download disini

FileDirectory.rar

Selasa, 04 Januari 2011

Membuat Auto Resize ComboBox

Kadang kita memiliki sebuah combobox yang berisi item dengan ukuran yang panjang. Untuk menampilkan item-item tersebut secara benar, maka kita harus membuat combobox dengan ukuran yang sesuai, sehingga kadang akan sangat memakan tempat.




Untuk mengatasinya kita dapat membuat sebuah combobox yang ukuran popupnya sesuai dengan ukuran item terpanjang dalam list. Untuk itu kita buat saja sebuah class baru yang diturunkan dari class JComboBox.



import java.awt.Dimension;
import java.awt.FontMetrics;
import javax.swing.JComboBox;

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

@Override
public Dimension getSize() {
Dimension dimension = new Dimension();

dimension.width = getPanjangPopup();

return dimension;
}

private int getPanjangPopup() {
int panjangComboBox = (int) super.getSize().getWidth();
if (panjangComboBox < getTeksTerpanjang()) {
return getTeksTerpanjang();
}
return panjangComboBox;
}

private int getTeksTerpanjang() {
int panjangTeks = 0;
int count = getItemCount();
for (int i = 0; i < count; i++) {
FontMetrics fontMetrics = getFontMetrics(getFont());
String teks = getItemAt(i).toString();
if (panjangTeks < fontMetrics.stringWidth(teks)) {
panjangTeks = fontMetrics.stringWidth(teks);
}
}
return panjangTeks + 5;
}
}



Lihat perbedaannya pada gambar berikut



Kalo ingin download projectnya disini ya...

ComboBox Resizable.rar

Minggu, 02 Januari 2011

Membuat Filter Tabel yang Tidak Membedakan Huruf Kapital / Huruf Kecil

Di bawah ini merupakan kode program untuk membuat filter tabel yang tidak membedakan huruf besar dan huruf kecil. Misalnya ketika kita ingin mencari data dengan value "Hello World" pada tabel. Kita tidak perlu memberi input dengan teks yang sama huruf besar dan kecilnya.



import java.awt.BorderLayout;
import java.util.regex.PatternSyntaxException;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.RowFilter;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;

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

private JTable tableData;
private JScrollPane scrollPane;
private JPanel panelFilter;
private JLabel labelFilter;
private JTextField textFilter;
private DefaultTableModel tableModel;
private TableRowSorter rowSorter;

public TableFilterExample() {
super("Contoh Table Filter");
tableModel = new DefaultTableModel();
tableModel.addColumn("Nama");
tableModel.addColumn("Alamat");
tableModel.addRow(new Object[]{
"Yulias Kurniawan", "Semarang"
});
tableModel.addRow(new Object[]{
"Yohannes Sudirwan", "Tangerang"
});
tableModel.addRow(new Object[]{
"Nova Setiawan", "Solo"
});
tableModel.addRow(new Object[]{
"Agung Prasetya", "Kudus"
});
tableModel.addRow(new Object[]{
"Hans Ricardo", "Jepara"
});

tableData = new JTable(tableModel);
scrollPane = new JScrollPane(tableData);
add(scrollPane, BorderLayout.CENTER);

textFilter = new JTextField();
labelFilter = new JLabel("Cari:");
panelFilter = new JPanel(new BorderLayout());
panelFilter.add(labelFilter, BorderLayout.WEST);
panelFilter.add(textFilter, BorderLayout.CENTER);
add(panelFilter, BorderLayout.NORTH);

rowSorter = new TableRowSorter(tableModel);
tableData.setRowSorter(rowSorter);

textFilter.getDocument().addDocumentListener(new DocumentListener() {

public void insertUpdate(DocumentEvent e) {
changedUpdate(e);
}

public void removeUpdate(DocumentEvent e) {
changedUpdate(e);
}

public void changedUpdate(DocumentEvent e) {
String filter = textFilter.getText();
if (filter == null) {
rowSorter.setRowFilter(RowFilter.regexFilter(null));
} else {
char[] charArray = filter.toCharArray();
String[] stringArray = new String[charArray.length];

for (int i = 0; i < stringArray.length; i++) {
stringArray[i] = "[" + Character.toUpperCase(charArray[i])
+ Character.toLowerCase(charArray[i]) + "]";
}

String regex = "";
for (String string : stringArray) {
regex += string;
}

try {
rowSorter.setRowFilter(RowFilter.regexFilter(regex));
} catch (PatternSyntaxException ex) {
ex.printStackTrace();
}
}
}
});
}

public static void main(String[] args) {
TableFilterExample app = new TableFilterExample();
app.pack();
app.setVisible(true);
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

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);
}
}