Cara Menggunakan JComboBox dan JList Di Java Netbeans

Beberapa hari yang lalu saya mencoba untuk membuat program yang mempunyai tampilan sedikit dinamik. Dalam hal ini misalnya untuk ComboBox, ketika kita memilih salah item, ComboBox yang lain berubah isinya menyesuaikan pilihan dari ComboBox yang pertama. Begitu juga dengan saat dilakukan pemilihan pada List yang menggunakan JList langsung ada perubahan pada tampilan misal saja label tanpa perlu menekan tombol button tertentu. Intinya keduanya bekerja mirip seperti event onchange pada javascript. Sekalian saja saya posting dua program sederhana yang saya buat untuk mencoba fitur tersebut.
Perlu diperjelas, disini saya bukan mau memberi tutorial, tetapi contoh program, hanya saja saya beri comment pada source code program yang akan saya berikan, yang semoga membuat lebih mudah dimengerti. Jika ada pertanyaan silahkan saja untuk bertanya, lagipula gratis dan dengan senang hati saya menjawabnya. Berikut saya tunjukkan tampilan program sederhana yang menggunakan JComboBox dan JList beserta source code programnya.

Tampilan program TestJComboBox:


Source code:

001import java.awt.Font;
002import java.awt.event.ActionEvent;
003import java.awt.event.ActionListener;
004import javax.swing.*;
005 
006public class TestJComboBox implements ActionListener {
007 
008    private JComboBox combobox1, combobox2;
009    private JButton button;
010    //private JLabel label;
011    private JTextField label;
012 
013    //Konstruktor dari class TestJComboBox, yang nantinya akan digunakan pada
014    //  method main()
015    TestJComboBox() {
016        //Komponen combo box untuk pilihan pertama
017        combobox1 = new JComboBox();
018        combobox1.setLocation(10, 10);
019        combobox1.setSize(180, 20);
020        combobox1.addItem("Pilih Salah Satu");
021        combobox1.addItem("Buah");
022        combobox1.addItem("Sayur");
023        //Ditambahkan ActionListener, berguna saat ada pemilihan salah satu item
024        combobox1.addActionListener(this);
025        //Komponen combo box untuk pilihan kedua yang akan muncul pilihannya
026        //  saat user sudah memilih salah satu pilihan dari combobox pertama yaitu
027        //  antara buah atau sayur
028        combobox2 = new JComboBox();
029        combobox2.setLocation(10, 40);
030        combobox2.setSize(180, 20);
031        //Komponen button untuk menampilkan pilihan user untuk combobox kedua
032        //  yang nantinya ditampilkan pada JTextField label
033        button = new JButton("Pilih");
034        button.setLocation(10, 70);
035        button.setSize(180, 20);
036        button.addActionListener(this);
037        //Komponen JTextField yang berfungsi seperti label, cenderung saya pilih
038        //  karena adanya borderline tanpa perlu membuat class Border lebih dahulu
039        label = new JTextField(20);
040        label.setLocation(10, 100);
041        label.setSize(180, 20);
042        label.setFont(new Font("Courier New", Font.PLAIN, 14));
043        //Dilakukan penyettingan supaya textfield tidak bisa diubah2 oleh user
044        label.setEditable(false);
045    }
046 
047    //Method untuk menampilkan frame/tampilan utama program dengan menggunakan
048    //  class JFrame
049    public void createAndShowGUI() {
050        JFrame.setDefaultLookAndFeelDecorated(false);
051        JFrame frame = new JFrame("Demo JComboBox");
052        frame.setLayout(null);
053        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
054        frame.getContentPane().add(combobox1);
055        frame.getContentPane().add(combobox2);
056        frame.getContentPane().add(label);
057        frame.getContentPane().add(button);
058        frame.setBounds(0, 0, 215, 180);
059        frame.setLocationRelativeTo(null);
060        frame.setVisible(true);
061    }
062 
063    //Method utama pada class ini
064    public static void main(String[] args) {
065        javax.swing.SwingUtilities.invokeLater(new Runnable() {
066            //Terima jadi saja, intinya pake SwingUtilities dan menggunakan class
067            //  Runnable sehingga saya dapat menggunakan method run(), anggap saja
068            //  blok kode disini sebagai template
069 
070            @Override
071            public void run() {
072                //Membuat objek TestJComboBox sesuai dengan konstruktor sebelumnya
073                TestJComboBox prog = new TestJComboBox();
074                //Memanggil method createAndShowGUI() untuk menampilkan frame utama
075                prog.createAndShowGUI();
076            }
077        });
078    }
079 
080    @Override
081    //Method utama untuk menangani adanya event dari user seperti pemilihan combo
082    //  box ataupun penekanan button
083    public void actionPerformed(ActionEvent e) {
084        //Dicari varible yang berisi pilihan dari user untuk combobox1
085        Object select1 = combobox1.getSelectedItem();
086        //Jika event yang terjadi adalah adanya pemilihan item dari combobox1
087        if (e.getSource() == combobox1) {
088            if (select1 == "Buah") {
089                //Jika yang dipilih dari combobox1 adalah buah
090                //Hapus terlebih dahulu semua item pada combobox2
091                combobox2.removeAllItems();
092                //Tambahkan pilihan item untuk buah
093                combobox2.addItem("Apel");
094                combobox2.addItem("Jeruk");
095                combobox2.addItem("Mangga");
096                combobox2.addItem("Anggur");
097                combobox2.addItem("Pir");
098            } else if (select1 == "Sayur") {
099                //Jika yang dipilih dari combobox1 adalah sayur
100                //Hapus terlebih dahulu semua item pada combobox2
101                combobox2.removeAllItems();
102                //Tambahkan pilihan item untuk sayur
103                combobox2.addItem("Timun");
104                combobox2.addItem("Bayam");
105                combobox2.addItem("Kangkung");
106            } else {
107                //Jika yang dipilih bukan keduanya atau "Pilih Salah Satu"
108                combobox2.removeAllItems();
109            }
110            //Jika event adalah adanya penekanan tombol button
111        } else if (e.getSource() == button) {
112            if (select1 != "Pilih Salah Satu") {
113                //Jika user telah memilih salah satu dari buah atau sayur
114                //Dicari variable select2 yang berasal dari combobox2 untuk ditampilkan
115                //  pada label
116                Object select2 = combobox2.getSelectedItem();
117                //Dilakukan casting menjadi tipe String terlebih dahulu sebelum dikonkat
118                label.setText((String) select2 + " pilihan saya!");
119            } else {
120                //Jika user tidak memilih keduanya dan memilih item "Pilih Salah Satu"
121                label.setText("Pilih Salah Satu!");
122            }
123        }
124    }
125}
Tampilan program TestJList:

