Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Java Swing Mohammad Iqbal Java Swing Mohammad Iqbal : Slide 1 Macam GUI pada Java • AWT (Abstract Window Toolkit) – SUN Microsystem -> Oracle Product 1. AWT adalah GUI Toolkit pertama pada bahasa pemrograman Java, sayang-nya AWT ini sangatsangat kekurangan komponen yang biasa digunakan untuk membangun sebuah aplikasi desktop secara lengkap (komponen tabel saja tidak ada ) 2. Aplikasi yang dibangun menggunakan AWT (Abstract Window Toolkit) akan tampak seperti aplikasi native yaitu, jika aplikasi yang dibangun menggunakan AWT ini dijalankan pada Sistem Operasi Windows. Maka aplikasi ini akan terlihat seperti aplikasi Windows pada umum-nya, dan begitu juga jika dijalankan pada Sistem Operasi Mac ataupun GNU/Linux. Kenapa ini bisa terjadi, karena AWT (Abstract Window Toolkit) ini benar-benar memanggil native subrutin untuk menggambar setiap komponen-nya ke layar. • Java Swing – SUN Microsystem -> Oracle 1. Adalah GUI Toolkit dalam Pemrograman GUI di Java, 2. Banyak dikenal dikarenakan dukungan tutorialnya banyak di Internet, dan juga merupakan standart dari Java sehingga tidak perlu melakukan penambahan library lagi kalau ingin menggunakan GUI Toolkit ini. 3. Terdapat 2 IDE besar yang menggunakan GUI Toolkit Java Swing yaitu NetBeans IDE(OpenSource) dan IntelliJ IDEA (mempunyai versi OpenSource dan Komersial) 4. Dibandingkan dengan AWT, Swing mempunyai lebih banyak komponen pendukung untuk membangun sebuah aplikasi yang lengkap untuk keperluan desktop. 5. Swing ini 100 % ditulis dengan bahasa pemrograman Java tanpa adanya sebuah wrapper untuk memanggil rutin-rutin native code via JNI (Java Native Interface). Seluruh komponen yang terdapat pada Swing, semuanya murni digambar sendiri menggunakan API (Application Programming Interface) 2D untuk memanggil rutin-rutin dasar penggambaran komponen-nya. Dengan model seperti ini, memungkinkan sekali aplikasi yang dibangun menggunakan Swing tampak sama persis di berbagai macam Sistem Operasi. 6. Swing juga mempunyai kemampuan untuk berganti-ganti tampilan menggunakan LAF (Look And Feel) atau themes Sayang-nya, jika kita menginginkan tampilan GUI yang native (tampilan-nya sama seperti aplikasi-aplikasi lain pada sistem operasi target) Swing seperti-nya masih terasa kurang smooth terutama dukungan pada font rendering-nya . Java Swing Mohammad Iqbal : Slide 2 Macam GUI pada Java SWT (Standart Widget Tookit) – IBM Product -> Eclipse Foundation SWT (Standart Widget Toolkit) ini adalah sebuah GUI Toolkit yang dikeluaran oleh IBM sebagai alternatif dari AWT/Java Swing milik SUN Microsystem, yang membedakan antara SWT (Standart Widget Toolkit) dan AWT/Java Swing adalah SWT ini benar-benar mengakses native GUI library yang terdapat pada Sistem Operasi melalui JNI (Java Native Interface). Dengan model seperti ini, memungkinkan tampilan aplikasi yang dibangun menggunakan GUI Toolkit SWT menjadi sama persis dengan aplikasi native lainnya. Kekurangan dari model pemanggilan native GUI library seperti ini adalah kita harus menyediakan library untuk tiap-tiap Sistem Operasi target aplikasi kita. QtJambi – Trolltech -> Nokia Product -> Stopped and Taken By Community • Pernah menggunakan Desktop Environment KDE ? Ingin membuat aplikasi yang tampilan-nya mirip dengan KDE menggunakan bahasa java sebagai dasar-nya, maka QtJambi adalah pilihan yang tepat. Karena QtJambi ini merupakan binding Qt Framework dengan bahasa Java, tetapi sayang-nya proyek QtJambi sudah tidak disupport oleh Nokia dan secara resmi telah ditutup Untung-nya, awal tahun ini ada beberapa developer yang peduli dengan kelangsungan proyek ini dan akhir-nya membuat sebuah komunitas untuk melanjutkan pengembangan proyek QtJambi, sekarang teman-teman bisa melihat perkembangan proyek QtJambi ini pada halaman QtJambi Community JavaGNOME – Community Product • Kalau QtJambi diatas ditujukan untuk teman-teman yang sudah akrab dengan API (Application Programming Interface) Qt Framework, berbeda dengan JavaGNOME Proyek ini lebih dikhususkan untuk teman-teman pecinta GTK atau yang paling banyak dikenal yaitu GNOMESama seperti GUI Toolkit SWT dan QTJambi, JavaGNOME ini juga mengakses native library tetapi API yang digunakan adalah API dari GTK. Untuk teman-teman yang sudah terbiasa membangun aplikasi menggunakan Glade, maka teman-teman bisa men-design form-nya menggunakan Glade dan memanggil-nya menggunakan bahasa java melalui JavaGNOME Java Swing Mohammad Iqbal : Slide 3 Apakah Swing? • Grup 14 packages untuk GUI • 451 class • Bagian dari JFC (Java Foundation Classes) Java Swing Mohammad Iqbal : Slide 4 Swing dan AWT • AWT = Abstract Windows Toolkit (cross platform) • AWT = Versi lama Java GUI 'heavyweight‘ (elemennya terhubung dengan UI OS), • Contoh : Frame AWT bukan JFrame Swing • Hampir semua komponen Swing 'lightweight' (ringan, tdk terhubung dgn OS UI elemen) • Jangan gabung AWT dan Swing, Gunakan Swing saja Java Swing Mohammad Iqbal : Slide 5 Dari AWT ke Swing • AWT: Abstract Windowing Toolkit • import java.awt.* • Swing: new with Java2 • • • • • • import javax.swing.* Merupakan Perluasan dari AWT Banyak komponen baru yang improved. Standard dialog boxes, tooltips, … Look-and-feel, skins Event listeners • API: • http://java.sun.com/j2se/1.3/docs/api/index.html Java Swing Mohammad Iqbal : Slide 6 API Komponen GUI Java: GUI komponen = class – Properties JButton – Methods – Events Java Swing Mohammad Iqbal : Slide 7 Menggunakan Komponen GUI 1. Create it (Buat) • Instantiate object: b = new JButton(“press me”); 2. Configure it (Atur) • • Properties: b.text = “press me”; Methods: b.setText(“press me”); 3. Add it (Tambahkan) • panel.add(b); 4. Listen to it (dengarkan) • JButton Events: Listeners Java Swing Mohammad Iqbal : Slide 8 Anatomi Aplikasi GUI GUI Internal structure JFrame JFrame JPanel containers JPanel JButton JButton JLabel JLabel Java Swing Mohammad Iqbal : Slide 9 Menggunakan Komponen GUI 1. 2. 3. 4. Create it Configure it Add children (jika container) Add to parent (kalau bukan menggunakan JFrame) 5. Listen to it Urutan sangat Penting diperhatikan Java Swing Mohammad Iqbal : Slide 10 Membuat GUI dari bottom up Listener • Create: • • • • Frame Panel Components Listeners • Add: (bottom up) • listeners into components • components into panel • panel into frame JLabel JButton JPanel JFrame Java Swing Mohammad Iqbal : Slide 11 Contoh Langkah Program JFrame f = new JFrame(“title”); JPanel p = new JPanel( ); JButton b = new JButton(“press me”); p.add(b); f.setContentPane(p); // add button to panel // add panel to frame f.show(); press me Java Swing Mohammad Iqbal : Slide 12 Contoh kode Aplikasi import javax.swing.*; class hello { public static void main(String[] args){ JFrame f = new JFrame(“title”); JPanel p = new JPanel(); JButton b = new JButton(“press me”); p.add(b); f.setContentPane(p); // add button to panel // add panel to frame f.show(); } press me } Java Swing Mohammad Iqbal : Slide 13 Swing dan threads • Thread termasuk dalam proses lightweight • Kebanyakan komponen Swing tidak thread-safe • Solusinya adalah harus yakin bahwa semua kode yang men-create dan memodifikasi komponen Swing dieksekusi dalam thread 'event-dispatching‘ yang sama Java Swing Mohammad Iqbal : Slide 14 Swing dan Threads Contoh Aplikasi Swing : Starting-up public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGUI(); // << methode untuk memulai Swing } }); } Java Swing Mohammad Iqbal : Slide 15 createAndShowGUI private static void createAndShowGUI() { //Create and set up the window. JFrame frame = new JFrame("Hi.."); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Add a label. JLabel label = new JLabel("Hello World"); frame.getContentPane().add(label); //Display the window. frame.pack(); frame.setVisible(true); } Silahkan coba Kode ini ! Java Swing Mohammad Iqbal : Slide 16 Layout Manager • Swing UI menggunakan LayoutManager untuk mengontrol posisi item • Ini adalah pilihan untuk dapat bekerja dalam cara yang berbeda tapi lebih mudah : – frame.setLayout(null); Java Swing Mohammad Iqbal : Slide 17 Posisi Absolut JFrame frame = new JFrame("I am a JFrame"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(20,30,300,100); frame.setLayout(null); JButton butt=new JButton("Click me"); frame.getContentPane().add(butt); butt.setBounds(20, 20, 200,20); frame.setVisible(true); Silahkan coba Kode ini ! - Mulai dengan contoh sebelumnya dan tulis kode ini di bagian CreateandShowGUI() Java Swing Mohammad Iqbal : Slide 18 Respon pada user actions • Berdasarkan model event-handling • Komponen baru seperti button harus memiliki Listener khusus • Obyek Listener diprogram untuk merespon Event objects yang tiba dari komponen • Obyek Listener harus diimplementasikan pada interface yang tepat Java Swing Mohammad Iqbal : Slide 19 Mekanisme Event-handling Event object Interface, mis: ActionListener Listener, mis : JFrame Ketika di klik Komponen, mis: button Saat inisialisasi, komponen akan memilih obyek lain mis: JFrame, untuk menjadi listener Eksekusi method interface yang tepat, mis: actionPerformed Java Swing Mohammad Iqbal : Slide 20 Interface • Interface adalah kumpulan methods • Misalnya : interface ActionListener memiliki satu method – public void actionPerformed(ActionEvent e) • Class dapat mendeklarasikan method ini sebagai implements, misalnya : public class Main implements ActionListener • Harus didefenisikan mthod dalam interface ini atau compiler akan gagal mengkompilasinya. • Suatu Class dapat mengimplementasikan multiple interface. Java Swing Mohammad Iqbal : Slide 21 Demo klik Button • • • • • • JButton dan JLabel clickCounts akan mengingat jumlah klik Class implements ActionListener Buat JFrame, JButton dan JLabel Instantiate obyek aplikasi Set untuk menjadi listener dari button Java Swing Mohammad Iqbal : Slide 22 Demo klik Button * Main.java * * demonstrasi respon klik button */ package swingprogs; import javax.swing.*; import java.awt.event.*; public class Main implements ActionListener { private static void createAndShowGUI() { // make frame.. JFrame frame = new JFrame("I am a JFrame"); frame.setDefaultCloseOperation(JFrame.EXIT_ON _CLOSE); frame.setBounds(20,30,300,100); frame.getContentPane().setLayout(null); // make a button JButton butt=new JButton("Click me"); frame.getContentPane().add(butt); butt.setBounds(20, 20, 200,20); // instantiate an application object Main app = new Main(); // make the label app.label = new JLabel("0 clicks"); app.label.setBounds(20,40, 200,20); frame.getContentPane().add(app.label); // set the application object to be the thing which // listens to the button butt.addActionListener(app); frame.setVisible(true); } Java Swing Mohammad Iqbal : Slide 23 Demo klik Button public void actionPerformed(ActionEvent e) { // Ini akan dieksekusi ketika button diklik clickCount++; label.setText("Clicks = "+clickCount); } public static void main(String[] args) { // Memulai Swing GUI SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGUI(); } }); } // application object fields int clickCount=0; JLabel label; } Java Swing Mohammad Iqbal : Slide 24 Button yang mana yang diklik? • Jika menggunakan banyak button, setiap button harus me-link ke actionPerformed • Bagaimana mengetahui button yang mana yang diklik? • Gunakan method .getSource pada obyek ActionEvent Java Swing Mohammad Iqbal : Slide 25 Contoh mendeteksi button yang diklik butt1=new JButton("Button 1"); .. butt2 = new JButton("Button 2"); .. public void actionPerformed(ActionEvent e) { if (e.getSource()==butt1) label.setText("Butt1 clicked"); else Silahkan coba Kode ini ! label.setText("Butt2 clicked"); } Java Swing Mohammad Iqbal : Slide 26 Perhatikan dan Rasakan Look and Feel (LaF) CDE/Motif Windows Metal Quaqua JTatto Tampilan ini tergantung pada implementasi library LaF, Contoh library lain untuk melakukan make over tampilan aplikasi yang menggunakan bahasa pemrograman java : Substance, Quaqua, JTatto, serta MacWidgets. Baca di : http://blog.fastncheap.com/look-feel-java-swing/#ixzz1xqVFSgC0 Java Swing Mohammad Iqbal : Slide 27 Setting LaF (Look and Feel) try { UIManager.setLookAndFeel( "com.sun.java.swing.plaf.motif.MotifLookAndFeel" ); } catch (Exception e) { System.out.println("Cant get laf"); } .. JFrame frame = new JFrame(); This in main() - set laf as first step try .. catch.. because could fail UIManager is in java.lang Java Swing Mohammad Iqbal : Slide 28 Menemukan LaF yang terinstall dalam Sistem Object a[]= UIManager.getInstalledLookAndFeels(); for (int i=0; i<a.length; i++) System.out.println(a[i]); Java Swing Mohammad Iqbal : Slide 29 Dekorasi Frame JFrame.setDefaultLookAndFeelDecorated(true); .. Tinggal panggil JFrame constructor Java Swing Mohammad Iqbal : Slide 30 Swing memiliki banyak Class Internal structure Containers Sesuatu tempat yang mengumpulkan sesuatu lainnya Mis: JFRame, JPanel JFrame containers JPanel Controls JButton JLabel User I/O widget Mis: Jbutton, JLabel Java Swing Mohammad Iqbal : Slide 31 Container top level containers - JFrame JApplet JDialog General purpose containers • panel • scroll pane • split pane • tabbed pane • tool bar Java Swing Mohammad Iqbal : Slide 32 JPanel ( pada createAndShowGUI) JFrame.setDefaultLookAndFeelDecorated(true); JFrame frame = new JFrame("I am a JFrame"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(20,30,300,100); frame.setLayout(null); //Create a panel JPanel myPanel = new JPanel(); myPanel.setBackground(new Color(255,3,25)); myPanel.setOpaque(true); //Make it the content panel frame.setContentPane(myPanel); frame.setVisible(true); Java Swing Mohammad Iqbal : Slide 33 JPanel • adalah subclass dari JComponent • Merupakan komponen Swing yang bukan bagian dari top-level container, tapi digunakan sebagai general purpose container • Kita dapat menambahkan border dan tooltip di sini. Java Swing Mohammad Iqbal : Slide 34 Tool-tip dan border .. myPanel.setOpaque(true); myPanel.setToolTipText("I'm a JPanel"); myPanel.setBorder(BorderFactory.createLineBorder(Color.white)); frame.setContentPane(myPanel); .. Java Swing Mohammad Iqbal : Slide 35 JSplitPane .. setLayout(null); //Create a split pane JSplitPane myPane = new JSplitPane(); myPane.setOpaque(true); frame.setContentPane(myPane); frame.setVisible(true); Java Swing Mohammad Iqbal : Slide 36 JSplitPane menggunakan JPanels //Create a split pane JSplitPane myPane = new JSplitPane(); myPane.setOpaque(true); myPane.setDividerLocation(150); // make two panels JPanel right = new JPanel(); right.setBackground(new Color(255,0,0)); JPanel left = new JPanel(); left.setBackground(new Color(0,255,0)); // set as left and right in split myPane.setRightComponent(right); myPane.setLeftComponent(left); Java Swing Mohammad Iqbal : Slide 37 Latihan • Buatlah Program • Buttons set the colour of the left hand pane Java Swing Mohammad Iqbal : Slide 38 JTextField • Untuk satu baris input teks • Methods : getText, setText • Dapat menggunakan ActionListener, yang dipicu ketika tombol Enter ditekan Java Swing Mohammad Iqbal : Slide 39 Contoh JTextField • • • • • • Cek Main object fields untuk label dan field teks Buat panel, set sebagai content pane Buat dan tambahkan field teks Tambahkan actionlistener Buat dan tambahkan label Program actionPerformed Java Swing Mohammad Iqbal : Slide 40 Contoh JTextField import javax.swing.*; import java.awt.event.*; import java.awt.*; public class Main implements ActionListener { private static void createAndShowGUI() { Main app=new Main(); // make frame.. JFrame.setDefaultLookAndFeelDecorated(true); JFrame frame = new JFrame("I am a JFrame"); frame.setDefaultCloseOperation(JFrame.EXIT_ON _CLOSE); frame.setBounds(20,30,300,120); frame.setLayout(null); // make a panel JPanel myPanel = new JPanel(); // make a text field app.textField = new JTextField("Type here",20); myPanel.add(app.textField); // set up action listener app.textField.addActionListener(app); // make and add label app.label = new JLabel("Result"); myPanel.add(app.label); frame.setContentPane(myPanel); frame.setVisible(true); } Java Swing Mohammad Iqbal : Slide 41 Contoh JTextField public void actionPerformed(ActionEvent e) { // this happens when Enter hit on the text field label.setText(textField.getText()); } public static void main(String[] args) { // start off.. try { UIManager.setLookAndFeel( "javax.swing.plaf.metal.MetalLookAndFeel" ); } catch (Exception e) { System.out.println("Cant get laf"); } SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGUI(); } }); } // application object fields JLabel label; JTextField textField; } Java Swing Mohammad Iqbal : Slide 42 JTextArea JPanel myPanel = new JPanel(); app.textArea = new JTextArea("Type here",5, 20); myPanel.add(app.textArea); TextArea expands rows and columns as needed Java Swing Mohammad Iqbal : Slide 43 JScrollPane JTextArea textArea = new JTextArea("Type here",5, 20); JScrollPane scrollPane = new JScrollPane(textArea); frame.setContentPane(scrollPane); Java Swing Mohammad Iqbal : Slide 44 Latihan • Buat Program • Gunakan selectAll dan cut methods dari JTextComponent, dengan JTextArea. Java Swing Mohammad Iqbal : Slide 45 Timer .. Timer t = new Timer(1000, app); t.start(); app.label = new JLabel("Time"); app.label.setBounds(20,20,200,20); frame.getContentPane().add(app.label); .. public void actionPerformed(ActionEvent e) { String now = (new java.util.Date()).toString(); label.setText(now); } Java Swing Mohammad Iqbal : Slide 46 Citra Icon JFrame frame = new JFrame("I am Celsius"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(20,30,200,200); frame.getContentPane().setLayout(null); ImageIcon icon = new ImageIcon("c:/celsius.jpg", "Celsius"); JLabel label = new JLabel(icon); label.setBounds(20,20,150,150); frame.getContentPane().add(label); frame.setVisible(true); Java Swing Mohammad Iqbal : Slide 47 JScrollBar Gunakan : • JScrollBar dan JLabel • Constructor argumen • Implementasikan AdjustmentListener • adjustmentValueChanged • e.getValue() Java Swing Mohammad Iqbal : Slide 48 JScrollBar import javax.swing.*; import java.awt.event.*; public class Main implements AdjustmentListener { private static void createAndShowGUI() { // make frame.. JFrame frame = new JFrame("JScrollBar"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(20,30,200,200); frame.getContentPane().setLayout(null); Main app = new Main(); app.sbar = new JScrollBar(java.awt.Adjustable.VERTICAL, 127, 1,0,255); app.sbar.setBounds(20,20, 20, 200); app.sbar.addAdjustmentListener(app); frame.getContentPane().add(app.sbar); app.label = new JLabel(); app.label.setBounds(50,20,100,20); frame.getContentPane().add(app.label); frame.setVisible(true); } public void adjustmentValueChanged(AdjustmentEvent e) { label.setText("Value = "+e.getValue()); } public static void main(String[] args) { // start off.. SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGUI(); } }); } // application object fields JScrollBar sbar; JLabel label; } Java Swing Mohammad Iqbal : Slide 49 Latihan • Buat Program • Scroll bars determine the red, green and blue components of the background of the panel Java Swing Mohammad Iqbal : Slide 50 JCheckBox • lihat source code di word • implementasikan ActionListener • isSelected() Java Swing Mohammad Iqbal : Slide 51 RadioButton • Berada dalam grup – hanya satu yang dipilih per grup • Langkah : – Buat radiobuttons – Buat group – Tambah radiobuttons ke grup – ActionListener Java Swing Mohammad Iqbal : Slide 52 RadioButton group border .. JPanel groupPanel = new JPanel(); groupPanel.setBounds(10,10,100,60); groupPanel.setBorder(BorderFactory.createLineBorder(Color.b lack)); frame.getContentPane().add(groupPanel); groupPanel.add(app.choice1); groupPanel.add(app.choice2); .. Java Swing Mohammad Iqbal : Slide 53 ListBox • Langkah : – Data dibuat dalam array – List box menunjukkan array – List box beada dalam scroll pane – Gunakan myList.getModel().getElemen tAt(.. lihat source code di fileword Java Swing Mohammad Iqbal : Slide 54 Dual JListBoxes lihat source code di file word • Jika ingin menambahkan item dalam suatu list • Gunakan Vector bukan array untuk menyimpan data • Metode Cek untuk delete item dan copy ke listbox lainnya. Java Swing Mohammad Iqbal : Slide 55 Layout Manager • Layout manager mengontrol posisi komponen • Komponen mendapatkan ukuran yang tepat 'preferred size' sehingga dapat mencegah perubahan tampilan • .pack() akan mengatur ukuran container sehingga cukup untuk komponen Java Swing Mohammad Iqbal : Slide 56 Some LayoutManagers Dari: Swing tutorial java.sun.com Java Swing Mohammad Iqbal : Slide 57 FlowLayout JFrame.setDefaultLookAndFeelDecorated(true); JFrame frame = new JFrame("FlowLayout"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().setLayout(new FlowLayout()); JButton b1 = new JButton("Hello"); frame.getContentPane().add(b1); JButton b2 = new JButton("Two"); frame.getContentPane().add(b2); JTextField t1 = new JTextField("Text here"); frame.getContentPane().add(t1); frame.pack(); frame.setVisible(true); Coba program ini coba re-sizing frame saat runtime tambah buttons tambah frame.setBounds Remove pack(); Java Swing Mohammad Iqbal : Slide 58 BorderLayout JFrame.setDefaultLookAndFeelDecorated(true); JFrame frame = new JFrame("Border"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JButton b1 = new JButton("At the top"); frame.getContentPane().add(b1,BorderLayout.PAGE_START ); JButton b2 = new JButton("Bottom"); frame.getContentPane().add(b2,BorderLayout.PAGE_END); JTextField t1 = new JTextField("Left"); frame.getContentPane().add(t1,BorderLayout.LINE_START); JTextField t2 = new JTextField("Right"); frame.getContentPane().add(t2,BorderLayout.LINE_END); JButton b3 = new JButton("Centre"); frame.getContentPane().add(b3,BorderLayout.CENTER ); frame.pack(); frame.setVisible(true); Coba Program ini Java Swing Mohammad Iqbal : Slide 59 Grid JFrame.setDefaultLookAndFeelDecorated(true); JFrame frame = new JFrame("Grid"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().setLayout(new GridLayout(4,3,5,5)); for (int i=0; i<10; i++) frame.getContentPane().add(new JButton(""+i)); frame.pack(); frame.setVisible(true); Java Swing Mohammad Iqbal : Slide 60 Kombinasi Lay-out lihat source code di word • • • • • Frame diset null layout Frame memiliki upper dan lower panel Upper panel diset null layout Lower panel diset grid layout Note font of display Java Swing Mohammad Iqbal : Slide 61 Menu JMenuBar JMenu JMenuItem Java Swing Mohammad Iqbal : Slide 62 Menu Main app = new Main(); .. JMenuBar myMenuBar = new JMenuBar(); JMenu menu1 = new JMenu("File"); JMenuItem item = new JMenuItem("Exit"); item.addActionListener(app); menu1.add(item); myMenuBar.add(menu1); frame.setJMenuBar(myMenuBar); .. public void actionPerformed(ActionEvent e) { System.exit(0); } Java Swing Mohammad Iqbal : Slide 63 Menu Options lihat source code di word Latihan Copy gambar ini Tambahkan option kedua yaitu 'Edit' setelah 'File' Masukkan pilihan Undo, Redo, Cut Copy dan Paste di sana Gunakan icon yang tepat jika memungkinkan Java Swing Mohammad Iqbal : Slide 64 JToolBar .. .. frame is BorderLayout .. JToolBar toolBar = new JToolBar("Test"); JButton butt1 = new JButton(new ImageIcon("icon.gif")); toolBar.add(butt1); .. frame.add(toolBar, BorderLayout.PAGE_START); Java Swing Mohammad Iqbal : Slide 65 paint • JComponents memiliki metode paint() • Ini dipanggil sistem ketika dibutuhkan untuk menampilkan obyek • Kita dapat memanfaatkan over-ride paint() untuk mengontrol tampilan (appearance) komponen • Ini akan mempengaruhi komponen sub-classnya • Metode paint memiliki obyek grafik sebagai parameter, seperti color, font dll. • Kita dapat menggunakan obyek grafik untuk menampilkan sesuatu Java Swing Mohammad Iqbal : Slide 66 public class MyFrame extends JFrame { public MyFrame() { super("Some title"); setDefaultCloseOperation(EXIT_ON_CLOSE); setBounds(20,30,230,180); myPanel = new MyPanel(); myPanel.setOpaque(true); setContentPane(myPanel); setVisible(true); } MyPanel myPanel; } Contoh public class MyPanel extends JPanel { public void paint(Graphics g) { g.drawLine(0,0,getWidth(),getHeight()); g.drawString("Hello",getWidth()/2,getHeight()/2); } } Java4-Graphics Java Swing Mohammad Iqbal : Slide 67