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