Pengenalan AWT

Perpustakaan kelas bahasa pengaturcaraan Java menyediakan kit alat antara muka pengguna yang disebut Abstract Windowing Toolkit, atau AWT. AWT berkuasa dan fleksibel. Pendatang baru, bagaimanapun, sering mendapati bahawa kekuatannya terselubung. Huraian kelas dan kaedah yang terdapat dalam dokumentasi yang diedarkan memberikan sedikit panduan untuk pengaturcara baru. Selanjutnya, contoh yang ada sering meninggalkan banyak persoalan penting yang tidak dijawab. Sudah tentu, pendatang baru harus mengharapkan beberapa kesukaran. Antara muka pengguna grafik yang berkesan sememangnya mencabar untuk merancang dan melaksanakannya, dan interaksi yang kadang-kadang rumit antara kelas di AWT hanya menjadikan tugas ini lebih kompleks. Walau bagaimanapun, dengan panduan yang tepat, penciptaan antara muka pengguna grafik menggunakan AWT bukan hanya mungkin, tetapi relatif mudah.

Artikel ini merangkumi beberapa falsafah di sebalik AWT dan menangani keprihatinan praktikal bagaimana membuat antara muka pengguna yang mudah untuk applet atau aplikasi.

Apa itu antara muka pengguna

Antara muka pengguna adalah bahagian program yang berinteraksi dengan pengguna program. Antara muka pengguna mengambil pelbagai bentuk. Bentuk-bentuk ini merangkumi kerumitan dari antara muka baris perintah yang sederhana hingga antara muka pengguna grafik titik-dan-klik yang disediakan oleh banyak aplikasi moden.

Pada tahap terendah, sistem operasi mengirimkan maklumat dari tetikus dan papan kekunci ke program sebagai input, dan menyediakan piksel untuk output program. AWT dirancang supaya pengaturcara tidak perlu risau tentang perincian mengesan tetikus atau membaca papan kekunci, atau memperhatikan perincian penulisan ke layar. AWT menyediakan antara muka berorientasikan objek yang dirancang dengan baik untuk perkhidmatan dan sumber tahap rendah ini.

Kerana bahasa pengaturcaraan Java tidak bergantung pada platform, AWT juga harus bebas dari platform. AWT dirancang untuk menyediakan satu set alat yang biasa untuk reka bentuk antara muka pengguna grafik yang berfungsi pada pelbagai platform. Elemen antara muka pengguna yang disediakan oleh AWT diimplementasikan menggunakan toolkit GUI asli setiap platform, sehingga dapat menjaga tampilan dan nuansa setiap platform. Ini adalah salah satu titik terkuat AWT. Kelemahan pendekatan sedemikian adalah hakikat bahawa antara muka pengguna grafik yang dirancang pada satu platform mungkin kelihatan berbeza ketika dipaparkan di platform lain.

Komponen dan bekas

Antara muka pengguna grafik dibina daripada elemen grafik yang disebut komponen. Komponen khas merangkumi item seperti butang, bar tatal, dan medan teks. Komponen membolehkan pengguna berinteraksi dengan program dan memberi pengguna maklum balas visual mengenai keadaan program. Dalam AWT, semua komponen antara muka pengguna adalah contoh komponen kelas atau salah satu subtipenya.

Komponen tidak berdiri sendiri, tetapi terdapat di dalam bekas. Bekas mengandungi dan mengawal susun atur komponen. Bekas itu sendiri adalah komponen, dan dengan itu boleh diletakkan di dalam bekas lain. Dalam AWT, semua bekas adalah contoh Container kelas atau salah satu subtipenya.

Secara spasial, komponen mesti masuk sepenuhnya ke dalam bekas yang mengandunginya. Penyisipan komponen (termasuk bekas) ke dalam bekas membentuk pokok unsur, bermula dengan bekas di akar pokok dan mengembang ke daun, yang merupakan komponen seperti butang.

Ilustrasi dalam Gambar 1 menggambarkan antara muka pengguna grafik yang mudah seperti yang akan dilihat ketika dipaparkan di bawah Windows 95. Rajah 2 menunjukkan komponen antara muka dari Gambar 1 yang disusun sebagai pokok.

