Saturday, May 26, 2012

Gui Lay Out Management


1.     Layout Manager
Selama ini, pada saat kita merancang GUI untuk program Java, salah satu halangannya adalah bahwa komponen yang digunakan dapat berpindah-pindah lokasi. Hal ini terjadi apabila kita me-resize frame utama. Komponen dapat diorganisasikan di dalam container dengan menggunakan class “layout manager”. Kita dapat mengubah secara manual class layout yang ingin digunakan, dan setiap container dapat memiliki layout manager masing-masing.

Seperti pada gambar, layout manager bertugas menyusun komponen-komponen(button, label, checkbox, dll) di dalam suatu container (panel, frame, dll). Layout manager menentukan posisi dan ukuran setiap komponen di dalam container. Proses ini akan berbeda untuk setiap class layout yang digunakan. AWT dan Swing memiliki beberapa layout manager standar yang penggunaannya seringkali dikombinasikansesuai situasi dan kebutuhan


Standard Layout Manager
·         FlowLayout
·         GridLayout
·         BorderLayout
·         CardLayout
·         GridBagLayout
·         Container


Cara  menggunakan layout manager:
·         Layout manager hrs dideklarasikan terlebih dahulu sblm komponen ditambahkan ke kontainer.
·         Default layout manager untuk panel adalah FlowLayout
·         Default layout manager untuk frame, window, dan applet adalahBorderLayout
·         Utk membuat layout manager, hrs dibuat instace dgn statement, misal :
FlowLayout flo = new FlowLayout();
Agar bisa digunakan maka hrs menambahkan method :
setLayout();

Mengubah Default Layout Manager
·         Setiap container memiliki default layout manager.
·         Pada saat kita membuat sebuah container (misal: panel, frame, tabbed pane, split pane, dll), maka container tsb memiliki objek Layout Manager masing-masing.
·         Kita dapat mengubah layout manager default tersebut dengan suatu layout yang baru dengan menggunakan method “setLayout()”. Contoh:
Default layout manager untuk JFrame adalah: FlowLayout. Kita dapat mengubah layout tersebut dengan cara misalnya:
myFrame.setLayout(new BorderLayout());

1. FlowLayout

FlowLayout merupakan layout manager yang paling sederhana. Layout ini menyusun komponen berdasarkan ukuran default masing-masing, dengan posisi mulai dari kiri ke kanan dan dari atas ke bawah di dalam container yang digunakan.
FlowLayout dapat memiliki “row justification”: LEFT, CENTER, atau RIGHT serta “padding” horizontal/vertical. Secara default, layout ini menggunakan justification CENTER. Artinya, semua komponen akan disimpan di posisi tengah-tengah. FlowLayout merupakan default untuk JPanel.
Contoh membuat panel dengan flow layout:
JPanel panel1 = new JPanel();
panel1.setLayout(new FlowLayout());

Contoh Programnya
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Flow extends JFrame {
public Flow( ) {
createUserInterface();
}
private void createUserInterface(){
JPanel panel1 = new JPanel();
panel1.setLayout(new FlowLayout()); // baris ini dapat dihapus
panel1.add(new JButton("satu"));
panel1.add(new JButton("dua"));
panel1.add(new JButton("tiga"));
panel1.add(new JButton("empat"));
panel1.add(new JButton("lima"));
this.add(panel1);
this.setTitle("Laihan Flow");
this.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
this.setSize(400, 75);
this.setLocation(200, 200);
this.setVisible(true);
}
public static void main(String[] args) {
Flow app = new Flow();
}
}
Berikut tampilannya
Description: flow 




