Membuat Menu Accordion Di Java Swing

Akhir-nya kesampaian juga menulis tentang Menu Accordion Di Java Swing ini :) Soalnya dulu bingung menu yang saya buat ini namanya apaan :malu: , nah buat teman-teman ada yang belum tahu apa itu Menu Accordion mungkin bisa coba baca-baca artikel Mengenal Menu Accordion dahulu :) Nah jika sudah tahu tentang apa itu Menu Accordion sekarang mari kita lihat contoh beberapa aplikasi dan library yang menggunakan atau menyertakan Menu Accordion

Contoh Aplikasi Yang Menggunakan Menu Accordion

OpenOffice.org Impress
OpenOffice.org Impress menyertakan model menu dengan tipe Accordion yang dapat kita lihat seperti gambar dibawah ini :
AccordionInOOoImpress
OOo Impress Accordion Menu In Action

Plazma ERP
Plazma ERP adalah sebuah aplikasi ERP yang dibangun dengan menggunakan Java dan SWT sebagai solusi GUI Toolkit-nya :) , menurut saya Plazma ERP mempunyai UI yang sangat elegan dan cantik ditambah lagi dengan Menu Accordion-nya yang tampak seperti gambar dibawah ini :
AccordionInPlazmaERP
Plazma ERP Accordion Menu In Action

Library Java Swing Yang Mempunyai Komponen Menu Accordion

l2fprod-common
Sedangkan library di Java yang menyediakan solusi komponen Menu Accordion adalah l2fprod-common dengan komponen yang bernama JOutlookBar yang dapat dilihat seperti gambar dibawah ini :
AccordionInl2fprod
JOutlookBar with Accordion Menu In Action

Hmm.. asyik bukan sudah terdapat komponen yang siap pakai di Java Swing untuk solusi menu Accordion :) tapi sayangnya ketika saya mencoba pindah dari satu menu ke menu yang lain, tampil seperti scrollbar pada komponen JOutlookBar milik l2fprod seperti gambar dibawah ini :( :
UglySwitchInl2fprod
Tampilan ScrollBar di JOutlookBar

Hm… karena belum menemukan komponen yang sesuai dengan keinginan, maka akhirnya mari kita bikin sendiri komponen Menu Accordion yang terinspirasi dari beberapa Menu Accordion yang telah kita lihat diatas :) Nah untuk memulai latihan kali ini, ada beberapa bagian yang harus kita lewati yaitu :

  1. Pembuatan Project
  2. Pembuatan dan Pemasangan Event Menu Accordion
  3. Pemasangan Menu Accordion Ke MainForm dan Hasil Akhir

Pembuatan Project

Sekarang buatlah 1 buah project java sederhana dengan menggunakan NetBeans IDE kemudian tambahkanlah sebuah JFrame dan JPanel kemudian berilah nama MainForm untuk JFrame dan AccordionPanel untuk JPanel-nya seperti gambar dibawah ini :
struktur_prj_awal
Struktur Project Awal

Nah sampai tahapan ini, proses pembuatan project telah selesai dilakukan dan sekarang mari kita fokuskan bagaimana membuat sebuah Accordion Menu pada tahap selanjutnya :)

Pembuatan dan Pemasangan Event Menu Accordion

Sekarang bukalah file AccordionPanel sehingga muncul pada GUI Designer NetBeans IDE, jika sudah sekarang pasang BoxLayout pada AccordionPanel tersebut dengan cara klik kanan pada AccordionPanel kemudian pilih Set Layout > Box Layout. Setelah memasang Box Layout sebagai Layout utama yang digunakan oleh AccordionPanel, sekarang masuklah pada Box Layout Properties dengan cara memilih menu Window > Navigating > Inspector hingga tampilannya menjadi seperti gambar dibawah ini :
TampilanInspectorAccordionPanel
Tampilan Inspector AccordionPanel

Sekarang ekspand-lah komponen JPanel tersebut hingga muncul tulisan Box Layout, lakukan klik kanan pada Box Layout kemudian pilihlah properties. Pada Box Layout Properties dan gantilah Line Axis menjadi Y Axis seperti gambar dibawah ini :
MenggantiPropertiBoxLayout
Mengganti Properti BoxLayout

Tujuan mengganti Line Axis ke Y Axis pada Box Layout ini adalah agar komponen yang akan kita tambahkan ke dalam AccordionPanel ini akan turun ke bawah setiap ada penambahan komponen baru, bukan ke samping :) Proses layouting untuk dasar dari Menu Accordion telah selesai, sekarang buatlah 1 buah Java Class dengan nama MTaskButton yang meng-extends class JToggleButton yang isinya kurang lebih sebagai berikut :

43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
public class MTaskButton extends javax.swing.JToggleButton {
 
    private JComponent  parentComp;
    private boolean     resizeComponent = false;
 
    /** Buat agar panjang komponen ini sama panjangnya dengan parentComponen
     * jika ditambahkan pada Container dengan BoxLayout */
    @Override public int getWidth() {
        if (resizeComponent && parentComp != null) {
            super.setSize(parentComp.getWidth(), super.getHeight());
        }
 
        return super.getWidth();
    }
 
