33
Sendy Ferdian Sujadi 1

Sendy Ferdian Sujadi - si.itmaranatha.orgsi.itmaranatha.org/v2/attachments/article/341/03_Layout_Manager_dan_JTable.pdf · kanan dan dari atas ke bawah. GridLayout akan memaksa setiap

  • Upload
    vannhan

  • View
    215

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Sendy Ferdian Sujadi - si.itmaranatha.orgsi.itmaranatha.org/v2/attachments/article/341/03_Layout_Manager_dan_JTable.pdf · kanan dan dari atas ke bawah. GridLayout akan memaksa setiap

Sendy Ferdian Sujadi

1

Page 2: Sendy Ferdian Sujadi - si.itmaranatha.orgsi.itmaranatha.org/v2/attachments/article/341/03_Layout_Manager_dan_JTable.pdf · kanan dan dari atas ke bawah. GridLayout akan memaksa setiap

Layout Manager JTable

2

Page 3: Sendy Ferdian Sujadi - si.itmaranatha.orgsi.itmaranatha.org/v2/attachments/article/341/03_Layout_Manager_dan_JTable.pdf · kanan dan dari atas ke bawah. GridLayout akan memaksa setiap

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.

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 dikombinasikan sesuai situasi dan kebutuhan kita.

3

Seperti pada gambar, layout manager bertugas menyusun komponen-komponen (button, label, checkbox, dll) di dalam suatu container (panel, frame, dll).

Page 4: Sendy Ferdian Sujadi - si.itmaranatha.orgsi.itmaranatha.org/v2/attachments/article/341/03_Layout_Manager_dan_JTable.pdf · kanan dan dari atas ke bawah. GridLayout akan memaksa setiap

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 LayoutManager 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: frame.setLayout(new BorderLayout());

4

Page 5: Sendy Ferdian Sujadi - si.itmaranatha.orgsi.itmaranatha.org/v2/attachments/article/341/03_Layout_Manager_dan_JTable.pdf · kanan dan dari atas ke bawah. GridLayout akan memaksa setiap

BorderLayout (default layout manager for a window, dialog, and frame)

FlowLayout (default layout manager for a panel and applet)

GridLayout (menyediakan fleksibilitas dalam menempatkan komponen)

BoxLayout CardLayout GridBagLayout

5

Page 6: Sendy Ferdian Sujadi - si.itmaranatha.orgsi.itmaranatha.org/v2/attachments/article/341/03_Layout_Manager_dan_JTable.pdf · kanan dan dari atas ke bawah. GridLayout akan memaksa setiap

BorderLayout menyusun komponen berdasarkan lokasi geografis: NORTH, SOUTH, EAST, WEST, and CENTER.

Secara optional, kita dapat juga memberikan padding di antara komponen.

BorderLayout merupakan layout default untuk JWindow, JDialog, dan JFrame.

Karena setiap komponen diasosiasikan dengan suatu arah geografis, akibatnya layout ini hanya dapat menangani maksimal 5 komponen.

6

Page 7: Sendy Ferdian Sujadi - si.itmaranatha.orgsi.itmaranatha.org/v2/attachments/article/341/03_Layout_Manager_dan_JTable.pdf · kanan dan dari atas ke bawah. GridLayout akan memaksa setiap

Pada saat menambahkan suatu komponen kepada container yang memiliki border layout, kita harus

menentukan secara bersamaan komponen-nya dan posisi-nya. Contoh:

frame.setLayout(new BorderLayout());

frame.add(new JButton("Button1"), BorderLayout.NORTH );

frame.add(new JButton("Button2"), BorderLayout.SOUTH );

7

Page 8: Sendy Ferdian Sujadi - si.itmaranatha.orgsi.itmaranatha.org/v2/attachments/article/341/03_Layout_Manager_dan_JTable.pdf · kanan dan dari atas ke bawah. GridLayout akan memaksa setiap

8

Page 9: Sendy Ferdian Sujadi - si.itmaranatha.orgsi.itmaranatha.org/v2/attachments/article/341/03_Layout_Manager_dan_JTable.pdf · kanan dan dari atas ke bawah. GridLayout akan memaksa setiap