2. GridLayout
GridLayout menempatkan komponen dalam bentuk “rectangular grid”.
Ada 3 constructor untuk GridLayout:
-          GridLayout(): membuat layout dengan satu kolom per komponen. Hanya satu baris yang digunakan.
-          GridLayout(int rows, int cols): membuat suatu layout berdasarkan jumlah baris dan kolom yang diinginkan.
-          GridLayout(int rows, int cols, int hgap, int vgap): membuat layout berdasarkan jumlah baris dan kolom yang diinginkan, serta ukuran jarak (gap) horisontal maupun vertical untuk setiap baris dan kolom tersebut.
GridLayout menempatkan komponen dengan urutan dari kiri ke kanan dan dari atas ke bawah dan memaksa setiap komponen untuk menempati space container yang kosong serta membagi rata ukuran space tersebut.
GridLayout paling cocok digunakan untuk menyusun komponen yang berukuran sama, misalnya 2 buah JPanel berukuran sama di dalam sebuah frame.
Contoh membuat GridLayout:
frame.add(panel1);
frame.add(panel2);
frame.setLayout(new GridLayout(2, 1));
Kita dapat men-set jumlah baris dan kolom dengan angka 0. Hal ini berarti bahwa kita tidak mempedulikan berapa banyak komponen yang akan masuk ke dalam dimensi layout manager tersebut.
Contoh: GridLayout(2,0)
Artinya: kita membuat layout manager dengan 2 baris dan jumlah tak terbatas untuk kolomnya.
Contoh Programnya
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Grid extends JFrame {
public Grid( ) {
createUserInterface();
}
private void createUserInterface(){
JPanel panel1 = new JPanel();
panel1.setLayout(new GridLayout(2, 3));
panel1.add(new JButton("satu"));
panel1.add(new JButton("dua"));
panel1.add(new JButton("tiga"));
panel1.add(new JButton("empat"));
panel1.add(new JButton("lima"));
this.add(panel1);
this.setTitle("Latihan Grid");
this.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
this.setSize(350, 150);
this.setLocation(200, 200);
this.setVisible(true);
}
public static void main(String[] args) {
Grid app = new Grid();
}
}
Berikut tampilannya
Description: grid 






3.      CARD LAYOUT

Dibawah ini adalah cara untuk menggunakan card layout manager. Manajer Layout digunakan dalam orginization dari Panel dan Bingkai. Tata letak yang tepat seharusnya dipilih untuk mengakomodasi, resizings frame dan penggunaan.

Ada 2 konstruktor yang tersedia untuk manajer ini, seperti tata border layout:

publik CardLayout ()
-Default, jarak dari 0 kemungkinan akan diberikan
public CardLayout (int hgap, vgap int)
-Di mana Anda dapat menyediakan jarak horisontal dan vertikal seperti yang anda inginkan.

Layout Manager ini juga melibatkan penumpukkan frame dalam permintaan yang cocok, saat memanggil fungsi Berikutnya, kerangka yang telah ditambahkan dalam urutan setelah frame yang sedang ditampilkan adalah frame berikutnya.

public void first (pemilik Container)
-Frame pertama akan ditampilkan
public void next (pemilik Container)
-Menampilkan frame berikutnya
public void previous (Container owner)
-Menampilkan frame sebelumnya
public void last( Pemilik Container )
-Menampilkan frame terakhir
public void show (Container owner,nama  String )
-Menampilkan [n] nama sebagai teks.

Contoh kode :

import java.awt.*;
import java.awt.event.*; // need this to handle button presses
import javax.swing.*;
public class CardLayoutManagerExample extends JFrame {

private CardLayout cardLayoutManager;
public CardLayoutManagerExample(String title) {

super(title);
Container contentPane = getContentPane();
JButton firstButton, secondButton, thirdButton;
ActionListener listener;

firstButton = new JButton(“one”);
secondButton = new JButton(“two”);
thirdButton = new JButton(“three”);

cardLayoutManager = new CardLayout(2,2);
contentPane.setLayout(cardLayoutManager);

contentPane.add(“first”, firstButton);
contentPane.add(“second”, secondButton);
contentPane.add(“third”, thirdButton);

listener = new ButtonListener();
firstButton.addActionListener(listener);
secondButton.addActionListener(listener);
thirdButton.addActionListener(listener);

}

class ButtonListener implements ActionListener {

public void actionPerformed(ActionEvent theEvent) {
cardLayoutManager.next(getContentPane());
}

}

public static void main(String args[]) {

CardLayoutManagerExample frame = new CardLayoutManagerExample(“Example”);
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.setSize(100,100);
frame.setVisible(true);

}

}

