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:
001 | import java.awt.Font; |
002 | import java.awt.event.ActionEvent; |
003 | import java.awt.event.ActionListener; |
004 | import javax.swing.*; |
005 |
006 | public 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 | } |
Source code:
001 | import java.awt.Font; |
002 | import java.awt.event.ActionEvent; |
003 | import java.awt.event.ActionListener; |
004 | import javax.swing.*; |
005 | import javax.swing.event.ListSelectionEvent; |
006 | import javax.swing.event.ListSelectionListener; |
007 |
008 | public 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 | } |