Jenis komponen

Rajah 3 menunjukkan hubungan pewarisan antara kelas komponen antara muka pengguna yang disediakan oleh AWT. Komponen Kelas menentukan antara muka yang mesti dipatuhi oleh semua komponen.

AWT menyediakan sembilan kelas asas komponen bukan kontena dari mana antara muka pengguna boleh dibina. (Sudah tentu, kelas komponen baru mungkin berasal dari mana-mana atau dari kelas Komponen itu sendiri.) Sembilan kelas ini adalah kelas Button, Canvas, Checkbox, Choice, Label, List, Scrollbar, TextArea, dan TextField. Gambar 4 menggambarkan contoh setiap kelas.

Anda memerlukan penyemak imbas berkemampuan Java untuk melihat applet ini.

Gambar 4.

Sembilan komponen antara muka pengguna

Sumber untuk paparan ini terdapat di sini.

Jenis bekas

AWT menyediakan empat kelas kontena. Mereka adalah kelas Window dan dua subtipenya - kelas Frame dan kelas Dialog - serta kelas Panel. Sebagai tambahan kepada bekas yang disediakan oleh AWT, kelas Applet adalah bekas - ia adalah subtipe kelas Panel dan oleh itu dapat menahan komponen. Penerangan ringkas setiap kelas kontena yang disediakan oleh AWT disediakan di bawah.

Tingkap Permukaan paparan tingkat atas (tingkap). Contoh kelas Window tidak dilampirkan ke dalam bekas lain. Contoh kelas Window tidak mempunyai sempadan dan tajuk.
Rangka Permukaan paparan tingkat atas (tingkap) dengan sempadan dan tajuk. Contoh kelas Frame mungkin mempunyai bar menu. Jika tidak, ini seperti contoh kelas Window.
Dialog Permukaan paparan tingkat atas (tetingkap) dengan sempadan dan tajuk. Contoh kelas Dialog tidak boleh wujud tanpa contoh kelas Frame yang berkaitan.
Panel

Bekas generik untuk memegang komponen. Contoh kelas Panel menyediakan wadah untuk menambahkan komponen.

Membuat bekas

Sebelum menambahkan komponen yang membentuk antara muka pengguna, pengaturcara mesti membuat wadah. Semasa membuat aplikasi, pengaturcara harus terlebih dahulu membuat contoh kelas Window atau class Frame. Semasa membina applet, bingkai (tetingkap penyemak imbas) sudah ada. Oleh kerana kelas Applet adalah subtipe kelas Panel, pengaturcara dapat menambahkan komponen ke contoh kelas Applet itu sendiri.

Kod dalam Penyenaraian 1 membuat bingkai kosong. Tajuk bingkai ("Contoh 1") ditetapkan dalam panggilan ke pembina. Kerangka pada mulanya tidak dapat dilihat dan mesti dilihat dengan menggunakan show()kaedahnya.

import java.awt. *;

kelas awam Contoh1 {public static void main (String [] args) {Frame f = new Frame ("Contoh 1");

f.show (); }}

Penyenaraian 1.

Bingkai kosong

Kod dalam Penyenaraian 2 meluaskan kod dari Penyenaraian 1 sehingga kelas baru mewarisi dari Panel kelas. Dalam main()metode tersebut, contoh kelas baru ini dibuat dan ditambahkan ke objek Frame melalui panggilan ke add()metode. Hasilnya kemudian dipaparkan. Hasil kedua-dua contoh itu harus kelihatan sama (iaitu mestilah kelihatan tidak menarik).

import java.awt. *;

kelas awam Contoh1a meluaskan Panel {public static void main (String [] args) {Frame f = new Frame ("Contoh 1a");

Contoh1a ex = baru Contoh1a ();

f.add ("Pusat", cth);

f.pack (); f.show (); }}

Penyenaraian 2.

Bingkai dengan panel kosong