4.      BORDER LAYOUT
Dibawah ini adalah cara penggunaan Border layout Manager. Manajer Layout digunakan dalam orginization dari Panel dan Bingkai. Tata letak yang tepat seharusnya dipilih untuk mengakomodasi, resizings frame dan penggunaan.

Kali ini hanya ada 2 konstruktor, default dan satu lagi di mana jarak horisontal dan vertikal, yang harus diberikan.

public BorderLayout ()
public BorderLayout (int hgap, vgap int)

Layout manager ini cukup mudah, sehingga cara terbaik untuk mempelajarinya adalah dengan sebuah contoh.

Contoh Kode:
import java.awt.*;
import javax.swing.*;
public class BorderLayoutManagerExample extends JFrame {

public BorderLayoutManagerExample (String title) {

super(title);
Container contentPane = getContentPane();
contentPane.setLayout(new BorderLayout(2,2));

// Menambahkan komponen dengan layout manager
contentPane.add(BorderLayout.NORTH, new JButton(“North”));
contentPane.add(BorderLayout.SOUTH, new JButton(“South”));
contentPane.add(BorderLayout.EAST, new JButton(“East”));
contentPane.add(BorderLayout.WEST, new JButton(“West”));
contentPane.add(BorderLayout.CENTER, new JButton(“Center”));

}
public static void main(String args[]) {

BorderLayoutManagerExample frame = new BorderLayoutManagerExample(“Example”);
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.setSize(500, 300);
frame.setVisible(true);
}
}
Tombol frame disini tidak melakukan apapun. Ini adalah sebuah contoh yang sederhana dari penggunaan layout manager. Anda bisa mencoba untuk mengubah fram.serResizable menjadi true dan resize frame tersebut.
Source : Border Layout Manager Pada Java by islam-download.net
5.       GUI Gridbag layout
GridBagLayout adalah meruoakan salah satu tata letak penyedia tata ketak komponen GUI pada java yang paling flexibel dan kompleks. Sehingga ini dapat mmungkinkan agi programer untuk mengatur tata letak komponen GUI dalam beberapa span baris atau kolom.  GridBagLayout menempatkan komponen dalam bentuk empat persegipanjang (sel).

Contoh rutin program GridBag:ayout sebagai berikut
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author phapeng
 */

import java.awt.*;
public class GridBag extends java.applet.Applet {
    GridBagConstraints constraints = new GridBagConstraints();
    void addGB (Component component, int x, int y){
        constraints.gridx = x;
        constraints.gridy = y;
        add (component, constraints);
    }
   
    public void init(){
        setLayout (new GridBagLayout());
        int x, y;
        addGB(new Button("North"), x = 1, y = 0);
        addGB(new Button("West"), x = 0, y = 1);
        addGB(new Button("Center"), x = 1, y = 1);
        addGB(new Button("East"), x = 2, y = 1);
        addGB(new Button("South"), x = 1, y = 2);
    }
       
}

 
 













Hasil running sebagai berikut :
Penentuan tata letak kompnen layout yang ada menggunakan constrain. Constrain merupakan method variabel yang berada pada kelas GridBagLayout. Constrain yang digunakan pada program diatas adalah gridx,gridy. Constrain tersebuat mengatur tata letak dalam titik koordinat x dan y. penentuan letak dilakukan saat penambahan komponen layout. Rutin penambahan sebagai berikut :
  addGB(new Button("North"), x = 1, y = 0);
        addGB(new Button("West"), x = 0, y = 1);
        addGB(new Button("Center"), x = 1, y = 1);
        addGB(new Button("East"), x = 2, y = 1);
        addGB(new Button("South"), x = 1, y = 2);

titik koordinat pusat  (0,0) berada tepat di tengah komponen Layout yang dibuat. Pengaturan titik koordinat dilakukan dalam kelas GridBagLayoutConstrain. Kemudian agar titik koordinat yang sudah diatur dalam kelas GridBagConstrain dapat diimplementasikan dalam komponen GUI yang dibuat perlu dilakukan pembuatan objek agar segala method variable yang ada di dalam kelas GridBagConstrain dapat dianggil. Rutin pembuatan objek sebagai berikut :
GridBagConstraints constraints = new GridBagConstraints();
Sedangkan proses pamanggilan method variabel yang berada dalam kelas GridBagConstrain sebagai berikut :
void addGB (Component component, int x, int y){
        constraints.gridx = x;
        constraints.gridy = y;
        add (component, constraints);
    }