9

Page 10: Sendy Ferdian Sujadi - si.itmaranatha.orgsi.itmaranatha.org/v2/attachments/article/341/03_Layout_Manager_dan_JTable.pdf · kanan dan dari atas ke bawah. GridLayout akan memaksa setiap

FlowLayout merupakan layout manager yang simpel. FlowLayout 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, flow layout menggunakan justification CENTER. Artinya, semua komponen akan disimpan di posisi tengah-tengah.

FlowLayout merupakan default untuk JPanel. Pada dasarnya, untuk aplikasi sesungguhnya, kita tidak disarankan

menggunakan FlowLayout karena sifatnya yang tidak bisa memposisikan komponen dengan pasti.

10

Page 11: Sendy Ferdian Sujadi - si.itmaranatha.orgsi.itmaranatha.org/v2/attachments/article/341/03_Layout_Manager_dan_JTable.pdf · kanan dan dari atas ke bawah. GridLayout akan memaksa setiap

11

Page 12: Sendy Ferdian Sujadi - si.itmaranatha.orgsi.itmaranatha.org/v2/attachments/article/341/03_Layout_Manager_dan_JTable.pdf · kanan dan dari atas ke bawah. GridLayout akan memaksa setiap

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.

GridLayout akan memaksa setiap komponen untuk menempati space container yang kosong serta membagi rata ukuran space tersebut.

12

Page 13: Sendy Ferdian Sujadi - si.itmaranatha.orgsi.itmaranatha.org/v2/attachments/article/341/03_Layout_Manager_dan_JTable.pdf · kanan dan dari atas ke bawah. GridLayout akan memaksa setiap

GridLayout paling cocok digunakan untuk menyusun komponen yang berukuran sama, misalnya 2 buah JPanel berukuran sama di dalam sebuah JFrame. Contoh: frame.add(panel1);

frame.add(panel2);

frame.setLayout(new GridLayout(2, 1));

Kita dapat men-set jumlah baris dan kolom dengan angka 0. Artinya, 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

unlimited number untuk kolomnya. Apa yang terjadi kalau kita memiliki 10 komponen?

13

Page 14: Sendy Ferdian Sujadi - si.itmaranatha.orgsi.itmaranatha.org/v2/attachments/article/341/03_Layout_Manager_dan_JTable.pdf · kanan dan dari atas ke bawah. GridLayout akan memaksa setiap

14

Page 15: Sendy Ferdian Sujadi - si.itmaranatha.orgsi.itmaranatha.org/v2/attachments/article/341/03_Layout_Manager_dan_JTable.pdf · kanan dan dari atas ke bawah. GridLayout akan memaksa setiap

Layout manager yang telah kita bahas sebelumnya merupakan bagian dari package java.awt.

Javax.swing memiliki beberapa tambahan layout manager lagi, salah satunya adalah: BoxLayout.

Layout manager ini sangat berguna untuk membuat toolbars sederhana atau vertical button bars.

Cara kerjanya sangat sederhana yaitu menempatkan komponen dalam satu baris atau satu kolom.

Untuk mempermudah penggunaan BoxLayout, Swing menyediakan sebuah kelas yang bernama Box yaitu sebuah container yang secara otomatis memiliki BoxLayout manager.

Box memiliki beberapa methods yang akan mempermudah kita dalam menggunakan BoxLayout manager, yaitu:

createHorizontalBox() untuk membuat box horizontal

createHorizontalGlue() untuk merekatkan komponen

createHorizontalStrut(int n) untuk memberi jarak antar komponen

createVerticalBox() untuk membuat box vertical

createVerticalGlue() untuk merekatkan komponen

createVerticalStrut(int n) untuk memberi jarak antar komponen

15

Page 16: Sendy Ferdian Sujadi - si.itmaranatha.orgsi.itmaranatha.org/v2/attachments/article/341/03_Layout_Manager_dan_JTable.pdf · kanan dan dari atas ke bawah. GridLayout akan memaksa setiap

16