Dengan memperoleh kelas baru dari kelas Applet dan bukannya Panel kelas, contoh ini kini dapat dijalankan sebagai aplikasi mandiri atau sebagai applet yang disematkan di laman Web. Kod untuk contoh ini disediakan dalam Penyenaraian 3. Applet yang dihasilkan ditunjukkan dalam Rajah 5 (dan masih tidak menarik).

import java.awt. *;

kelas awam Contoh1b memanjangkan java.applet.Applet {public static void main (String [] args) {Frame f = new Frame ("Contoh 1b");

Contoh1b ex = baru Contoh1b ();

f.add ("Pusat", cth);

f.pack (); f.show (); }}

Penyenaraian 3.

Bingkai dengan applet kosong

Anda memerlukan penyemak imbas berkemampuan Java untuk melihat applet ini.

Gambar 5.

Bingkai kosong

Catatan: objek Window, dan dalam kasus tertentu bahkan objek Dialog, dapat menggantikan objek Frame. Semuanya adalah bekas yang sah, dan komponen ditambahkan ke masing-masing dengan cara yang sama.

Menambah komponen ke dalam bekas

Untuk menjadi berguna, antara muka pengguna mesti terdiri daripada lebih daripada sekadar wadah - ia mesti mengandungi komponen. Komponen ditambahkan ke bekas melalui kaedah bekas add(). Terdapat tiga bentuk asas add()kaedah. Kaedah untuk digunakan bergantung pada pengurus susun atur kontena (lihat bahagian yang bertajuk Susun atur komponen ).

Kod dalam Penyenaraian 4 menambahkan penciptaan dua butang ke kod yang disajikan dalam Penyenaraian 3. Pembuatan dilakukan dalam init()kaedah kerana dipanggil secara automatik semasa inisialisasi applet. Oleh itu, tidak kira bagaimana program ini dimulakan, butang dibuat, kerana init()dipanggil oleh penyemak imbas atau dengan main()kaedahnya. Rajah 6 mengandungi applet yang dihasilkan.

import java.awt. *;

kelas awam Contoh3 meluaskan java.applet.Applet {public void init () {add (butang baru ("Satu")); tambah (Butang baru ("Dua")); }

umum Dimensi disukaiSize () {kembali Dimensi baru (200, 100); }

utama kekosongan statik awam (String [] args) {Frame f = bingkai baru ("Contoh 3");

Contoh3 ex = baru Contoh3 ();

ex.init ();

f.add ("Pusat", cth);

f.pack (); f.show (); }}

Penyenaraian 4.

Sebuah applet dengan dua butang

Anda memerlukan penyemak imbas berkemampuan Java untuk melihat applet ini.

Gambar 6.

Sebuah applet dengan dua butang

Susun atur komponen

Hingga saat ini, tidak ada yang dikatakan mengenai bagaimana komponen yang telah ditambahkan ke dalam wadah dibentangkan. Tata letak dikendalikan bukan oleh bekas, tetapi oleh pengurus susun atur yang berkaitan dengan bekas. Pengurus susun atur membuat semua keputusan penempatan komponen. Di AWT, semua kelas pengurus susun atur melaksanakan antara muka LayoutManager.

AWT menyediakan lima pengurus susun atur. Mereka berkisar dari sangat sederhana hingga sangat kompleks. Artikel ini merangkumi hanya dua kelas pengurus susun atur yang digunakan oleh contoh di sini: kelas FlowLayout dan kelas BorderLayout.

Kelas FlowLayout meletakkan komponen dalam bekas dari kiri ke kanan. Apabila ruang dalam satu baris habis, baris lain dimulakan. Versi argumen tunggal add()kaedah kontena digunakan untuk menambahkan komponen.

Kelas BorderLayout mempunyai lima zon seperti yang digambarkan dalam Rajah 7. Zon tersebut diberi nama "Utara", "Selatan", "Timur", "Barat", dan "Pusat". Satu komponen boleh diletakkan di setiap lima zon ini. Apabila bekas yang dilampirkan diubah saiznya, setiap zon sempadan diubah ukurannya cukup untuk menahan komponen yang diletakkan di dalamnya. Sebilangan ruang yang berlebihan diberikan ke zon tengah. Versi dua argumen add()kaedah kontena digunakan untuk menambahkan komponen. Argumen pertama adalah objek String yang menamakan zon tempat meletakkan komponen.

