OOP: Java GUI Romi Satria Wahono romi@romisatriawahono.net http://romisatriawahono.net net HP: 0878-8048048580480485 YM: romi_sw
Romi Satria Wahono Lahir di Madiun, 2 Oktober 1974 SD Sompok Semarang (1987) SMPN 8 Semarang (1990) SMA Taruna Nusantara, Magelang (1993) S1, S2 dan S3 (on-leave) dari Department of Computer Sciences, Saitama University, Japan (1994-2004) Core Competence: Software Engineering, i elearning System, Knowledge Management Founder dan Koordinator IlmuKomputer.Com CEO PT Brainmatics Cipta Informatika
Materi 1. OOP Concepts: Konsep dan Paradigma Object-Oriented Oriented Oi td 2. Java Fundamentals: Memahami Sintaks dan Grammar Bahasa Java 3. Java Advanced: Eksepsi, Thread, Java API 4. Java GUI: Swing, GUI Component, Event Handling 5. Java GUI with Netbeans: Mengembangkan Aplikasi Berbasis GUI dengan Java
Java GUI
Materi 1. Konsep Graphical User Interface (GUI) di Java 2. Komponen Dasar Swing 3. Penanganan Kejadian (Event Handling)
Konsep Graphical User Interface (GUI) di Java
API untuk Aplikasi GUI di Java 1. AWT (Abstract Window Toolkit): Library dan komponen GUI (java.awt) yang pertama kali diperkenalkan oleh Java, Sun tidak merekomendasikan lagi penggunaan komponen GUI dari AWT 2. Swing or JFC (Java Foundation Class): Library dan komponen GUI (javax.swing) terbaru dari Java dan yang direkomendasikan Sun untuk pemrograman GUI. Komponen Swing sebagian besar adalah turunan AWT dan lebih lengkap daripada AWT
Fitur Swing : button, listbox, Komponen GUI Lengkap: button, combobox, textarea, dsb Feel: tampilan GUI dapat diubahsesuai a dengan kehendak(tidak perlu mengikuti native OS) Pluggable Look-and-Feel Data Transfer Antar Komponen: : drag and drop, copy and paste Internationalization: t t proses desain lk desain aplikasi yang memungkinkan aplikasi dijalankan sesuai dengan preferensi tanpa rekompilasi Localization: aizati proses proses translasi tan aite teks ke bahasa a lokal dan menambahkan komponen lokal
Komponen Swing
Komponen Dasar Swing 1. Top-Level Container: kontainer dasar dimana komponen lainnya diletakkan (JFrame, JDialog dan Applet) 2. Intermediate Container: kontainer perantara dimana komponen lainnya diletakkan (JPanel, JScrollPane, JTabbedPane, JToolbar, JSplitPane) 3. Atomic Component: komponen yang memiliki fungsi spesifik dan menerima interaksi langsung dari user (JButton, JLabel, JTextArea, dsb) 4. Layout Manager: mengatur tata letak dan posisi komponen dalam kontainer (BorderLayout, BoxLayout, FlowLayout, GridBagLayout, GridLayout) 5. Event Handling: menangani event yang dilakukan user (klik k mouse, ketik k keyboard, perbesar frame, db dsb)
Top-Level Container JFrame, JDialog, Applet
Penggunaan Top-Level Container Komponen GUI akan ditampilkan sebagai bagian dari containment hierarchy (Susunan hirarki komponen yang menjadikan top-level container sebagai rootnya) Setiap komponen GUI hanya dapat dimuat pada satu top-level container. Dan setiap top-level container memiliki satu content pane yang berisi komponen- komponen GUI Kita dapatmenambahkan a a a menubar pada top-level container. Menubar secara konvensi ditempatkan di dalam top-level container, tapi di luar content pane, kecuali pada look and feel MacOS yang memberi kita opsi penempatan lebih bebas
Containment Hierarchy Aplikasi GUI berbasis Swing paling tidak memiliki satu containment hierarchy dengan JFrame sebagai rootnya Jika sebuah aplikasi memiliki satu window utama dan dua dialog artinya aplikasi lk tersebut t memiliki tiga containment hierarchy dan juga tiga top-level l container Satu containment hierarchy memiliki iki Jframe sebagai root, dan dua yang lain memiliki JDialog sebagai root
Content Pane dan Menu Bar 1. Menambahkan content pane pada Jframe frame.getcontentpane().add( ().add(yellowlabel, BorderLayout.CENTER); 2. Menambahkan komponen pada content pane JPanel contentpane = new JPanel(new BorderLayout()); contentpane.setborder(somebordersomeborder ); contentpane.add(somecomponent tp t, BorderLayout.CENTER); contentpane.add(anothercomponent add(anothercomponent anothercomponent, BorderLayout.PAGE_END); frame.setcontentpane(contentpane); 3. Menambahkan menu bar pada Jframe frame.setjmenubar(greenmenubar a greenmenubar);
Root Pane Setiap top-level container sebenarnya didukung oleh lh satu intermediate t container bernama root pane. Root pane mengelola content pane, menu bar dan dua kontainer li lain (layered pane dan glass pane) Layered pane mengatur kedalaman posisi komponen dengan menggunakan nilai depth (int int) Glass pane sering digunakan untuk menangkap kejadian atau menempatkan gambar pada suatu wilayah dimana terdapat satu atau banyak komponen
JFrame //1. Create the frame JFrame frame = new JFrame("Frame Beraksi"); //2. Optional: What happens when the frame closes? frame.setdefaultcloseoperation(jframe.exit JFrame.EXIT_ N_CLOSE); //3. Create components and put them in the frame //...create emptylabel... frame.getcontentpane().add( ().add(emptylabel, BorderLayout.CENTER); //4. Size the frame frame.pack(); //5. Show it frame.setvisible(true);
FrameBeraksi.java import javax.swing.*;.*; public class FrameBeraksi { public static void main(string[] args){ JFrame frame = new JFrame("Frame Beraksi"); frame.setdefaultcloseoperation(jframe.exit_on_close); JLabel emptylabel = new JLabel("Frame Beraksi"); frame.getcontentpane().add( ().add(emptylabel); } frame.setsize(400,200); frame.setvisible(true); }
FrameBeraksi2.java import javax.swing.*;.*; public class FrameBeraksi2 extends JFrame { public FrameBeraksi2() { super("frame Beraksi 2"); setsize(300, 100); setdefaultcloseoperation(jframe.exit_on_close); setvisible(true); } public static void main(string[] arguments) { } } FrameBeraksi2 frame= new FrameBeraksi2();
FrameBeraksi3.java import javax.swing.jframe; public class FrameBeraksi3 extends JFrame { public FrameBeraksi3() { } super("frame Beraksi 3); 3"); setbounds(400, 300, 10, 10); setvisible(true); public static void dma main(string[] ng[]a arguments) ){ } FrameBeraksi3 frame = new FrameBeraksi3(); for (int i = 10; i < 400; i++) { } frame.setbounds(400 -(i/2), 300 -(i/2), i, i); }
Atomic Component
Fitur Standard JComponent Tool Tips: settooltiptext() Painting and Borders: setborder(), paintcomponent() t() Pluggable Look and Feel: UIManager.setLookAndFeel() Properties: putclientproperty(), getclientproperty() Layout: setminimumsize(), setmaximumsize, setalignmentx() Drag and Drop: component.setdragenabled setdragenabled(true) Double Buffering: untuk menghaluskan gambar Key Bindings: untuk mnemonics dan accelerators
JButton import javax.swing..; * public class ButtonBeraksi extends JFrame { JButton load = new JButton("Load"); } JButton save = new JButton("Save"); public ButtonBeraksi() { } super("button Beraksi"); setsize(140, 170); setdefaultcloseoperation(jframe.exit_on_close JFrame.EXIT_ON_CLOSE); JPanel pane = new JPanel(); pane.add(load); pane.add(save); add(pane); setvisible(true); public static void main(string[] arguments) { ButtonBeraksi button = new ButtonBera
Layout Manager
BorderLayoutBeraksi.java t t * public static void main(string[] args) { import java.awt.*; Import java.awt.event.*;.*; import javax.swing.*;.*; public class BorderLayoutBeraksi extends JFrame { JButton nbutton = new JButton("North"); JButton sbutton = new JButton("South"); JButton ebutton = new JButton("East"); JButton wbutton = new JButton("West"); JButton cbutton = new JButton("Center"); JButton( Center ); public BorderLayoutBeraksi() { super("border Layout Beraksi"); setsize(240, 280); setdefaultcloseoperation(jframe.exit_on_clos E); setlayout(new BorderLayout()); add(nbutton, BorderLayout.NORTH); add(sbutton, BorderLayout.SOUTH); add(ebutton, BorderLayout.EAST); add(wbutton, BorderLayout.WEST); add(cbutton, BorderLayout.CENTER); } } BorderLayoutBeraksi frame = new BorderLayoutBeraksi(); Frame.setVisible(true); }
BoxLayoutBeraksi.java t t * t * public static void main(string[] args) { import java.awt.*; import javax.swing.*;.*; public class BoxLayoutBeraksi extends JFrame { public BoxLayoutBeraksi() { super("boxlayoutberaksi"); setsize(430, 150); setdefaultcloseoperation(jframe.exit_on_close); JPanel commandpane = new JPanel(); BoxLayout horizontal = new BoxLayout(commandPane,BoxLayout.X AXIS); commandpane.setlayout(horizontal); JButton subscribe = new JButton("Subscribe"); JButton unsubscribe = new JButton("Unsubscribe"); JButton refresh = new JButton("Refresh"); commandpane.add(subscribe); commandpane.add(unsubscribe); commandpane.add(refresh); add(commandpane); } } BoxLayoutBeraksi st = new BoxLayoutBeraksi(); }
FlowLayoutBeraksi.java import java.awt.*; bimport java.awt.event.*; t.*; public static t void main(string[] args) { import javax.swing.*;.*; FlowLayoutBeraksi frame = new public class FlowLayoutBeraksi extends JFrame { FlowLayoutBeraksi(); } JButton a = new JButton("Alibi"); lb } JButton b = new JButton("Burglar"); JButton c = new JButton("Corpse"); } JButton d = new JButton("Deadbeat"); JButton e = new JButton("Evidence"); public static void main(string[] args) { FlowLayoutBeraksi frame = new FlowLayoutBeraksi(); JButton f = new JButton("Fugitive"); public FlowLayoutBeraksi() { super("flow Layout Beraksi"); setsize(360, 120); setdefaultcloseoperation(jframe.exit_on_close JFrame.EXIT_ON_CLOSE); FlowLayout lm = new FlowLayout(FlowLayout.LEFT); setlayout(lm); add(a); add(b); add(c); add(d); add(e); add(f); setvisible(true);
CardLayoutBeraksi.java import javax.swing..; * import java.awt. awt * ; class CardLayoutBeraksi{ ad ay a } } public static void main(string[] args){ JFrame frame = new JFrame("Card Layout Beraksi"); JPanel panel1 = new JPanel(); JPanel panel2 = new JPanel(); JButton button = new JButton("Button dalam panel ke 1"); JT ta t t JT ta ("T t d l l k 2") JTextArea text = new JTextArea("Text dalam panel ke 2"); panel1.add(button); panel2.add(text); JTabbedPane tab = new JTabbedPane(); tab.add(panel1, "Tab 1"); tab.add(panel2, "Tab 2"); frame.getcontentpane().add( ().add(tab,borderlayout.north); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.pack(); frame.setvisible(true);
GridLayoutBeraksi.java import java.awt.*; import java.awt.event.*; t.*; GidL GridLayout import javax.swing.*;.*; GridLayout public class GridLayoutBeraksi extends JFrame { JButton marcia = new JButton("Marcia"); JButton carol = new JButton("Carol"); JButton greg = new JButton("Greg"); JButton jan = new JButton("Jan"); JButton alice = new JButton("Alice"); JButton( Alice ); JButton peter = new JButton("Peter"); JButton cindy = new JButton("Cindy"); JButton mike = new JButton("Mike"); JButton bobby = new JButton("Bobby"); } GridLayout GidL tf family = new GridLayout(3, 3, 10, 10); pane.setlayout(family); pane.add(marcia marcia); pane.add(carol); pane.add(greg); pane.add(jan); pane.add(alice); pane.add(peter); pane.add(cindy); pane.add(mike); pane.add(bobby); bb add(pane); setvisible(true); public static void main(string[] args) { GridLayoutBeraksi frame = new GidL GridLayoutBeraksi(); ki() } } public GridLayoutBeraksi() { super(" Grid Layout Beraksi "); setsize(260, 260); setdefaultcloseoperation(jframe.exit_on_close); JPanel pane = new JPanel();
Penanganan Kejadian (Event Handling)
Event Event adalah kejadian atau peristiwa yang dilakukan oleh lh user terhadap user interface menggunakan peralatan mouse dan keyboard Setiap objek dapat dinotifikasi jika suatu event terjadi sehingga objek tersebut dapat memutukan apa yang harus dilakukan untuk menanggapi (menangani) event tersebut (event handling) Agar suatu objek dapat dinotifikasi tentang suatu event, objek harus mendaftarkan diri sebagai event listener ke sumber yg menghasilkan event, dan mengimplementasikan interface listener yg sesuai
Proses Penanganan Event 1. Komponen harus didaftarkan sebagai pendengar (listener) dg menggunakan method addxxxlistener() JButton tombolselesai = new JButton( Selesai ); tombolselesai.addactionlistener(this); 2. Meng-implementasi interface listener atau meng-extends extends class adapter (bisa juga dengan membuat inner class) 1. class Hll HelloGUI implements MouseListener{} 2. class HelloGUI extends MouseAdapter{} atau class HelloGUI extends JFrame{ class handler extends MouseAdapter{}} 3. Menuliskan code penangan kejadian pada method class handler extends MouseAdapter{ public void mouseclicked(mouseevent e){ //code penangan kejadian }}
Listener (Semua Komponen Swing) Listener ComponentListener FocusListener KeyListener MouseListener MouseMotionListener MouseWheelListener HierarchyListener HierarchyBoundListener Deskripsi Mendengarkan perubahan size, position, atau visibility dari komponen Mendengarkan ketika komponen mendapatkan atau kehilangan fokus keyboard Mendengarkan penekanan tombol keyboard (hanya untuk komponen yang mendapat fokus keyboard) Mendengarkan penekanan mouse, klik mouse, pelepasan mouse, dan pergerakan mouse Mendengarkan perubahan posisi kursor mouse pada komponen Mendengarkan pergerakan roda mouse pada komponen Mendengarkan perubahan hirarki komponen karena kejadian yang berubah Mendengarkan perubahan hirarki komponen karena kejadian pergerakan dan perubahan ukuran
Listener API Table -1- Listener or Adapter ActionListener Listener Method actionperformed(actionevent) Deskripsi AncestorListener CaretListener CellEditorListener ChangeListener ComponentListener ComponentAdapter ContainerListener ContainerAdapter DocumentListener ExceptionListener ancestoradded(ancestorevent AncestorEvent) ancestormoved(ancestorevent) ancestorremoved(ancestorevent) caretupdate(caretevent CaretEvent) editingstopped(changeevent ChangeEvent) editingcanceled(changeevent) statechanged(changeevent ChangeEvent) componenthidden(componentevent) componentmoved(componentevent ComponentEvent) componentresized(componentevent) componentshown(componentevent componentadded(containerevent ContainerEvent) componentremoved(containerevent) changedupdate(documentevent DocumentEvent) insertupdate(documentevent DocumentEvent) removeupdate(documentevent) exceptionthrown(exception)
Listener API Table -2- Listener or Adapter FocusListener FocusAdapter HierarchyBoundsListener HierarchyBoundsAdapter HierarchyListener HyperlinkListener InputMethodListener InternalFrameListener InternalFrameAdapter ItemListener KeyListener KeyAdapter Listener Method focusgained(focusevent) focuslost(focusevent) ancestormoved(hierarchyevent) ancestorresized(hierarchyevent) hierarchychanged(hierarchyevent HierarchyEvent) hyperlinkupdate(hyperlinkevent HyperlinkEvent) caretpositionchanged(inputmethodevent InputMethodEvent) inputmethodtextchanged(inputmethodevent InputMethodEvent) internalframeactivated(internalframeevent) internalframeclosed(internalframeevent) internalframeclosing(internalframeevent) internalframedeactivated(internalframeevent) internalframedeiconified(internalframeevent) internalframeiconified(internalframeevent ifi InternalFrameEvent) t) internalframeopened(internalframeevent) itemstatechanged(itemevent ItemEvent) keypressed(keyevent) keyreleased(keyevent) keytyped(keyevent Deskripsi
Listener API Table -3- Listener or Adapter ListDataListener ListSelectionListener MenuDragMouseListener MenuKeyListener MenuListener MouseInputListener MouseInputAdapter Listener Method contentschanged(listdataevent) intervaladded(listdataevent) intervalremoved(listdataevent ListDataEvent) t t) valuechanged(listselectionevent) menudragmousedragged(menudragmouseevent) menudragmouseentered(menudragmouseevent) menudragmouseexited(menudragmouseevent) menudragmousereleased(menudragmouseevent) menukeypressed(menukeyevent MenuKeyEvent) menukeyreleased(menukeyevent) menukeytyped(menukeyevent) menucanceled(menuevent) menudeselected(menuevent) menuselected(menuevent) mouseclicked(mouseevent MouseEvent) mouseentered(mouseevent) mouseexited(mouseevent) mousepressed(mouseevent MouseEvent) mousereleased(mouseevent) mousedragged(mouseevent) mousemoved(mouseevent) Deskripsi
Listener API Table -4- Listener or Adapter Listener Method Deskripsi MouseListener MouseMotionListener MouseMotionAdapter, MouseInputAdapter MouseWheelListener MouseAdapter PropertyChangeListener TableColumnModelListener TableModelListener mouseclicked(mouseevent MouseEvent) mouseentered(mouseevent) mouseexited(mouseevent) mousepressed(mouseevent) mousereleased(mouseevent) mousedragged(mouseevent) mousemoved(mouseevent) popupmenucanceled(popupmenuevent) popupmenuwillbecomeinvisible(popupmenuevent PopupMenuEvent) popupmenuwillbecomevisible(popupmenuevent) propertychange(propertychangeevent PropertyChangeEvent) columnadded(tablecolumnmodelevent TableColumnModelEvent) columnmoved(tablecolumnmodelevent) columnremoved(tablecolumnmodelevent) columnmarginchanged(changeevent) columnselectionchanged(listselectionevent) tablechanged(tablemodelevent TableModelEvent)
Listener API Table -5- Listener Lste e or Adapter Listener Lste e Method Deskripsi TreeExpansionListener TreeModelListener TreeSelectionListener TreeWillExpandListener UndoableEditListener VetoableChangeListener WindowFocusListener WindowAdapter WindowListener WindowAdapter WindowStateListener WindowAdapter treecollapsed(treeexpansionevent) treeexpanded(treeexpansionevent) treenodeschanged(treemodelevent) treenodesinserted(treemodelevent) treenodesremoved(treemodelevent) treestructurechanged(treemodelevent) valuechanged(treeselectionevent) treewillcollapse(treeexpansionevent) treewillexpand(treeexpansionevent) undoableedithappened(undoableeditevent) vetoablechange(propertychangeevent) windowgainedfocus(windowevent) windowlostfocus(windowevent) windowactivated(windowevent) windowclosed(windowevent) windowclosing(windowevent) windowdeactivated(windowevent) windowdeiconified(windowevent) windowiconified(windowevent) windowopened(windowevent) windowstatechanged(windowevent)
Referensi -1- Sharon Zakhour et al, The Java Tutorial Fourth Edition, http://java.sun.com/docs/books/tutorial Deitel & Deitel, Java How to Program Sixth Edition, Prentice Hall, 2004 Kathy Sierra & Bert Bates, Head First Java 2nd Edition, O Reilly, 2005 Rogers Cadenhead d & Laura Lemay, Teach Yourself Java 6 in 21 Days, Sams Publishing, 2007 Robert Lafore, Data Structures and Algorithms in Java Second Edition, Sams Publishing, 2003
Referensi -2- Tim Pengembang JENI, JENI 1-6, Depdiknas, 2007 Abdul Kadir, Dasar Pemrograman Java 2, Penerbit Andi, 2004 Indrajani dan Martin, Pemrograman Berbasis Objek dengan Java, Elex Media Komputindo, 2007 LN Harnaningrum, Algoritma dan Pemrograman Java, Graha Ilmu, 2009 Rachmad Hakim & Sutarto, Mastering Java, Elex Media Komputindo, 2009