Daftar method variabel atau constrain yang dapat dipanggil dan diimplementasikan dalam penentuan tata letak dan ukuran komponen layout sebagai berikut :
1.       gridx,gridy
Constrain ini digunakan untuk menentukantata letak komponen berdasarakan titik koordinat x dan y, x untuk vertikal dan y untuk horisontal. Posisis koordinat (x,y) pusat atau (0,0) berada tepat ditengah GUI applet.
2.       gridwidth,gridheight
Digunakan untuk menentukan jumlah kolom dan baris yang akan ditempati komponen GUI  layout.
3.       Fill
DIgunakan untuk mengatur apakah komponen GUI yang ditambahkan akan menempati seluruh tempat yang disediakan atau tidak.
4.       ipadx,ipady
digunakan untuk menentukan lebar dan ketinggian komponen button yang ditambahkan.
5.       Insets
Digunakan untuk menentukan jarak antar komponen GUI.
6.       Achor
Digunakan untuk menentukan letak komponen brdasarkan area. Konstanta yang dipakai dalam anchor adalah adalah CENTER (default), PAGE_START, PAGE_END, LINE_START, LINE_END, FIRST_LINE_START, FIRST_LINE_END, LAST_LINE_END, dan LAST_LINE_START.

Implementasi tata letak anchor sebagai berikut :
-------------------------------------------------
|FIRST_LINE_START   PAGE_START     FIRST_LINE_END|
|                                                |
|                                                |
|LINE_START           CENTER             LINE_END|
|                                                |
|                                                |
|LAST_LINE_START     PAGE_END       LAST_LINE_END|
-------------------------------------------------

7.       weightx,weighty
Digunakan untuk menentukan jarak ruang antar kolom dan antar baris.


