JCheckbox Pada JList (Java Swing) | Tempat Belajar dan Berbagi Pengetahuan Java dan PHP
Home » , , » JCheckbox Pada JList (Java Swing)

JCheckbox Pada JList (Java Swing)

Dipostingkan Oleh Ridwan Labs pada Minggu, 07 Agustus 2011 - Diupdate Pada: 8/07/2011

Hmmm, dah lama gak maen Swing Hack, di blog sebelumnya banyak sekali tutorial tentang swing Hack, swing Makeover, dll.

Untuk itu kali ini saya ingin berbagi beberapa tips, mengubah komponen pada java. Mungkin anda tidak asing dengan tampilan ini:


Yup, tampilan ini biasanya terdapat dalam poling yang memungkinkan kita untuk memilih l;ebih dari satu pilihan. Jadi tertarik neh, bisa gak ya java bikin komponen kayak gini? Tentu saja, apa sih yang gak bisa hehe. Pis ah. Oke kali ini saya akan sedikit mengungkap rahasianya.
Pertama, untuk membuat komponen seperti ini dijava, kita memerlukan tiga komponen swing:
1. JList
2. JCheckBox
3. JscrolPane


Prinsipnya, kita akan menggunakan JCheckBox pada Jlist, lalu kemudian JList ditampilkan didalam JScrollPane. Emang bisa JCheckBox dipake didalam Jlist? Bisa, caranya dengan menambahkan CellRenderer yang sudah kita ubah sesuai dengan keperluan. Untuk kasus ini kita akan merubah CellRenderer untuk JList dengan menambahkan JCheckBox kedalam JList.
Okelah, cukup sekian basa-basinya, kebanyakan basa basi malah pusing hehe. Langsung aja.
Pertama, Siapkan peralatan tempurnya hehe
  • Seperangkat komputer
  • Java JDK dan Netbeans (Versi terserah selera hehe)
Langkah kedua, buat project, kasih nama terserah anda, lalu buat class kasih nama saja CheckBoxList, kemudian masukan kode berikut:

/*
 * CheckBoxList demo
 * 
 * Tutorial dibuat  oleh javadanphp.blogspot.com
 * anda bisa  menggunakan class-class yang ada pada tutorial ini tanpa
 * menghilangkan  copyright ini
 * 
 * anda dapt  menggunakan class tanpa jaminan dari javadanphp.blogspot.com
 * akan kerusakan yang  mungkin ditimbulkan oleh tutorial ini
 * 
 * Salam
 *  javadanphp.blogspot.com
 * 
 */
package javaapplication1;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.util.HashSet;
import java.util.Iterator;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JList;
import javax.swing.ListCellRenderer;
import javax.swing.UIDefaults;
import javax.swing.UIManager;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

/**
 *
 * @author Kang Opik
 */
public class CheckBoxList extends JList implements ListSelectionListener {

    private Color listForeground, listBackground;
    HashSet pilihan = new HashSet();
    int toggleIndex = -1;
    boolean toggleWasSelected;

    public CheckBoxList() {
        super();
        getSelectedColor();
        setCellRenderer(new CheckBoxListRenderer());
        addListSelectionListener(this);
    }

    private void getSelectedColor() {
        UIDefaults uid = UIManager.getLookAndFeel().getDefaults();
        listForeground = uid.getColor("List.foreground");
        listBackground = uid.getColor("List.background");
    }

    @Override
    public void valueChanged(ListSelectionEvent e) {
        if (!e.getValueIsAdjusting()) {
            removeListSelectionListener(this);

            // cek  apakah di-check atau sebaliknya
            HashSet newSelections = new HashSet();
            int size = getModel().getSize();
            for (int i = 0; i < size; i++) {
                if (getSelectionModel().isSelectedIndex(i)) {
                    newSelections.add(new Integer(i));
                }
            }

            //men-chech yang sebelumnya dipilih
            Iterator it = pilihan.iterator();
            while (it.hasNext()) {
                int index = ((Integer) it.next()).intValue();
                getSelectionModel().addSelectionInterval(index, index);
            }

            it = newSelections.iterator();
            while (it.hasNext()) {
                Integer nextInt = (Integer) it.next();
                int index = nextInt.intValue();
                if (pilihan.contains(nextInt)) {
                    getSelectionModel().removeSelectionInterval(index, index);
                } else {
                    getSelectionModel().addSelectionInterval(index, index);
                }
            }

            // ingat  pilihan yang telah dipilih
            pilihan.clear();
            for (int i = 0; i < size; i++) {
                if (getSelectionModel().isSelectedIndex(i)) {
                    pilihan.add(new Integer(i));
                }
            }

            addListSelectionListener(this);
        }
    }

    class CheckBoxListRenderer extends JComponent implements ListCellRenderer {

        DefaultListCellRenderer defaultCellCellRenderer;
        JCheckBox checkbox;

        public CheckBoxListRenderer() {
            setLayout(new BorderLayout());
            defaultCellCellRenderer = new DefaultListCellRenderer();
            checkbox = new JCheckBox();
            add(checkbox, BorderLayout.WEST);
            add(defaultCellCellRenderer, BorderLayout.CENTER);
        }

        @Override
        public Component getListCellRendererComponent(
                JList list,
                Object value,
                int index,
                boolean isSelected,
                boolean cellHasFocus) {
            defaultCellCellRenderer.getListCellRendererComponent(
                    list,
                    value,
                    index,
                    isSelected,
                    cellHasFocus);
            checkbox.setSelected(isSelected);
            Component[] comps = getComponents();
            for (int i = 0; i < comps.length; i++) {
                comps[i].setForeground(listForeground);
                comps[i].setBackground(listBackground);
            }
            return this;
        }
    }
}
Lho Koq? Yaaa, emang selesai, sudah beres, gak percaya? Coba buat JFrame, trus Drag class yang tadi sudah kita buat.

Iya kan selesai, tapi jangan lupa pastikan ubah property selectionModenya jadi MULTIPLE_INTERVAL


Berikut Source code lengkapnya, silahkan otak atik kodenya:
Source Code (4Shared.com)
Neh screenshootnya



Oke, sekian dulu tutorial kali ini, kalo ada yang kurang jelas silahkan komentar.
Share this article :

0 komentar:

Posting Komentar

Cari Artikel



 
Support : Admin
Copyright © 2013. Tempat Belajar dan Berbagi Pengetahuan Java dan PHP - All Rights Reserved
Template Created by Creating Website Modified by CaraGampang.Com
Proudly powered by Blogger