Bab.
13 Dasar - Dasar GUI
13.1 Introduksi
Perancangan API untuk pemrograman
GUI dalam JAVA adalah salah satu contoh terbaik tentang bagaimana pripsip
pemrograman berorientasi objek diterapkan. Bab ini mengandung dua tujuan.
Pertama, untuk mengenalkan dasar-dasar pemrograman GUI dalam JAVA. Kedua, untuk
mengenalkan kerangka kerja GUI API dalam JAVA dan mendiskusikan
komponen-komponen GUI dan relasinya, kontainer, layout manager, warna, jenis huruf, ikon citra, dan tool tips.
13.2 Swing versus AWT
Beberapa contoh GUI sederhana
telah disajikan untuk mendemonstrasikan OOP. Komponen-komponen GUI, seperti JBUtton, JLabel, JTextField, JRadioButton, dan JComboBox. Mengapa kelas-kelas komponen GUI memiliki prefiks J? Daripada menggunakan JButton, mengapa tidak menggunakan Button saja? Alasannya adalah karena
suatu kelas bernama Button telah ada
dalam paket java.awt.
Ketika JAVA dikenalkan,
kelas-kelas GUI digabungkan dalam suatu pustaka yang dikenal dengan Abstract Windows Toolkit (AWT). AWT
sudah cukup bila digunakan untuk mengembangkan GUI sederhana, tetapi bukan
untuk mengembangkan GUI yang komprehensif. Di samping itu AWT, memiliki cukup
masalah bila dijalankan pada platform yang berbeda-beda. Komponen-komponen antarmuka-pengguna
AWT diganti oleh pustaka yang lebih handal, fleksibel, dan lengkap yang dikenal
dengan komponen-komponen Swing.
Untuk membedakan antara
kelas-kelas komponen Swing yang baru dengan kelas-kelas komponen AWT,
kelas-kelas komponen Swing diberi prefiks J. Meskipun komponen-komponen AWT
masih didukung JAVA, namun lebih baik untuk belajar bagaimana memprogram
menggunakan komponen-komponen Swing. Buku ini menggunakan komponen-komponen
Swing secara eksklusif.
13.3 GUI API dalam JAVA
GUI API memuat kelas-kelas yang
dapat diklasifikasikan dalam tiga kelompok: kelas komponen, kelas kontainer,
dan kelas helper. Relasi secara hirarki ditunjukkan pada Gambar 13.1.
Gambar
13.1
Pemrograman GUI JAVA mengutilisasi kelas-kelas dalam diagram hirarki ini
Kelas komponen, seperti JButton, JLabel, dan JTextField,
diciptakan untuk antarmuka-pengguna. Kelas kontainer, seperti JFrame, JPanel, dan JApplet
digunakan untuk memuat komponen-komponen lain. Kelas helper, seperti Graphics, Color, Font, FontMetrics, dan Dimension, digunakan untuk mendukung komponen-komponen GUI.
13.3.1 Kelas Komponen
Suatu instans dari Component dapat ditampilkan pada layar.
Kelas Component merupakan akar kelas
dari semua kelas-kelas antarmuka-pengguna termasuk kelas-kelas kontainer, dan JComponent adalah akar kelas dari semua
komponen-komponen Swing. Kedua Component
maupun JComponent adalah kelas
abstrak, yang akan didiskusikan pada Bab. 14. Untuk sekarang, apa yang perlu
Anda ketahui adalah bahwa kelas abstrak sama seperti kelas biasa kecuali bahwa
Anda tidak bisa menciptakan instansnya menggunakan operator new. Sebagai contoh, Anda tidak bisa
menggunakan new JComponent() untuk
menciptakan instans dari JComponent.
Akan tetapi, Anda bisa menggunakan konstruktor-konstruktor dari sub-subkelas
konkrit JComponent untuk menciptakan instans dari JComponent. Adalah hal yang penting
untuk menjadi familiar dengan hirarki pewarisan kelas. Sebagai contoh,
statemen-statemen berikut ini semuanya menampilkan true:
JButton
jbtOK = new JButton("OK");
System.out.println(jbtOK
instanceof JButton);
System.out.println(jbtOK
instanceof JComponent);
System.out.println(jbtOK
instanceof Container);
System.out.println(jbtOK
instanceof Component);
System.out.println(jbtOK
instanceof Object);
13.3.2 Kelas Kontainer
Suatu instans Container dapat memuat instans-instans Component. Kelas kontainer adalah komponen-komponen GUI yang
digunakan untuk memuat komponen-komponen GUI yang lain. Window, Panel, Applet, Frame, dan Dialog
merupakan kelas-kelas kontainer untuk komponen-komponen AWT. Untuk dapat bekerja dengan komponen-komponen Swing,
digunakan Container, JFrame, JDialog, JApplet, dan JPanel, seperti terdeskripsi pada Tabel
13.1.
Tabel
13.1
Kelas-kelas kontainer GUI
Kelas Kontainer
|
Deskripsi
|
java.awt.Container
javax.swing.JFrame
javax.swing.JPanel
javax.swing.JApplet
javax.swing.JDialog
|
Digunakan
untuk mengelompokkan komponen-komponen. Frame, panel, dan applet merupakan
sub-subkelasnya.
Adalah
suatu jendela yang tidak dimuat di dalam jendela lain. Digunakan untuk memuat
komponen-komponen antarmuka-pengguna Swing yang lain dalam aplikasi-aplikasi
GUI JAVA.
Adalah
kontainer yang tidak kelihatan yang memuat komponen-komponen
antarmuka-pengguna. Panel bisa dibuat bersarang. Anda bisa menempatkan
panel-panel di dalam suatu kontainer yang memuat suatu panel. JPanel juga sering
digunakan sebagai suatu kanvas untuk menggambar grafik.
Adalah
suatu subkelas dari Applet. Anda
harus mewarisi JApplet untuk
menciptakan suatu applet JAVA berbasis Swing.
Adalah
suatu jendela pop-up atau kotak pesan yang umum digunakan sebagai jendela
sementara untuk menerima informasi tambahan dari pengguna atau untuk
menyediakan notifikasi bahwa suatu event telah terjadi.
|
13.3.3 Kelas Helper
Kelas-kelas helper, seperti Graphics, Color, Font, FontMetrics, Dimension, dan LayoutManager,
bukanlah sub-subkelas dari Component.
Kelas helper ini digunakan untuk mendeskripsikan properti komponen-komponen
GUI, seperti grafik, warna, huruf, dan dimensi, seperti terdeskripsi pada Tabel
13.2.
Tabel
13.2
Kelas Helper GUI
Kelas Helper
|
Deskripsi
|
java.awt.Graphics
java.awt.Color
java.awt.Font
java.awt.FontMetrics
java.awt.Dimension
java.awt.LayoutManager
|
Merupakan
suatu kelas abstrak yang menyediakan metode-metode untuk menggambarkan
string, garis, dan bangun-bangun sederhana.
Berkaitan
dengan warna komponen-komponen GUI. Sebagai contoh, Anda bisa menentukan
warna latar belakang maupun warna latar depan dalam komponen seperti JFrame dan JPanel, atau Anda bisa menentukan warna garis, bangun, dan string
dalam gambar.
Untuk
menentukan font teks dan gambar dalam komponen-komponen GUI. Sebagai contoh,
Anda bisa menentukan jenis font (misalnya, SanSerif), gaya (misalnya, bold),
dan ukuran (misalnya, 25) untuk teks pada suatu tombol.
Adalah
suatu kelas abstrak yang digunakan untuk mendapatkan properti font.
Mengenkapsulasi
lebar dan tinggi suatu komponen (dalam presisi integer) dalam suatu objek
tunggal.
Menentukan
bagaimana komponen-komponen ditata dalam suatu kontainer.
|
13.4 Frame
Untuk menciptakan suatu
antarmuka-pengguna, Anda perlu menciptakan salah satu, frame atau applet, untuk
memuat komponen-komponen antarmuka-pengguna.
13.4.1 Menciptakan Frame
Untuk menciptakan suatu frame,
digunakan kelas JFrame, seperti
ditampilkan pada Gambar 13.2. Program pada kode13.1 menciptakan suatu frame:
Kode13.1 FrameKu.java
1
2
3
4
5
6
7
8
9
10
11
|
import javax.swing.JFrame;
public class FrameKu {
public
static void main(String[] args) {
JFrame
frame = new JFrame("FrameKu"); // Menciptakan suatu
frame
frame.setSize(400,
300); // Menetapkan ukutan frame
frame.setLocationRelativeTo(null);
// Pusat suatu frame
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
// Menampilkan frame
}
}
|
Gambar
13.2
JFrame merupakan kontainer
level-atas untuk memuat komponen-komponen GUI
Frame tidak akan ditampilkan
sampai metode frame.setVisible(true)
dipanggil. Metode frame.setSize(400, 300)
menentukan bahwa frame berukuran 400 piksel lebar dan 300 piksel tinggi. Jika
metode setSize tidak digunakan, maka
frame akan disesuaikan sehingga hanya menampilkan judul saja. Karena metode setSize dan setVisible keduanya didefinisikan dalam kelas Component, maka keduanya diwariskan oleh kelas JFrame.
Ketika Anda menjalankan program FrameKu, suatu jendela akan tertampil
pada layar (Gambar 13.3a).
Gambar
13.3 (a) Program menciptakan dan menampilkan suatu frame dengan judul FrameKu. (b) Suatu tombol OK
ditambahkan pada frame.
Pemanggilan metode setLocationRelativeTo(null) (baris 7)
menetapkan frame di pusat layar. Pemanggilan metode setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) (baris 8)
memberitahukan program untuk berhenti pada saat frame ditutup. Jika statemen
ini tidak digunakan, maka program tidak berhenti meski frame telah ditutup.
Pada kasus itu, Anda harus menghentikan program dengan menekan Ctrl+C pada prompt DOS dalam Windows.
13.4.2 Menambahkan Komponen Pada
Frame
Frame yang ditampilkan pada Gambar
13.2a adalah kosong. Dengan menggunakan metode add, Anda bisa menambahkan komponen-komponen ke dalam frame,
seperti terlampir pada kode13.2.
Kode13.2 FrameKuDenganKomponen.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
import javax.swing.*;
public class FrameKuDenganKomponen {
public
static void main(String[] args) {
JFrame
frame = new JFrame("FrameKuDenganKomponen");
//
Menambahkan suatu tombol dalam frame
JButton jbtOK = new
JButton("OK");
frame.add(jbtOK);
frame.setSize(400,
300); // Menetapkan ukutan frame
frame.setLocationRelativeTo(null);
// Pusat suatu frame
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
// Menampilkan frame
}
}
|
Setiap JFrame memuat suatu content
pane. Suatu content pane merupakan instans dari java.awt.Container. Komponen-komponen GUI, seperti tombol,
ditempatkan pada content pane di
dalam frame. Pada versi JAVA terdahulu, Anda harus menggunakan metode getContentPane dalam kelas JFrame untuk menjadikan content pane suatu frame sebagai nilai
balik, kemudian memanggil metode add
untuk menambahkan suatu komponen di dalam content
pane, sebagai berikut:
java.awt.Container
kontainer = frame.getContentPane();
kontainer.add(jbtOK);
Hal ini cukup melelahkan. Versi
sejak JAVA 5 mengijinkan Anda untuk menempatkan komponen-komponen ke dalam
content pane dengan memanggil metode add,
sebagai berikut:
frame.add(jbtOK);
Suatu objek JButton diciptakan menggunakan new
JButton(“OK”) , dan objek ini ditambahkan ke dalam content pane dalam frame (baris 9).
Metode add(Component comp) yang didefinisikan di dalam kelas Container menambahkan suatu instans Component ke dalam kontainer. Karena JButton merupakan subkelas dari Component, maka instans JButton juga merupakan instans Component. Untuk menghilangkan suatu
komponen dari kontainer, digunakan metode remove.
Statemen berikut ini menghapus tombol dari kontainer:
kontainer.remove(jbtOK);
Ketika Anda menjalankan program FrameKuDenganKomponen, jendela
ditampilkan seperti pada Gambar 13.2b. Tombol selalu berada di pusat frame dan
menempati keseluruhan frame meskipun Anda telah mengatur-ulang ukurannya. Hal
ini karena komponen-komponen ditempatkan di dalam frame oleh layout manager, dan layout manager default untuk content
pane menempatkan tombol di pusat frame. Pada bagian selanjutnya, Anda akan
melihat beberapa layout manager yang
berbeda dalam menempatkan komponen-komponen pada lokasi yang diinginkan.
13.5 Layout Manager
Dalam banyak sistem jendela yang
lain, komponen-komponen antarmuka-pengguna ditata menggunakan pengukuran piksel
terkode. Sebagai contoh, menempatkan suatu tombol pada piksel (10, 10) dalam
jendela. Bila menggunakan pengukuran piksel terkode, maka antarmuka-pengguna
akan dapat bekerja dengan baik pada satu sistem, namun menjadi tidak berguna
pada sistem yang lain. Layout manager
dalam JAVA menyediakan suatu level abstraksi yang secara otomatis memetakan
antarmuka-pengguna Anda pada semua sistem jendela.
Komponen-komponen GUI JAVA
ditempatkan dalam kontainer, dimana komponen-komponen tersebut ditata oleh layout manager. Pada program terdahulu,
Anda tidak menentukan dimana menempatkan tombol OK pada frame, tetapi JAVA
mengetahui dimana untuk menempatkannya, karena layout manager bekerja di balik layar untuk menempatkan
komponen-komponen GUI pada lokasi-lokasi yang tepat. Suatu layout manager diciptakan menggunakan kelas layout manager.
Layout manager ditetapkan di dalam
kontainer menggunakan metode setLayout(aLayoutMaganer).
Sebagai contoh, Anda dapat menggunakan statemen-statemen berikut ini untuk
menciptakan suatu instans XLayout
dan menetapkannya di dalam kontainer:
LayoutManager
layoutManager = new XLayout();
kontainer.setLayout(layoutManager);
Bagian ini akan mengenalkan tiga
dasar layout manager: FlowLayout, GridLayout, dan BorderLayout.
13.5.1 FlowLayout
FlowLayout adalah layout manager yang paling sederhana.
Komponen-komponen ditata di dalam kontainer dari kiri ke kanan secara
berurutan. Ketika suatu baris terisi, maka baris lain dimulai. Anda bisa
menentukan cara komponen disejajarkan menggunakan salah satu dari tiga
konstanta: FlowLayout.RIGHT, FlowLayout.CENTER, dan FlowLayout.LEFT. Anda juga bisa
menentukan jarak antar komponen dalam piksel. Diagram kelas untuk FlowLayout ditampilkan pada Gambar
13.4.
Gambar
13.4
FlowLayout mengatur tata letak
komponen baris demi baris
Kode13.3 menyajikan suatu program
yang mendemonstrasikan flow layout.
Program menambahkan tiga label dan bidang teks ke dalam frame dengan suatu FlowLayout manager, seperti ditampilkan
pada Gambar 13.5.
Kode13.3 TampilLayout.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JFrame;
import java.awt.FlowLayout;
public class TampilFlowLayout extends JFrame {
public
TampilFlowLayout() {
//
Menetapkan FlowLayout, disejajarkan ke kiri rentang horisontal 10
//
dan rentang vertikal 20 antar komponen
setLayout(new FlowLayout(FlowLayout.LEFT, 10,
20));
//
Menambahkan label dan bidang teks ke dalam frame
add(new
JLabel("Nama Pertama"));
add(new
JTextField(8));
add(new
JLabel("Inisal Nama Tengah"));
add(new
JTextField(1));
add(new
JLabel("Nama Akhir"));
add(new
JTextField(8));
}
/**
Metode main */
public
static void main(String[] args) {
TampilFlowLayout
frame = new TampilFlowLayout();
frame.setTitle("TampilFlowLayout");
frame.setSize(200,
200);
frame.setLocationRelativeTo(null);
// Pusat frame
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
|
Gambar 13.5
Komponen-komponen ditambahkan oleh FlowLayout
manager untuk mengisi kontainer baris demi baris
Contoh ini menciptakan suatu
program menggunakan suatu gaya yang berbeda dari program-program pada bagian
terdahulu, dimana frame diciptakan menggunakan kelas JFrame. Contoh ini menciptakan suatu kelas bernama TampilFlowLayout yang mewarisi kelas JFrame (baris 6). Metode main dalam program ini menciptakan
suatu instans TampilFlowLayout
(baris 23). Konstruktor TampilFlowLayout
menciptakan dan menempatkan komponen-komponen di dalam frame. Berikut adalah
tiga alasan mengapa ini merupakan gaya yang lebih disenangi dalam menciptakan
aplikasi-aplikasi GUI:
·
Menciptakan suatu aplikasi GUI
berarti menciptakan suatu frame, jadi sangat masuk akal bila mendefinisikan
suatu frame yang mewarisi JFrame.
·
Frame selanjutnya dikembangkan
untuk menambahkan komponen-komponen dan fungsi-fungsi baru.
·
Kelas dapat dengan mudah
didaur-ulang atau digunakan kembali. Sebagai contoh, Anda dapat menciptakan
beberapa frame dengan menciptakan beberapa instans dari kelas.
Penggunaan
satu gaya secara konsisten memudahkan pembacaan program. Mulai sekarang ini,
kebanyaka kelas utama GUI akan mewarisi kelas JFrame. Metode main
menciptakan suatu instans kelas utama dan kemudian menampilkan frame.
Pada contoh ini, FlowLayout manager digunakan untuk
menempatkan komponen-komponen di dalam suatu frame. Jika Anda mengubah ukuran
frame, komponen-komponen akan secara otomatis ditata sedemikian rupa sehingga
sesuai dengan ukuran frame yang baru. Pada Gambar 13.5a, baris pertama memiliki
empat komponen, sedangkan pada Gambar 13.5b, enam komponen ditempatkan di dalam
satu baris.
Jika Anda menggantikan statemen setLayout (baris 10) dengan setLayout(new FlowLayout(FlowLayout.RIGHT,
0, 0)), maka semua baris tombol akan disejajarkan ke kanan tanpa ada jarak
antar komponen.
Suatu objek FlowLayout tak-bernama diciptakan pada baris 10:
setLayout(new FlowLayout(FlowLayout.LEFT, 10,
20));
yang ekivalen dengan
FlowLayout
layout = new FlowLayout(FlowLayout.LEFT, 10, 20);
setLayout(layout);
Kode ini menciptakan suatu
referensi eksplisit kepada objek layout
dari kelas FlowLayout. Referensi
eksplisit tersebut tidak perlu, karena objek tidak direferensi secara langsung
dalam kelas TampilFlowLayout.
13.5.2 GridLayout
GridLayout manager menata komponen-komponen di dalam suatu
formasi grid (matriks). Komponen-komponen ditempatkan di dalam grid dari kiri
ke kanan, dimulai dari baris pertama, kemudian baris kedua, dan seterusnya,
secara berurutan. Diagram kelas GridLayout
ditampilkan pada Gambar 13.6.
Anda bisa menentukan jumlah baris dan kolom di dalam grid. Aturan dasarnya adalah sebagai berikut:
·
Jumlah baris atau jumlah kolom
bisa nol, tetapi tidak keduanya nol. Jika salah satu bernilai nol, dan lainnya
bernilai tak-nol, maka dimensi tak-nol menjadi tetap, sementara dimensi nol
ditentukan secara dinamis oleh layout
manager. Sebagai contoh, jika Anda
menentukan jumlah baris nol dan jumlah kolom tiga dalam suatu grid yang
memiliki sepuluh komponen, maka GridLayout
menciptakan tiga kolom dengan masing-masing empat baris, dengan baris terakhir
memuat satu komponen. Jika Anda menentukan tiga baris dan nol kolom dalam suatu
grid yang memiliki sepuluh komponen, maka GridLayout
menciptakan tiga baris dengan masing-masing empat kolom, dengan baris terakhir
memuat dua komponen.
·
Jika jumlah baris dan jumlah
kolom keduanya tak-nol, maka jumlah baris akan mendominasi parameter; yaitu,
jumlah baris menjadi tetap (tidak berubah), dan layout manager secara
dinamis menghitung jumlah kolom. Sebagai
contoh, jika Anda menentukan tiga baris dan tiga kolom dalam suatu grid
yang memiliki sepuluh komponen, maka GridLayout
akan menciptakan tiga baris dengan empat kolom, dengan baris terakhir memuat
dua komponen.
Kode13.4 menyajikan suatu program
yang mendemonstrasikan grid layout.
Program ini sama dengan kode13.3, yang menambahkan tiga label dan tiga bidang
teks ke dalam frame GridLayout,
menggantikan FlowLayout, seperti
ditunjukkan pada Gambar 13.7.
Kode13.4 TampilGridLayout.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JFrame;
import java.awt.GridLayout;
public class TampilGridLayout extends JFrame {
public
TampilGridLayout() {
//
Menetapkan GridLayout, 3 baris, 2 kolom dengan rentang horisontal 5
//
dan rentang vertikal 5 antar komponen
setLayout(new GridLayout(3,2,5,5));
//
Menambahkan label dan bidang teks ke dalam frame
add(new
JLabel("Nama Pertama"));
add(new
JTextField(8));
add(new
JLabel("Inisal Nama Tengah"));
add(new
JTextField(1));
add(new
JLabel("Nama Akhir"));
add(new
JTextField(8));
}
/**
Metode main */
public
static void main(String[] args) {
TampilGridLayout
frame = new TampilGridLayout();
frame.setTitle("TampilGridLayout");
frame.setSize(200,
150);
frame.setLocationRelativeTo(null);
// Pusat frame
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
|
Gambar
13.7
GridLayout manager membagi kontainer
menjadi grid-grid; kemudian komponen-komponen ditambahkan untuk mengisi sel-sel
baris demi baris
Jika Anda mengubah ukuran frame,
maka tata-letak tombol tetap tidak berubah (yaitu, jumlah baris dan jumlah
kolom tidak berubah, dan rentang antar komponen juga tidak berubah).
Mengganti statemen setLayout (baris 10) dengan setLayout(new GridLayout(3, 10)) akan
tetap menghasilkan tiga baris dan dua kolom. Parameter kolom diabaikan karena
parameter baris tak-nol. Jumlah kolom aktual dihitung oleh layout manager.
Apa yang terjadi bila statemen setLayout (baris 10) diganti dengan setLayout(new GridLayout(4, 2)) atau
dengan setLayout(new GridLayout(2, 2))?
Anda bisa mencobanya sendiri.
13.5.3 BorderLayout
BorderLayout manager membagi suatu kontainer menjadi empat area:
Timur, Selatan, Barat, Utara, dan Tengah. Komponen-komponen ditambahkan kepada BorderLayout menggunakan add(Component, indeks), dimana indeks
merupakan BorderLayout.EAST, BorderLayout.SOUTH, BorderLayout.WEST, BorderLayout.NORTH, atau BorderLayout.CENTER.
Diagram kelas BorderLayout ditampilkan
pada Gambar 13.8.
Komponen-komponen ditata sesuai
dengan ukuran dan penempatan yang diinginkan. Komponen Utara dan Selatan dapat
diregangkan secara horisontal; komponen-komponen Barat dan Timur dapat
diregangkan secara vertikal. Komponen tengah dapat diregangkan baik secara
horisontal maupun secara vertikal.
Kode 13.5 menyajikan suatu program
yang mendemonstrasikan border layout.
Program menambahkan lima tombol dengan label Timur, Selatan, Barat, Utara, dan Tengah ke
dalam suatu frame dengan suatu BorderLayout
manager, seperti tertampil pada
Gambar 13.9.
Gambar
13.9
BorderLayout manager membagi suatu
kontainer menjadi empat area, yang masing-masing memuat satu komponen
Kode13.5 TampilBorderLayout.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
import javax.swing.JButton;
import javax.swing.JFrame;
import java.awt.BorderLayout;
public class TampilBorderLayout extends JFrame {
public
TampilBorderLayout() {
//
Menetapkan BorderLayout dengan rentang horisontal 5 dan rentang
vertikal 10
setLayout(new
BorderLayout(5, 10));
//
Menambahkan tommbol-tombol ke dalam frame
add(new
JButton("Timur"), BorderLayout.EAST);
add(new
JButton("Selatan"), BorderLayout.SOUTH);
add(new
JButton("Barat"), BorderLayout.WEST);
add(new
JButton("Utara"), BorderLayout.NORTH);
add(new
JButton("Tengah"), BorderLayout.CENTER);
}
/**
Metode utama */
public
static void main(String[] args) {
TampilBorderLayout
frame = new TampilBorderLayout();
frame.setTitle("TampilBorderLayout");
frame.setSize(300,
200);
frame.setLocationRelativeTo(null);
// Pusat frame
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
|
Tombol-tombol ditambahkan ke dalam
frame pada baris 11-15. Perhatikan bahwa metode add untuk BorderLayout
berbeda dari yang dipakai untuk GridLayout
dan FlowLayout. Dengan BorderLayout, Anda bisa menentukan
dimana untuk menempatkan komponen-komponen.
13.6 Menggunakan Panel Sebagai
Subkontainer
Dimisalkan bahwa Anda ingin
menempatkan sepuluh tombol dan suatu bidang teks di dalam suatu frame.
Tombol-tombol tersebut ditempatkan dengan formasi grid, dan bidang teks
ditempatkan pada suatu baris yang terpisah. Hal ini sangat susah untuk
menempatkan semua komponen di dalam suatu kontainer. Dengan pemrograman GUI
JAVA, Anda bisa membagi suatu jendela menjadi panel-panel. Panel berperan
sebagai subkontainer untuk mengelompokkan komponen-komponen antarmuka-pengguna.
Anda bisa menambahkan tombol-tombol dalam suatu panel, dan menambahkan panel
tersebut ke dalam frame.
Panel versi Swing adalah JPanel. Anda bisa menggunakan new JPanel() untuk menciptakan suatu
panel dengan suatu FlowLayout manager default atau new JPanel(LayoutManager) untuk
menciptakan suatu panel dengan layout
manager tertentu. Metode add(Component)
digunakan untuk menambahkan suatu komponen kepada panel. Sebagai contoh, kode
berikut ini menciptakan suatu panel dan menambahkan suatu tombol kepadanya:
JPanel
p = new JPanel();
p.add(new
JButton("OK"));
Panel dapat ditempatkan di dalam
suatu frame atau di dalam suatu panel lain. Statemen berikut ini menempatkan
panel p ke dalam frame f:
f.add(p);
Kode13.6 memberikan suatu contoh
yang mendemonstrasikan menggunakan panel sebagai subkontainer. Program menciptakan
suatu antarmuka-pengguna untuk suatu oven microwave, seperti ditampilkan pada
Gambar 13.10.
Kode13.6 UjiPanel.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
import java.awt.*;
import javax.swing.*;
public class UjiPanel extends JFrame {
public
UjiPanel() {
//
Menciptakan panel p1 untuk tombol dan menetapkan GridLayout
JPanel p1 = new JPanel();
p1.setLayout(new
GridLayout(4, 3));
//
Menambahkan tombol kepada panel
for
(int i = 1; i <= 9; i++) {
p1.add(new
JButton("" + i));
}
p1.add(new
JButton("" + 0));
p1.add(new
JButton("Mulai"));
p1.add(new
JButton("Berhenti"));
//
Menciptakan panel p2 untuk memuat suatu bidang teks dan p1
JPanel p2 = new JPanel(new
BorderLayout());
p2.add(new
JTextField("Waktu ditampilkan di sini"),
BorderLayout.NORTH);
p2.add(p1,
BorderLayout.CENTER);
//
Menambahkan konten ke dalam frame
add(p2,
BorderLayout.EAST);
add(new
JButton("Makanan ditempatkan di sini"),
BorderLayout.CENTER);
}
/**
Metode utama */
public
static void main(String[] args) {
UjiPanel
frame = new UjiPanel();
frame.setTitle("Tampak
Depan Oven Microwave");
frame.setSize(400,
250);
frame.setLocationRelativeTo(null);
// Pusat frame
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
|
Metode setLayout di definisikan di
dalam java.awt.Container. Karena JPanel adalah suatu subkelas dari Container, maka Anda bisa menggunakan setLayout untuk menetapkan suatu layout
manager yang baru di dalam panel (baris 8). Baris 7-8 dapat digantikan oleh JPanel p1 = new JPanel (new GridLayout (4,
3)).
Untuk menghasilkan tata letak yang
diinginkan, program menggunakan panel p1
dari GridLayout untuk mengelompokkan
tombol-tombol angka, tombol Berhenti,
dan tombol Mulai, dan panel p2 dari BorderLayout untuk menampung suatu bidang teks di utara dan dan p1 di tengah. Tombol yang
merepresentasikan makanan ditempatkan di tengah frame, dan p2 ditempatkan di sisi timur frame.
Statemen pada baris 21-22:
p2.add(new
JTextField("Waktu
ditampilkan di sini "),
BorderLayout.NORTH);
menciptakan suatu instans JTextField dan menambahkannya pada p2. JTextField adalah suatu komponen GUI yang dapat digunakan untuk
masukan pengguna dan untuk menampilkan nilai-nilai.
13.7 Kelas Color
Anda bisa menetapkan warna
komponen GUI menggunakan kelas java.awt.Color. Warna-warna tersebut
dikonstruksi dari komponen merah, hijau, dan biru. Masing-masing warna
merepresentasikan suatu nilai int
yang mendeskripsikan intensitas, dari 0 (bayangan tergelap) sampai 255
(bayangan terterang). Hal ini dikenal dengan model RGB.
Anda dapat menciptakan suatu warna
menggunakan konstruktor berikut ini:
public Color(int
r, int g, int b);
dimana r, g, dan b menentukan suatu warna dari komponen
merah, hijau, dan biru. Sebagai contoh,
Color warna
= new Color(128, 100, 100);
Anda bisa menggunakan metode setBackground(Color c) dan metode setForeground(Color c) yang
didefinisikan di dalam kelas java.awt.Component
untuk menentukan warna latar belakang dan latar depan suatu komponen. Berikut
merupakan suatu contoh dalam menetapkan warna latar belakang dan latar depan
suatu tombol:
JButton
jbtOK = new JButton("OK");
jbtOK.setBackground(warna);
jbtOK.setForeground(new
Color(100, 1, 1));
Dengan cara lain, Anda bisa
menggunakan salah satu dari 13 warna standar (BLACK, BLUE, CYAN, DARK_GRAY, GRAY, GREEN, LIGHT_GRAY, MAGENTA, ORANGE, PINK, RED, WHITE, dan YELLOW) yang didefinisikan sebagai konstanta-konstanta dalam java.awt.Color. Kode berikut ini,
misalnya, menetapkan warna latar depan dari suatu tombol menjadi merah:
jbtOK.setForeground(Color.RED);
13.8 Kelas Font
Anda bisa menciptakan suatu font
(jenis huruf) menggunakan kelas java.awt.Font
dan menetapkan jenis huruf untuk komponen-komponen menggunakan metode setFont di dalam kelas Component:
Konstruktor kelas Font adalah
public Font(String
nama, int gaya, int ukuran);
Anda dapat memilih suatu nama font
dari SanSerif, Serif, Monospaced, Dialog, atau DialogInput, memilih gaya dari Font.PLAIN(0),
Font.BOLD(1), Font.ITALIC(2), dan Font.BOLD+Font.ITALIC(3),
dan menentukan ukuran font dengan sembarang integer positif. Sebagai contoh,
statemen-statemen berikut ini menciptakan dua font dan menetapkan satu font
pada suatu tombol:
Font
font1 = new Font("SansSerif", Font.BOLD, 16);
Font
font2 = new Font("Serif", Font.BOLD + Font.ITALIC, 12);
JButton
jbtOK = new JButton("OK");
jbtOK.setFont(font1);
13.9 Fitur-Fitur Komponen GUI
Swing
Pada bab ini, Anda telah
menggunakan beberapa komponen GUI (JFrame,
Container, JPanel, JButton, JLabel, dan JTextField). Adalah hal penting untuk memahami fitu-fitur umum
komponen GUI Swing. Kelas Component
merupakan akar dari semua kontainer dan komponen GUI. Semua komponen GUI
(kecuali JFrame, JApplet, dan JDialog) adalah subkelas dari JComponent,
seperti yang ditampilkan pada Gambar 13.1. Gambar 13.11 mencantumkan beberapa
metode yang sering dipakai dalam Component,
Container, dan JComponent untuk memanipulasi properti-properti jenis huruf, warna,
ukuran, teks tool tip dan border.
Suatu tool tip merupakan teks yang tertampil pada suatu komponen ketika
Anda menggerakkan mouse pada komponen tersebut. Seringkali digunakan untuk
menjelaskan fungsi suatu komponen.
Anda bisa menetapkan border atau
tepi sembarang objek kelas JComponent.
Swing memiliki beberapa tipe tepi. Untuk menciptakan suatu tepi berjudul,
digunakan new TitleBorder(String judul).
Untuk menciptakan tepi bergaris, digunakan new
LineBorder(Color warna, int lebar), dimana lebar menentukan ketebalan
garis.
Kode13.7 adalah suatu contoh yang
mendemonstrasikan fitur-fitur umum Swing. Contoh tersebut menciptakan suatu
panel p1 untuk memuat tiga tombol
(baris 8) dan suatu panel p2 untuk
memuat dua label (baris 25), seperti ditampilkan pada Gambar 13.12. Latar
belakang tombol jbtLeft ditetapkan
menjadi putih (baris 12) dan Latar depan tombol jbtCenter ditetapkan menjadi hijau (baris 13). Tool tip tombol jbtRight ditetapkan pada baris 14.
Tetpi berjudul ditetapkan pada panel p1
dan p2 (baris 18, 36) dan tepi garis
ditetapkan pada label (baris 32, 33).
Gambar
13.11
Semua komponen GUI Swing mewarisi metode-metode dari Component, Container,
dan JComponent
Kode13.7 TestFiturUmumSwing.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
public class TestFiturUmumSwing extends JFrame {
public
TestFiturUmumSwing() {
//
Menciptakan suatu panel untuk mengelompokkan tiga tombol
JPanel
p1 = new JPanel(new FlowLayout(FlowLayout.LEFT, 2, 2));
JButton
jbtLeft = new JButton("Kiri");
JButton
jbtCenter = new JButton("Tengah");
JButton
jbtRight = new JButton("Kanan");
jbtLeft.setBackground(Color.WHITE);
jbtCenter.setForeground(Color.GREEN);
jbtRight.setToolTipText("Ini
adalah Tombol Kanan");
p1.add(jbtLeft);
p1.add(jbtCenter);
p1.add(jbtRight);
p1.setBorder(new
TitledBorder("Tiga Tombol"));
// Menciptakan suatu font dan suatu tepi
bergaris
Font
largeFont = new Font("TimesRoman", Font.BOLD, 20);
Border
lineBorder = new LineBorder(Color.BLACK, 2);
//
Menciptakan suatu panel untuk mengelompokkan dua label
JPanel
p2 = new JPanel(new GridLayout(1, 2, 5, 5));
JLabel
jlblRed = new JLabel("Merah");
JLabel
jlblOrange = new JLabel("Oranye");
jlblRed.setForeground(Color.RED);
jlblOrange.setForeground(Color.ORANGE);
jlblRed.setFont(largeFont);
jlblOrange.setFont(largeFont);
jlblRed.setBorder(lineBorder);
jlblOrange.setBorder(lineBorder);
p2.add(jlblRed);
p2.add(jlblOrange);
p2.setBorder(new
TitledBorder("Dua Label"));
//
Menambahkan dua panel ke dalam frame
setLayout(new
GridLayout(2, 1, 5, 5));
add(p1);
add(p2);
}
public
static void main(String[] args) {
//
Menciptakan suatu frame dan menetapkan propertinya
JFrame
frame = new TestFiturUmumSwing();
frame.setTitle("TestFiturUmumSwing");
frame.setSize(300,
150);
frame.setLocationRelativeTo(null);
// Pusat frame
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
|
13.10 Ikon Citra
Suatu ikon adalah citra berukuran
tetap; umumnya berukuran kecil dan digunakan untuk mendekorasi komponen. Citra
umumnya disimpan dalam file. JAVA saat ini mendukung tiga format citra: GIF (Graphics Interchange Format), JPEG (Joint Photographic Experts Group), dan
PNG (Portable Network Graphics). Nama
file ketiga format citra tersebut diakhiri dengan .gif, .jpg, dan .png.
Untuk menampilkan suatu ikon
citra, pertama diciptakan suatu objek ImageIcon
menggunakan new javax.swing.ImageIcon(namafile).
Sebagai contoh, statemen berikut ini menciptakan ikon dari suatu file citra Opera.gif dalam direktori Gambar:
ImageIcon
ikon = new ImageIcon("Gambar/Opera.gif");
“Gambar/Opera.gif” ditempatkan pada “E:\Gambar\Opera.gif”. Dalam JAVA, tanda / menandakan
direktori relatif (misalnya, “Gambar/Opera.gif”
pada contoh ini).
Ikon citra ditampilkan di dalam
suatu label atau suatu tombol menggunakan new
JLabel(ikonCitra). Kode12.8 mendemonstrasikan penampilan ikon citra di
dalam label dan tombol. Contoh tersebut menciptakan dua label dan dua tombol
dengan ikon, seperti ditampilkan pada Gambar 13.13.
Kode12.1 HasilBagi.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
import javax.swing.*;
import java.awt.*;
public class UjiIkonCitra extends JFrame {
private ImageIcon ikonOpera = new
ImageIcon("Gambar/opera.gif");
private ImageIcon ikonFirefox = new
ImageIcon("Gambar/firefox.gif");
private ImageIcon ikonLogo = new
ImageIcon("Gambar/Logo.gif");
private ImageIcon ikonAlert = new
ImageIcon("Gambar/alert.gif");
public UjiIkonCitra() {
setLayout(new
GridLayout(1, 4, 5, 5));
add(new JLabel(ikonOpera));
add(new
JLabel(ikonFirefox));
add(new JButton(ikonLogo));
add(new
JButton(ikonAlert));
}
/**
Metode utama */
public
static void main(String[] args) {
UjiIkonCitra
frame = new UjiIkonCitra();
frame.setTitle("UjiIkonCitra");
frame.setSize(200,
200);
frame.setLocationRelativeTo(null);
// Pusat frame
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
|
siap min
ReplyDeletesolder uap