Setiap kelas kontena mempunyai pengurus susun atur lalai. Pengurus susun atur lalai untuk kelas Frame dan kelas Dialog adalah pengurus BorderLayout. Pengurus susun atur lalai untuk kelas Panel (dan kelas Applet) adalah pengurus FlowLayout.

Kod dalam Penyenaraian 5 menggunakan kedua-dua pengurus susun atur dan merangkumi beberapa komponen antara muka pengguna. Hasilnya ditunjukkan dalam Rajah 8.

import java.awt. *;

kelas awam Contoh4 memanjangkan java.applet.Applet {public void init () {Panel p;

setLayout (BorderLayout baru ());

p = Panel baru ();

p.add (TextArea baru ());

tambah ("Pusat", p);

p = Panel baru ();

p.add (Butang baru ("Satu")); p.add (Butang baru ("Dua"));

Pilihan c = Pilihan baru ();

c.addItem ("satu"); c.addItem ("dua"); c.addItem ("tiga");

hlm (c);

tambah ("Selatan", h); }

utama kekosongan statik awam (String [] args) {Frame f = bingkai baru ("Contoh 4");

Contoh4 ex = baru Contoh4 ();

ex.init ();

f.add ("Pusat", cth);

f.pack (); f.show (); }}

Penyenaraian 5.

Contoh yang lebih rumit

Anda memerlukan penyemak imbas berkemampuan Java untuk melihat applet ini.

Gambar 8.

Contoh yang lebih rumit

Pengendalian acara

Contoh di atas tidak lebih daripada memaparkan antara muka pengguna lengai. Sudah tentu, sangat penting bahawa antara muka pengguna bertindak kerana input pengguna. Namun, di luar ruang lingkup artikel ini untuk menyelidiki secara mendalam misteri pengendalian peristiwa. Itu mesti menunggu sehingga artikel akan datang. Walau bagaimanapun, demi kepentingan kelengkapan, kod contoh dalam Penyenaraian 6 menunjukkan cara menangani satu jenis acara yang mungkin diterima oleh program. Kelas baru mengatasi action()kaedah yang disediakan oleh kelas Komponen. The action()kaedah respon kepada peristiwa-peristiwa tindakan yang dijana, sebagai contoh, dengan pemilihan item daripada senarai pop-up. Theaction()kaedah memerlukan dua parameter disediakan, kejadian Kejadian dan contoh Objek. Contoh Acara mengandungi maklumat mengenai acara, termasuk sasaran acara (komponen yang pertama kali menerima acara), koordinat x dan y peristiwa, dan waktu ketika peristiwa itu terjadi. Contoh Objek menyimpan sekeping data khusus peristiwa. Untuk objek Butang ia mengandungi teks di label butang.

import java.awt. *;

kelas awam Contoh5 memanjangkan java.applet.Applet {TextArea ta = null;

init kekosongan awam () {Panel p;

setLayout (BorderLayout baru ());

p = Panel baru ();

ta = TextArea baru ();

p.add (ta);

tambah ("Pusat", p);

p = Panel baru ();

p.add (Butang baru ("Satu")); p.add (Butang baru ("Dua"));

Pilihan c = Pilihan baru ();

c.addItem ("satu"); c.addItem ("dua"); c.addItem ("tiga");

hlm (c);

tambah ("Selatan", h); }

tindakan boolean awam (Peristiwa e, Objek o) {String str = (String) o;

ta.appendText (str + "\ n");

kembali palsu; }

utama kekosongan statik awam (String [] args) {Frame f = bingkai baru ("Contoh 5");

Contoh5 ex = baru Contoh5 ();

ex.init ();

f.add ("Pusat", cth);

f.pack (); f.show (); }}

Penyenaraian 6.

Contoh dengan pengendalian acara