6.       CONTAINER
Container merupakan sebuah kelas yang digunakan untuk sebagai tempat atau wadah dalam penataan komponen GUI layout management.
Construktor container adalah :
Container():
Mehod-method yang dapat diakses dari kelas container adalah sebagai berikut :
·         add(component comp)
menamnahkan komponen tertentu diakhir container
·         addContainerListener(ContainerListener)
menambahkan container listener tertentu ke container event dari container ini
·         addImpl(Component comp, Object constraints, int index)
menambahkan komponen tertentu ke container ini ada index tertentu
·         addNotify()
membuat container dapat dilihat melalui layar native screen tertentu
·         addPropertyChangeListener(String property Name, PropertyChange Listener listener)
menambahkan suatu PropertyChangeListener pada listener list untuk property tertentu
·         applyComponentOrientation(ComponenOrientation o)
mengeset property ComponentOrientation dari container ini dan semua komponen yang terkandung di dalamnya.
·         areFocusTraversalKeySet(int id)
mengembalikan apakah set dari focus traversal keys untuk suatu operasi focus traversal yang diberikan telah secara eksplisit didefinisikan untuk container ini.
·         doLayout()
menyebabkan container melayout componennya
·         findComponentAt(int x,int y)
melokasikan komponen yang terlihat yang beada pad aposisi tertentu
·         findComponentAt(point p)
melokasikan komponen yang terlihat yang beada pada point tertentu
·         getAlignmentX()
mengembalikan perataan pada sumbu x
·         getAlignmentY()
mengembalikan perataan pada sumbu Y
·         getComponent(int n)
mendapatkan componen yang ke n
·         getComponentAt(int x,int y)
mencari letak componen dengan posisi x, y
·         getComponentAt(Point p)
menghasilkan component yang mengandung  point tertentu
·         getComponentCount()
mendapatkan sejumlah componen dalam panel tersebut
·         getComponents()
mendapatkan semua component pada container
·         getContainerListeners()
mengembalikan suatu array dari semua container listeners yang diregistrasi pada container.
·         getFocusTraversalkeys(int id)
mengembalikan set dari focus traversal keys untuk suatu operasi traversal pada container ini.
·         getFokusTraversalPolicy()
mengembalikan focus traversal policy yang akan mengatur keyboard traversal dari Container’s children atau mengembalikan null jika container bukanlah suatu focus cycle root.
·         getInsets()
menentukan sisipan dalam container tersebut yang mengindikasikan ukuran container
·         getLayout()
mendapatkan layout manager dari pengelola layout tersebut
·         getListeners(Class listenerType)
mengembalikan suatu array dari semua objek yang sedang diregistrasi sebagai FooListeners berdasarkan container ini.
·         getMaximumSize()
mengembalikan ukuran maximum container ini.
·         getMinimumSize()
mengembalikan ukuran minimum size container ini
·         getPreferredSize()
mengembalikan preferred size container ini
·         invalidate()
Invalidates the container
·         isAncestorOf(Component c)
Memeriksa jika Checks komponen terkandung dalam hierarki komponen container ini
·         isFocusCycleRoot()
mengembalikan apakah container ini adalah root suatu focus traversal cycle
·         isFocusCycleRoot(Container container)
mengembalikan apakah suatu container merupakan focus cycle root dari focus traversal cycle yang dimiliki oleh container ini
·         isFocusTraversalPolicySet()
mengembalikan apakah focus traversal policy telah secara eksplisit diset untuk container ini
·         list(PrintStream out, int indent)
mencetak suatu listing dari container ini ke suatu output stream yang telah ditentukan
·         list(PrintWriter out, int indent)
mencetak suatu list, dimulai dari suatu indent, ke suatu print writer
·         paint(Graphics g)
mengecat/mewarnai container
·         paintComponents(Graphics g)
mengecat/mewarnai masing-masing komponen container ini
·         paramString()
mengembalikan string yang merepresentasikan kondisi container ini
·         print(Graphics g)
mencetak container
·         printComponents(Graphics g)
mencetak(print) komponen-komponen dalam kontainer ini
·         processContainerEvent(ContainerEvent e)
memproses container event yang sedang terjadi pada container dengan mengirimkan mereka pada sembarang ContainerListener yang telah diregistrasi
·         processEvent(AWTEvent e)
memproses event-event pada container ini
·         remove(Component comp)
menghapuskan suatu komponen, pada suatu indeks container ini
·         removeAll()
menghapuskan semua komponen dari container ini
·         removeContainerListener(ContainerListener I)
menghapuskan suatu container listener sehingga tidak lagi menerima container event dari container ini
·         removeNotify()
membuat container ini menjadi tidak dapat ditampilkan (undisplayable) dengan memindahkan koneksinya ke nativa screen resource
·         setFocusCycleRoot(boolean focusCycleRoot)
mengeset apakah container ini merupakan root dari suatu “focus traversal cycle”
·         setFocusTraversalKeys(int id, Set keystrokes)
mengeset “focus traversal keys” untuk suatu operasi traversal dari container ini
·         setFocusTraversalPolicy(FocusTraversalPolicy policy)
mengeset focus traversal policy yang akan mengatur keyboard traversal dari “Container’s children”, jika container ini merupakan suatu “focus cycle root”
·         setFont(Font f)
mengeset font container ini
·         setLayout(LayoutManager mgr)
·         transferFocusBackward()
mengeset layout manager untuk container ini
·         transferFocusDownCycle()
·         update(Graphics g)
mengupdate container
·         validate()
mengvalidasi container dan semua sub componennya
·         validateTree()
murunkan sub component container secara berulang dan menghitung ulang layout setiap percabangan sesuai dengan yang dibutuhkan



Kesimpulan

Dari pembahasan mengenai Layout Manager ini maka dapat disimpulkan bahwa dengan menggunakan Layout Manager ini dapat mengatasi berpindah-pindahnya komponenen yang di gunakan. Sehingga akan lebih terorganisir di dalam container. Dengan bermacam-macam sub bagian dari Layout Manager, seperti di antaranya ada, FlowLayout, GridLayout dll, membuat kita dapat mengubah secara manual class layout  yang ingin digunakan, dan setiap container dapat memiliki layout manager masing-masing. Sehingga pembuatan GUI untuk program java menjadi lebih rapi dan terorganisir sesuai yang di butuhkan.

No comments:

Post a Comment