Page 17: Sendy Ferdian Sujadi - si.itmaranatha.orgsi.itmaranatha.org/v2/attachments/article/341/03_Layout_Manager_dan_JTable.pdf · kanan dan dari atas ke bawah. GridLayout akan memaksa setiap

CardLayout merupakan layout manager yang mampu menciptakan efek “tumpukan” komponen.

Artinya, layout ini tidak memposisikan komponen di lokasi-lokasi tertentu di dalam kontainer, melainkan menampilkannya satu demi satu.

Penggunaan CardLayout biasanya untuk membuat panel yang bersifat custom-tabbed.

Namun, sebenarnya kita dapat membuat panel tersebut dengan menggunakan komponen JTabbedPane.

Untuk mempraktekkan cara kerja dan efek “tumpukan”dari CardLayout ini, kita perlu mempelajari terlebih dahulu mengenai “event-driven programming”.

17

Page 18: Sendy Ferdian Sujadi - si.itmaranatha.orgsi.itmaranatha.org/v2/attachments/article/341/03_Layout_Manager_dan_JTable.pdf · kanan dan dari atas ke bawah. GridLayout akan memaksa setiap

18

Page 19: Sendy Ferdian Sujadi - si.itmaranatha.orgsi.itmaranatha.org/v2/attachments/article/341/03_Layout_Manager_dan_JTable.pdf · kanan dan dari atas ke bawah. GridLayout akan memaksa setiap

GridBagLayout merupakan layaout manager yang sangat fleksibel. Layout ini memampukan kita untuk memposisikan komponen relatif terhadap

komponen lainnya berdasarkan constraint tertentu. Dengan menggunakan GridBagLayout, kita dapat menciptakan layout apapun juga,

tanpa batas. Komponen disusun pada koordinat tertentu pada sebuah grid yang disebut “logical

coordinate”. Logical coordinate berarti bahwa koordinat suatu komponen ditentukan oleh

sekumpulan komponen lainnya. Baris dan kolom dari grid tersebut bersifat “stretch” yang bergantung pada size dan

constraint yang dimilikinya. Walaupun fleksibel, pembuatan GridBag ini terkadang sangat membingungkan

karena kita harus mengatur berbagai size dan constraint dari setiap komponen yang digunakan.

Sebenarnya, penggunaan GridBagLayout ini jauh lebih mudah apabila kita menggunakan tools yang mendukung WYSIWYG GUI builder. (contohnya: NetBeans IDE)

19

Page 20: Sendy Ferdian Sujadi - si.itmaranatha.orgsi.itmaranatha.org/v2/attachments/article/341/03_Layout_Manager_dan_JTable.pdf · kanan dan dari atas ke bawah. GridLayout akan memaksa setiap

20

Page 21: Sendy Ferdian Sujadi - si.itmaranatha.orgsi.itmaranatha.org/v2/attachments/article/341/03_Layout_Manager_dan_JTable.pdf · kanan dan dari atas ke bawah. GridLayout akan memaksa setiap

21

Page 22: Sendy Ferdian Sujadi - si.itmaranatha.orgsi.itmaranatha.org/v2/attachments/article/341/03_Layout_Manager_dan_JTable.pdf · kanan dan dari atas ke bawah. GridLayout akan memaksa setiap

Tables present information in orderly rows and columns.

This is useful for presenting financial figures or representing data from a relational database.

The JTable class represents a visual table component.

A JTable is based on a TableModel, one of a dozen or so supporting interfaces and classes in the javax.swing.table package.

22

Page 23: Sendy Ferdian Sujadi - si.itmaranatha.orgsi.itmaranatha.org/v2/attachments/article/341/03_Layout_Manager_dan_JTable.pdf · kanan dan dari atas ke bawah. GridLayout akan memaksa setiap

JTable has one constructor that creates a default table model for you from arrays of data.

You just need to supply it with the names of your column headers and a 2D array of Objects representing the table's data.

23

Page 24: Sendy Ferdian Sujadi - si.itmaranatha.orgsi.itmaranatha.org/v2/attachments/article/341/03_Layout_Manager_dan_JTable.pdf · kanan dan dari atas ke bawah. GridLayout akan memaksa setiap