Source code:
001import java.awt.Font;
002import java.awt.event.ActionEvent;
003import java.awt.event.ActionListener;
004import javax.swing.*;
005import javax.swing.event.ListSelectionEvent;
006import javax.swing.event.ListSelectionListener;
007 
008public class TestJList implements ActionListener, ListSelectionListener {
009 
010    private JList list;
011    //Untuk demo kali ini saya menggunakan class DefaultListModel sebagai input
012    //  parameter dari JList, daripada menggunakan array, class tersebut lebih
013    //  mudah ketika user ingin menambahkan atau menghapus salah satu list
014    private DefaultListModel listmodel;
015    //Disini saya menggunakan JScrollPane untuk menampung JList, sehingga ketika
016    //  list sudah sangat panjang akan muncul scoller untuk dapat melihat list
017    //  dari awal sampai akhir
018    private JScrollPane scroll;
019    //private JLabel label;
020    private JTextField label;
021    private JTextField textfield;
022    private JButton button1, button2;
023 
024    //Konstruktor dari class TestJList, yang nantinya akan digunakan pada
025    //  method main()
026    TestJList() {
027        //Komponen JTextField yang berfungsi seperti label, cenderung saya pilih
028        //  karena adanya borderline tanpa perlu membuat objek Border lebih dahulu
029        label = new JTextField("Testing");
030        label.setLocation(180, 10);
031        label.setSize(100, 20);
032        label.setFont(new Font("Courier New", Font.PLAIN, 14));
033        label.setEditable(false);
034        //Membuat JList dengan membuat objek DefaultListModel tersebut dahulu
035        listmodel = new DefaultListModel();
036        list = new JList(listmodel);
037        //List yang saya buat disini hanya bisa dipilih satu element saja
038        list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
039        //Objek list saya beri ListSelectionListener sehingga dapat diterima event
040        //  saat user memilih salah satu list
041        list.addListSelectionListener(this);
042        //Pada awal list, saya beri dua item/element, untuk menambahkan element
043        //  digunakan method addElement pada objek list yang telah di-casting
044        //  menjadi tipe DefaultListModel
045        ((DefaultListModel) list.getModel()).addElement("Satu");
046        ((DefaultListModel) list.getModel()).addElement("Dua");
047        //Membuat objek scroller untuk menampung JList
048        scroll = new JScrollPane(list);
049        scroll.setLocation(10, 10);
050        scroll.setSize(150, 160);
051        //Objek textfield ini akan menerima string dari user sebagai element/item
052        //  yang akan ditambahkan oleh user
053        textfield = new JTextField(10);
054        textfield.setLocation(180, 40);
055        textfield.setSize(100, 20);
056        //Objek button1 adalah button yang digunakan untuk menambahkan element list
057        //  yang baru
058        button1 = new JButton("Tambah");
059        button1.setLocation(180, 70);
060        button1.setSize(100, 20);
061        button1.addActionListener(this);
062        //Objek button1 adalah button yang digunakan untuk menghapus element list
063        //  yang baru
064        button2 = new JButton("Hapus");
065        button2.setLocation(180, 100);
066        button2.setSize(100, 20);
067        button2.addActionListener(this);
068    }
069 
070    //Method untuk menampilkan frame/tampilan utama program dengan menggunakan
071    //  class JFrame
072    public void createAndShowGUI() {
073        JFrame.setDefaultLookAndFeelDecorated(false);
074        JFrame frame = new JFrame("Demo JList");
075        frame.setLayout(null);
076        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
077        frame.getContentPane().add(scroll);
078        frame.getContentPane().add(label);
079        frame.getContentPane().add(button1);
080        frame.getContentPane().add(button2);
081        frame.getContentPane().add(textfield);
082        frame.setBounds(0, 0, 320, 230);
083        frame.setLocationRelativeTo(null);
084        frame.setVisible(true);
085    }
086 
087    public static void main(String[] args) {
088        javax.swing.SwingUtilities.invokeLater(new Runnable() {
089            //Terima jadi saja, intinya pake SwingUtilities dan menggunakan class
090            //  Runnable sehingga saya dapat menggunakan method run(), anggap saja
091            //  blok kode disini sebagai template
092 
093            @Override
094            public void run() {
095                //Membuat objek TestJList sesuai dengan konstruktor sebelumnya
096                TestJList prog = new TestJList();
097                //Memanggil method createAndShowGUI() untuk menampilkan frame utama
098                prog.createAndShowGUI();
099            }
100        });
101    }
102 
103    @Override
104    //Method utama untuk menangani adanya event dari user yaitu penekanan button
105    public void actionPerformed(ActionEvent e) {
106        if (e.getSource() == button1) {
107            //Apabila user menekan button1 untuk menambahkan element list yang baru
108            String text = textfield.getText();
109            //Didapatkan variable text yang berasal dari textfield yang dibuat
110            //  sebelumnya
111            if (!text.equals("")) {
112                //Jika isi dari textfield tidak kosong
113                //Untuk menambahkan sama seperti sebelumnya, tinggal memasukkan variable
114                //  text pada input method addElement
115                ((DefaultListModel) list.getModel()).addElement(text);
116            } else {
117                //Jika textfield kosong, ditampilkan pada label tulisan "Tulis List!"
118                label.setText("Tulis List!");
119            }
120        } else if (e.getSource() == button2) {
121            //Apabila user menekan button1 untuk menghapus element list yang baru
122            //Dicari terlebih dahulu index dari element list yang akan dihapus
123            int index = list.getSelectedIndex();
124            if (index != -1) {
125                //Jika user sudah memilih salah satu item/element pada JList
126                label.setText("Deleted");
127                //Untuk menghapus salah satu element dapat digunakan method remove(),
128                //  sama seperti saat menambahkan element, objek list di-casting
129                //  terlebih dahulu menjadi tipe DefaultListModel
130                ((DefaultListModel) list.getModel()).remove(index);
131            } else {
132                //Jika user belum memilih salah satu element, ditampilkan pada label
133                //  pesan "Pilih List!"
134                label.setText("Pilih List!");
135            }
136        }
137    }
138 
139    @Override
140    //Method ini bekerja saat user memilih salah satu list (dalam hal ini di-klik)
141    //  sehingga salah satu element list diberi warna background berbeda, silahkan
142    //  menjalankan program untuk lebih jelasnya
143    public void valueChanged(ListSelectionEvent e) {
144        //Ketika user menekan salah satu list, maka method ini akan bekerja dan
145        //  karena hanya ada dari list sebenarnya percabangan (if) ini bisa dibuang
146        if (e.getSource() == list) {
147            //Sebelumnya dicari terlebih dahulu element mana yang telah dipilih
148            int index = list.getSelectedIndex();
149            //Jika tidak terjadi event penghapusan element list, maka akan ditampikan
150            //  pada label item/element yang dipilih
151            if (index != -1) {
152                String listtext = (String) list.getModel().getElementAt(index);
153                label.setText(listtext);
154            }
155        }
156    }
157}
Semoga bermanfaat :D

Artikel Lainnya