    public JComponent getParentComp() {
        return parentComp;
    }
 
    public void setParentComp(JComponent parentComp) {
        this.parentComp = parentComp;
    }
 
    public boolean isResizeComponent() {
        return resizeComponent;
    }
 
    public void setResizeComponent(boolean resizeComponent) {
        this.resizeComponent = resizeComponent;
    }
}

Tujuan membuat sebuah class baru yang meng-extends JToggleButton adalah sebagai berikut :
- Agar menu yang dibuat mempunyai efek Pressed ketika user memilih salah satu menu.
- Kita perlu meng-override method getWidth() agar Button yang kita pasang pada Container dengan BoxLayout mempunyai panjang yang sama dengan component parent-nya. Jika kita menggunakan JToggleButton biasa, maka jika kita tambahkan pada AccordionPanel hasilnya akan menjadi seperti gambar dibawah ini :
TampilanDefaultJToggleButton
Tampilan Default JToggleButton Pada BoxLayout

Jika sudah, sekarang lakukan dahulu proses Clean & Build kemudian drag n drop-lah class MTaskButton ke dalam AccordionPanel kemudian pada MTaskButton properties, modifikasilah properti parentComp dan resizeComponent menjadi seperti gambar dibawah ini :
ModifikasiPropertiMTaskButton
Modifikasi Properties Pada MTaskButton

Setelah selesai melakukan proses modifikasi properties pada MTaskButton, sekarang tambahkanlah 1 buah JList dan 2 buah MTaskButton lagi dengan konfigurasi untuk MTaskButton sama seperti diatas. Dan hasil dari penambahan komponen yang baru saja dilakukan akan menghasilkan tampilan seperti gambar dibawah ini :
PenambahanKomponen
Hasil Penambahan JScrollPane dan 2 Buah MTaskButton

Hm.. hasilnya koq jadi jelek yah, ok sekarang masuklah pada menu Inspector kemudian carilah komponen JScrollPane kemudian klik kanan dan modifikasilah properti AlignmentX dari 0.5 ke 0.0 seperti gambar dibawah ini:
ModifikasiPropertiScrollPane
Modifikasi Properti JScrollPane

Dan hasil dari pengeditan properti JScrollPane diatas adalah seperti pada gambar dibawah ini :
HasilPengeditanPropertiScrollPane
Hasil Pengeditan Properti JScrollPane

Jika sudah, sekarang tambahkanlah 1 buah JList dan 1 buah JTree pada node Other Component di jendela Inspector dan design-lah menu AccordionPanel seperti gambar dibawah ini :

DesignList1
Design List 1

DesignList2
Design List 2

Note: Untuk konfigurasi list dan jtree sama dengan konfigurasi list sebelumnya

Tambahkanlah dahulu sebuah ButtonGroup untuk menampung 3 buah MTaskButton pada node Other Component di jendela Inspector seperti gambar dibawah ini :
AddButtonGroup
Menambahkan ButtonGroup Pada MTaskButton

Setelah urusan dengan komponen selesai, sekarang buatlah sebuah method dahulu yang berfungsi untuk me-reset menu accordion kita dengan nama recreateLayout() seperti dibawah ini :

120
121
122
123
124
125
126
    /** Fungsi method ini hanyalah untuk menghapus seluruh komponen yang telah
     * ditambahkan kemudian memasang <code>BoxLayout</code> dengan Axis Y AXIS */
    private void recreateLayout() {
        this.removeAll();
        this.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));
        this.setLayout(new javax.swing.BoxLayout(this, javax.swing.BoxLayout.Y_AXIS));
    }

Inti dari Menu Accordion ini sebenarnya terdapat pada setiap action yang terjadi pada ketiga button MTaskButton, sedangkan action yang perlu ditambahkan pada mTaskButton1, mTaskButton2 dan mTaskButton3 ini adalah seperti berikut :

130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
    private void mTaskButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        recreateLayout();
        add(mTaskButton1);
        add(jScrollPane1);
        add(mTaskButton2);
        add(mTaskButton3);
        revalidate();
    }
 
    private void mTaskButton2ActionPerformed(java.awt.event.ActionEvent evt) {
        recreateLayout();
        add(mTaskButton1);
        add(mTaskButton2);
        add(jScrollPane2);
        add(mTaskButton3);
        revalidate();
    }
 
    private void mTaskButton3ActionPerformed(java.awt.event.ActionEvent evt) {
        recreateLayout();
        add(mTaskButton1);
        add(mTaskButton2);
        add(mTaskButton3);
        add(jScrollPane3);
        revalidate();
    }

Hooohoho…. udah tahu trik-nya kan :D nah kalau sudah tahu sekarang jalankan dahulu proses Clean n Build baru kita pasang pada MainForm :)

Pemasangan Menu Accordion Ke MainForm dan Hasil Akhir

Untuk memasang Menu Accordion yang sudah jadi kedalam MainForm tidak susah koq, kita cuma perlu drag n drop file AccordionPanel kedalam MainForm dan taaada menu accordion sudah masuk kedalam MainForm :) Dan sekarang, coba design-lah MainForm menjadi seperti gambar dibawah ini :
DesignMainForm
Design MainForm