24

Page 25: Sendy Ferdian Sujadi - si.itmaranatha.orgsi.itmaranatha.org/v2/attachments/article/341/03_Layout_Manager_dan_JTable.pdf · kanan dan dari atas ke bawah. GridLayout akan memaksa setiap

To achieve more flexibility with JTable, we'll write our own data model by implementing the TableModel interface.

Swing makes this easy by supplying a class that does most of the work, AbstractTableModel.

To create a table model, we'll just subclass AbstractTableModel and override whatever behavior we want to change.

At a minimum, all AbstractTableModel subclasses have to define the following three methods:

public int getRowCount( )

public int getColumnCount( ) Returns the number of rows and columns in this data model

public Object getValueAt(int row, int column) Returns the value for the given cell When the JTable needs data values, it calls the getValueAt( ) method in the table

model. To get an idea of the total size of the table, JTable calls the getrowCount( ) and

getColumnCount( ) methods in the table model. 25

Page 26: Sendy Ferdian Sujadi - si.itmaranatha.orgsi.itmaranatha.org/v2/attachments/article/341/03_Layout_Manager_dan_JTable.pdf · kanan dan dari atas ke bawah. GridLayout akan memaksa setiap

26

Add column headings

to the table model

Returns the number

of rows and columns

in this data model

Returns the value for

the given cell

Page 27: Sendy Ferdian Sujadi - si.itmaranatha.orgsi.itmaranatha.org/v2/attachments/article/341/03_Layout_Manager_dan_JTable.pdf · kanan dan dari atas ke bawah. GridLayout akan memaksa setiap

27

Page 28: Sendy Ferdian Sujadi - si.itmaranatha.orgsi.itmaranatha.org/v2/attachments/article/341/03_Layout_Manager_dan_JTable.pdf · kanan dan dari atas ke bawah. GridLayout akan memaksa setiap

All this, and all we can do is render and edit data in a table. "What about selecting data?". Yes, we can do that, too.

And, as you might expect, the ListSelectionModel drives us through these selections.

Unlike most of the other components, however, the two-dimensional JTable has two selection models, one for rows and one for columns.

28

Page 29: Sendy Ferdian Sujadi - si.itmaranatha.orgsi.itmaranatha.org/v2/attachments/article/341/03_Layout_Manager_dan_JTable.pdf · kanan dan dari atas ke bawah. GridLayout akan memaksa setiap

The example shows an application that allows you to turn on and off the various selections allowed on a table (cell, row, and column).

29

As you select different rows and columns, two status labels show you the indices of the selected items.

Page 30: Sendy Ferdian Sujadi - si.itmaranatha.orgsi.itmaranatha.org/v2/attachments/article/341/03_Layout_Manager_dan_JTable.pdf · kanan dan dari atas ke bawah. GridLayout akan memaksa setiap

30

Page 31: Sendy Ferdian Sujadi - si.itmaranatha.orgsi.itmaranatha.org/v2/attachments/article/341/03_Layout_Manager_dan_JTable.pdf · kanan dan dari atas ke bawah. GridLayout akan memaksa setiap

31

Page 32: Sendy Ferdian Sujadi - si.itmaranatha.orgsi.itmaranatha.org/v2/attachments/article/341/03_Layout_Manager_dan_JTable.pdf · kanan dan dari atas ke bawah. GridLayout akan memaksa setiap

Let's look at the code for this example. Most of the work is creating the user interface you see running.

Once that's done, we attach our two reporting labels as listeners to the row selection and column selection models. The interesting part of the code is the ListSelectionListener, written as an inner class.

This class tracks any ListSelectionModel and updates a label with the currently selected indices every time it changes. (Those indices are retrieved using the getSelectedIndices( ) method we wrote ourselves.)

Since we rely on only the list selection model, we can use the same event handler for both the row and the column selections.

32

Page 33: Sendy Ferdian Sujadi - si.itmaranatha.orgsi.itmaranatha.org/v2/attachments/article/341/03_Layout_Manager_dan_JTable.pdf · kanan dan dari atas ke bawah. GridLayout akan memaksa setiap