Dan jika sudah, sekarang coba jalankan dengan menekan tombol F6 jika tidak ada pesan error maka seharusnya akan tampil seperti gambar dibawah ini :

GTKLAF1
Tampilan Dengan LAF GTK
GTKLAF2
Tampilan Dengan LAF GTK
SwingLAF1
Tampilan Dengan Metal LAF
SwingLAF2
Tampilan Dengan Metal LAF

Bagaimana teman-teman susah ? Hm… dengan sedetail penjelasan diatas masih susah ?? Klo iya, silahkan tanya saja, sebelum bertanya dilarang :D Dan Mungkin langkah yang saya ambil ini kurang elegan, tapi hmm.. lumayan juga lah kalau menurut saya :) Kalau ada teman-teman yang tahu komponen yang bagus dan lebih sederhana, boleh donk di share :)

Link-link terkait :
- Deskripsi Menu Accordion (WIKI)
- Plazma ERP
- Komponen-komponen l2fprod
- Demo Menu Accordion in Java Swing
- Source Code Menu Accordion
- Milis NetBeans Indonesia
- More tutorial about Java Swing

Last Modified: Thursday, November 19th, 2009 @ 19:44

This entry was posted on Thursday, November 19th, 2009 at 7:44 pm and is filed under NetBeans, Java. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

12 Responses to “Membuat Menu Accordion Di Java Swing”

  1. riobernas Said :

    great tutorial mas ;)

    mantab mantab

    tarik mang

  2. Finz Said :

    woah keren..
    makasih mas tutotialnya, byk yg saya dapet dr blognya mas

    keep spirit, ditunggu tutor yg lainnya

  3. Miyugi Elly Sakuragi Said :

    Wow saya benar tidak tahu setan apa yang merasuki anda sehingga karena tutorial ini saya ngomong : >>>”KEREN…!!”;

  4. Martinus Ady H Said :

    @All: makacih2x :) Kwkwkwk klo dibilang keren sih biasa ajah mas, masih ada tutorial lain yg lebih keren yaitu punya mas Eko :) Tulisan ini seh sebenernya hutang saya ama om new user dari tahun kemarin :malu: n baru bisa ditulis sekarang :D

    @New User: Thx loh om buat informasi nama menu-nya :)

  5. Miyugi Elly Sakuragi Said :

    Jangan Terlalu merendah lah mas entar saya tendang >>>”dHESS….!!”;

    Peace….

    Ajarin buat tombol2 yang eventnya Delete,Add, Save ,Reapet, itu gimana yah kalau di Netbeans Java ,kalau di Delphi dah bisa saya but Netbeans Bingung je heh…

  6. Martinus Ady H Said :

    @Miyugi: Lah kan tinggal klik kanan tombolnya trs pilih Event > actionPerformed udah gitu doank kan mas :)

  7. newuser Said :

    aah si om bisa aja :p
    saya tau om kan sibuk bgt dengan kerjaan jadi dibuat santai aja.

    Kalo menurut saya sebenarnya namanya bukan Accordion menu yach tapi Accordion Layout yg isinya adalah panel2 yang bertumpuk semacam JLayer kalo di java.

    CMIIW(dah lama bgt gak main swing) :)

  8. Markus Said :

    Pak,
    mau tanya, kalo pengembangan project di atas (menu accordion), bagaimana menghasilkan satu window (maincontent) di sebelah kanan bila mana menuitem yg didalam menuaccordion tersebut di click
    semisal : di menu “red” maka panel/form red muncul(maximize) di maincontent sebelah kanan dari menuaccordion. namun apabila menu “yellow” di pilih maka hanya panel “yellow” yg tampil, tidak dengan pendekatan multiple panel seperti eclipse/netbeans sehingga banyak menu yg tampil.
    maklum pak, saya baru migrate dari delphi ke java, masih newbie gitu

    rgrds,
    markus

  9. Martinus Ady H Said :

    @Markus: Pak klo di java yang bapak maksud itu namanya CardLayout :) Panel sebelah kanan, pasang layout CardLayout kemudian tiap perpindahan menu, baru di timpa-kan ke mainContent (Panel sebelah kanan), sedangkan cara penggunaan CardLayout bisa bapak baca di sini[1] pak.

    Penggunaan menu diatas, emang cocok klo digabungin dengan mode CardLayout / TabbedPane pak, jadi silahkan dicoba-2x sendiri kombinasi yang bapak rasa *keren* :)

    [1] http://java.sun.com/docs/books/tutorial/uiswing/layout/card.html

  10. Jolly Said :

    bagus nih tutorialnya. nice info :D
    btw, makasih nih udah mampir di belajarjava.com

  11. Haqqi Said :

    Wah, keren…
    *langsung buka NetBeans terus nyobain*
    Ditunggu tutorial yang lain yah… :D

Leave a Reply




*
To prove you're a person (not a spam script), type the answer to the math equation shown in the picture. Click on the picture to hear an audio file of the equation.
Click to hear an audio file of the anti-spam equation