PROGRAM JAVA BEANS
Pengantar Java Beans
Sebelum kita bisa melihat bagaimana
JBuilder 2.0 mendukung pengembangan JavaBeans, itu adalah pilihan untuk melihat
beberapa teori latar belakang JavaBeans. Ini bagian pertama akan fokus
pada definisi JavaBeans. Kita akan melihat apa yang diperlukan untuk
mendefinisikan kelas Java sebagai JavaBean.
Dan karena JavaBeans adalah model
komponen untuk Java, kita akan melihat komponen teknologi secara umum, dan
keuntungan dari komponen.
Komponen teknologi
Misalkan kita ingin membangun mobil kami sendiri. Sebuah mobil terdiri dari banyak komponen. Misalnya chassis , blok motor, o2 sensor dan interior.Dan masing-masing komponen terdiri dari banyak komponen yang lebih. Interior terdiri dari kursi, roda kemudi, meteran kecepatan, AC, bagian luar roda, lampu ekor dan kita bisa terus dan terus. Ketika kita membangun mobil kami memiliki pilihan berikut untuk masing-masing komponen yang kita gunakan: membangun komponen dari awal kita sendiri atau membeli komponen dari produsen. Pilihan untuk membangun atau membeli akan diputuskan pada beberapa parameter. Beberapa contoh parameter adalah: ketersediaan, uang, waktu, pilihan pribadi. Kita bisa membayangkan bahwa membangun komponen pada kita sendiri akan memakan waktu lebih, daripada membeli komponen. Tetapi pada saat yang sama, jika kita memiliki banyak waktu, karena pensiun kami, ini tidak akan menjadi masalah, dan kita bisa menghemat uang dengan membangun untuk diri kita sendiri. Jika komponen adalah sesuatu yang tidak pernah membangun sebelum, kita tidak punya pilihan: kita harus membangun pada kita sendiri. Kami menyimpulkan bahwa ada alasan baik untuk membeli dan komponen bangunan.
Misalkan kita ingin membangun mobil kami sendiri. Sebuah mobil terdiri dari banyak komponen. Misalnya chassis , blok motor, o2 sensor dan interior.Dan masing-masing komponen terdiri dari banyak komponen yang lebih. Interior terdiri dari kursi, roda kemudi, meteran kecepatan, AC, bagian luar roda, lampu ekor dan kita bisa terus dan terus. Ketika kita membangun mobil kami memiliki pilihan berikut untuk masing-masing komponen yang kita gunakan: membangun komponen dari awal kita sendiri atau membeli komponen dari produsen. Pilihan untuk membangun atau membeli akan diputuskan pada beberapa parameter. Beberapa contoh parameter adalah: ketersediaan, uang, waktu, pilihan pribadi. Kita bisa membayangkan bahwa membangun komponen pada kita sendiri akan memakan waktu lebih, daripada membeli komponen. Tetapi pada saat yang sama, jika kita memiliki banyak waktu, karena pensiun kami, ini tidak akan menjadi masalah, dan kita bisa menghemat uang dengan membangun untuk diri kita sendiri. Jika komponen adalah sesuatu yang tidak pernah membangun sebelum, kita tidak punya pilihan: kita harus membangun pada kita sendiri. Kami menyimpulkan bahwa ada alasan baik untuk membeli dan komponen bangunan.
Sekarang ganti mobil dengan program
perangkat lunak. Program perangkat lunak ini juga dapat dibagi menjadi
beberapa komponen. Misalnya pengolah kata, dapat dibagi ke dalam komponen
teks, ejaan dan tata bahasa komponen, komponen format, dan banyak
lagi. Dan jika kita ingin membangun pengolah kata kita sendiri, kita dapat
bertanya pada diri sendiri pertanyaan yang sama untuk masing-masing komponen
seperti yang kita lakukan ketika kita ingin membangun mobil: membeli atau
membangun. Kita bisa membeli komponen ejaan, sehingga pengolah kata kita
akan dapat memeriksa ejaan dari dokumen. Tapi kita juga dapat membangun
komponen ejaan dan menggunakannya dalam pengolah kata kami. Dan kita bisa
menjual komponen ejaan kami untuk pembangun aplikasi lain.
Sebagai pengembang aplikasi kita
tidak perlu tahu segalanya, dan kita bisa fokus pada masalah kita dapat
mengontrol, dan menggunakan komponen pada masalah sudah diselesaikan oleh
pengembang lain. Hal ini dapat menghemat banyak waktu, dan uang.
Contoh-contoh ini menunjukkan bahwa
komponen yang mudah digunakan kembali. Tapi sebelum komponen mudah untuk
digunakan kembali, standar perlu didefinisikan, yang komponen perlu
menerapkan. Seorang penjual komponen bisa menjual komponen lebih banyak
jika itu berlaku untuk standar perangkat lunak yang banyak pengguna komponen
digunakan untuk aplikasi mereka. ActiveX, OCX sebelumnya, adalah standar
komponen pada platform Windows Microsoft. Microsoft telah didefinisikan
aturan tertentu bahwa setiap orang harus mengikuti. Dan karena standar
ini, ada banyak komponen ActiveX yang tersedia untuk membeli dan menggunakan
dalam proses pembangunan aplikasi.
Borland Delphi pengembang sangat
akrab dengan konsep komponen perangkat lunak, karena Visual Component Library
(VCL) adalah contoh yang bagus dari sebuah perpustakaan komponen.
Gambar 1 Komponen VCL di Borland Delphi
Platform Java tidak memiliki jenis model perangkat
lunak komponen. Kita bisa menggunakan kembali kelas kami sebelumnya
ditulis dalam proses pembangunan kita sendiri aplikasi. Tapi interchanging
komponen kami dengan pengembang kami, itu tidak mudah, karena standar yang
hilang. Dan ini adalah di mana API JavaBeans masuk
API JavaBeans menentukan model komponen perangkat
lunak untuk Java. Dengan cara ini pengembang dapat membuat komponen Java,
menjual komponen Java, dan menyusun komponen Java bersama-sama ke dalam
aplikasi. Jadi pada akhirnya kita dapat melakukan apa yang pengembang
Delphi sudah bisa: membuat dan menggunakan komponen software.
Apa Bean?
Sekarang kita tahu bahwa API JavaBeans menentukan standar komponen, yang pengembang Bean perlu mematuhi. Tapi apa adalah Bean Java?Spesifikasi JavaBeans berisi definisi berikut dari Java Bean:
Sekarang kita tahu bahwa API JavaBeans menentukan standar komponen, yang pengembang Bean perlu mematuhi. Tapi apa adalah Bean Java?Spesifikasi JavaBeans berisi definisi berikut dari Java Bean:
“Sebuah Java Bean adalah komponen perangkat lunak
yang dapat digunakan kembali dimanipulasi secara visual dalam alat pembangun.”
Kita telah melihat di bagian sebelumnya apa komponen
perangkat lunak dapat digunakan kembali, tapi bagaimana dengan manipulasi
visual dalam alat pembangun. Apa yang dimaksud dengan alat pembangun?
Builder alat atau pembangun aplikasi menyediakan
lingkungan untuk menggunakan kacang dan memanipulasi mereka. Borland
JBuilder adalah contoh yang baik dari sebuah alat pembangun, Borland Delphi
merupakan alat pembangun. Sebuah alat pembangun dapat terhubung kacang
yang berbeda bersama-sama dengan cara visual. Jadi tanpa menulis kode
apapun, kita harus mampu memanipulasi kacang. Kebanyakan alat pembangun
mengandung palet komponen dari mana pengembang dapat drag-and-drop komponen ke
formulir. Suatu bentuk dapat menjadi panel Java, jendela atau kanvas.
Fungsi kacang mendukung akan berbeda untuk setiap
kacang, tetapi ada beberapa fitur yang membedakan Bean Jawa kacang:
Dukungan untuk introspeksi , sebuah
alat pembangun dapat menganalisis bagaimana kacang bekerja.
Dukungan untuk properti , digunakan
untuk kustomisasi dari keadaan kacang.
Dukungan untuk acara , cara kacang
untuk memberitahu sesuatu di luar sedang terjadi, atau bereaksi terhadap
sesuatu yang terjadi di luar kacang.
Dukungan untuk kustomisasi , pengguna
kacang dapat menyesuaikan tampilan dan perilaku kacang dalam alat pembangun.
Dukungan untuk ketekunan , kacang
dapat disesuaikan dalam alat pembangun dan bernegara yang disimpan pergi dan
mengisi kemudian.
Kita sekarang tahu fitur dari Java Bean, tapi
bagaimana kita membuat kelas Java untuk kacang? Apakah mungkin ada super
class Java Bean kita perlu mewarisi dari? Jawabannya adalah
tidak! Sebuah kacang tidak diperlukan untuk mewarisi dari kelas tertentu
atau untuk mengimplementasikan interface tertentu. Jadi untuk membangun
kacang yang harus kita lakukan adalah untuk menulis sebuah kelas Java, dan
mematuhi aturan-aturan tertentu. Berikut adalah aturan utama:
The kelas kacang harus menyediakan konstruktor
nol-argumen.
Kacang harus mendukung ketekunan, dengan menerapkan
Serializable atau antar muka Externializable.
Jadi hampir setiap kelas Java Bean adalah
Java? Pada dasarnya, ya. Tapi ada yang lebih. Kerangka Java Beans
memperkenalkan banyak konvensi dan pola desain. Konvensi dan pola desain
semua opsional, kita tidak harus menggunakannya. Tetapi dengan menggunakan
konvensi, kita akan menciptakan kacang benar-benar berguna, yang dapat
digunakan dalam alat pembangun. Sebuah alat pembangun, seperti JBuilder,
tergantung pada konvensi ini dan pola desain untuk introspeksi kacang. Ini
JBuilder cara adalah mampu untuk mencari properti dan event misalnya. Tapi
sebelum kita melihat dekat dengan mekanisme introspeksi, pertama-tama kita
melihat perilaku kacang selama waktu desain dan run-time.
Desain waktu vs Run-time
Setiap Bean Jawa untuk dapat dijalankan dalam dua lingkungan yang berbeda. Pertama-tama kacang harus mampu berjalan di dalam alat pembangun.Hal ini sering disebut sebagai desain lingkungan. Kacang harus mampu menyediakan alat pembangun dengan informasi desain. Pengguna harus dapat menyesuaikan kacang visual dalam alat pembangun. Untuk proses kustomisasi banyak bagasi ekstra yang dibawa berkeliling oleh kacang. Metadata, properti editor, customizers, ikon semua perlu disertakan dengan Java Bean.
kacang juga harus dapat digunakan selama run-time dalam aplikasi yang dihasilkan. Selama run-time ada kebutuhan apalagi untuk kustomisasi dari perilaku dan penampilan dari Jawa Bean. Dan karena itu kacang run-time membawa bagasi jauh lebih sedikit di sekitar.
Setiap Bean Jawa untuk dapat dijalankan dalam dua lingkungan yang berbeda. Pertama-tama kacang harus mampu berjalan di dalam alat pembangun.Hal ini sering disebut sebagai desain lingkungan. Kacang harus mampu menyediakan alat pembangun dengan informasi desain. Pengguna harus dapat menyesuaikan kacang visual dalam alat pembangun. Untuk proses kustomisasi banyak bagasi ekstra yang dibawa berkeliling oleh kacang. Metadata, properti editor, customizers, ikon semua perlu disertakan dengan Java Bean.
kacang juga harus dapat digunakan selama run-time dalam aplikasi yang dihasilkan. Selama run-time ada kebutuhan apalagi untuk kustomisasi dari perilaku dan penampilan dari Jawa Bean. Dan karena itu kacang run-time membawa bagasi jauh lebih sedikit di sekitar.
Non-visual kacang
Sebagian besar waktu Bean Jawa akan memiliki representasi GUI itu sendiri. Misalnya tombol atau kacang kalender, harus memiliki representasi GUI akan berguna. Tapi ada juga kacang yang tidak membutuhkan representasi GUI. Misalnya kacang ejaan, yang hanya akan memeriksa kata untuk kesalahan ejaan, tidak membutuhkan representasi GUI. Kita akan menyebut jenis kacang non-visual kacang.
Namun tembus pandang tersebut hanya berlaku untuk
representasi run-time dari kacang. Stills kacang perlu disesuaikan dari
dalam alat pembangun.Jadi kacang dapat menunjukkan dirinya dalam alat
pembangun. Kita dapat mengubah properti, lihat di acara-acara, dan
melakukan lebih banyak, secara visual dalam alat pembangun, namun pada saat
run-time, kacang tidak akan terlihat oleh pengguna akhir.
Kacang terlihat adalah terlihat dalam kedua alat
pembangun seperti pada aplikasi run-time.
Introspeksi
Kami melihat sebelumnya bahwa JBuilder, sebagai alat pembangun, mampu melihat ke dalam kacang. JBuilder "knowns", melalui proses yang disebut introspeksi, yang sifat, peristiwa, dan metode kacang mengandung. JBuilder menggunakan API Refleksi, untuk tujuan ini. Kita sebagai pembangun kacang dapat menggunakan pola Java Beans desain atau konvensi penamaan untuk membantu JBuilder menentukan karakteristik kacang kami. Kita juga bisa mendapatkan sekitar konvensi ini dengan menyediakan kacang kami dengan kelas BeanInfo. Kelas berisi informasi tentang kacang, kami ingin alat pembangun untuk dapat melihat. Dalam kelas ini kita sendiri dapat memutuskan apa sifat, peristiwa dan metode untuk menunjukkan kepada dunia luar. Kemudian kita akan melihat lebih dekat di kelas ini BeanInfo. Untuk saat ini kita akan fokus pada menggunakan konvensi penamaan. Tabel berikut menunjukkan konvensi penamaan untuk properti, peristiwa, dan metode. Ini akan dijelaskan dalam bagian berikut.
Sederhana properti
|
public void set PropertyName ( PropertyType value);
public PropertyType mendapatkan PropertyName (); |
Boolean properti
|
batal set public PropertyName (nilai
boolean),
boolean publik PropertyName (); |
Indexed properti
|
batal set public PropertyName (int
index, PropertyType value);
public PropertyType mendapatkan PropertyName (int index), dan kekosongan set public PropertyName ( PropertyType [] value); public PropertyType [] mendapatkan PropertyName (); |
Multicast peristiwa
|
public void add EventListenerType ( EventListenerType l);
public void menghapus EventListenerType ( EventListenerType l); |
Unicast peristiwa
|
public void add EventListenerType ( EventListenerType l)
melempar TooManyListenersException;
public void menghapus EventListenerType ( EventListenerType l); |
Metode
|
publik metode
|
Sifat
properti
adalah atribut dari Jawa Bean yang dapat mempengaruhi penampilan atau
perilaku. Misalnya tombol dapat memiliki properti bernamadiaktifkan ,
yang mewakili jika keadaan tombol diaktifkan atau dinonaktifkan. Properti
A dapat membaca / menulis, read-only, atau menulis-saja.Negara membaca /
menulis dari sebuah properti ditentukan oleh ketersediaan metode
accessor. Properti adalah membaca / menulis, jika properti telah baik
mendapatkan dan metode yang ditetapkan. Properti adalah read-only, jika
hanya mendapatkan metode untuk properti didefinisikan. Dan untuk properti
write-satunya, hanya metode set didefinisikan.
Nama properti berasal dari nama metode
accessor. Misalnya, metode mendapatkan Inprise dan
set Inprise menunjukkan properti bernama Inprise.
Sifat Sederhana
Sebuah properti sederhana mewakili nilai tunggal. Dengan menggunakan metode pengambil isPropertyName () kita bendera ke introspector satu properti bernilai boolean.
Sebuah properti sederhana mewakili nilai tunggal. Dengan menggunakan metode pengambil isPropertyName () kita bendera ke introspector satu properti bernilai boolean.
/ / Anggota yang digunakan untuk
menyimpan nilai properti
/ /
swasta String internalString;
/ / Set dan mendapatkan metode
untuk properti bernama String
/ /
publik kekosongan SetString (String newValue)
{internalString = newValue;}
public getString String () { kembali
internalString;}
/ / Anggota yang digunakan untuk
menyimpan nilai properti
/ /
swasta boolean menghubungkan;
/ / Set dan mendapatkan metode
untuk nama properti boolean terhubung
/ /
publik kekosongan setConnected ( boolean newValue)
{koneksi = newValue;}
public
boolean isConnected ({} kembali terhubung;}
|
Sifat Indexed
Sebuah
properti diindeks mewakili array nilai. Dan kita dapat menggunakan metode
tambahan get dan set untuk properti diindeks. Ini mendapatkan dan
menetapkan metode mengambil parameter indeks integer. Ini parameter indeks
menunjukkan tempat dalam array di mana nilai properti baru harus
dimasukkan. Jika misalnya kita ingin nilai pertama dari properti diindeks
kita akan menggunakan metode get seperti ini: getPropertyName (1).
/ / Anggota untuk menyimpan properti diindeks
/ /
swasta int [] angka = {1, 2, 3, 4};
/ / Set dan mendapatkan metode untuk array lengkap
/ /
publik
kekosongan setNumbers (int [] newValue) {nomor = newValue;}
public int []
getNumbers () { kembali nomor;}
/ / Set dan mendapatkan metode dengan indeks untuk
menetapkan satu elemen array
/ /
publik
kekosongan setNumbers ( int index, int newValue) {angka [indeks] =
newValue;}
public int getNumbers ( int index) { kembali nomor
[index];}
|
Sifat Bound
Properti
terikat adalah properti yang memberitahu benda lain ketika nilai-nilai
perubahan. Ketika nilai perubahan PropertyChangeEvent sebuah
dipecat. Acara ini berisi nama properti, yang lama, dan nilai
baru. Kacang-kacangan lainnya atau benda dapat mendaftarkan diri sebagai
pendengar untuk acara ini. Benda-benda ini kemudian akan menerima
PropertyChangeEvent ketika ia dipecat dari kacang.
/ / Mendeklarasikan objek perubahan properti dan
instantiate
/ /
swasta PropertyChangeSupport perubahan = new
PropertyChangesSupport ( ini );
/ / Anggota yang digunakan untuk menyimpan nilai
properti
/ /
swasta String internalString;
/ / Set dan mendapatkan metode untuk properti
bernama String
/ /
publik
kekosongan SetString (String newValue) {
/ /
Menyimpan nilai saat ini dari properti
String
oldValue = internalString;
/ / Assign
baru nilai properti
internalString = newValue;
/ / Kirim
mengubah acara untuk pendengar, karena properti telah berubah
changes.firePropertyChangeEvent ("string", oldValue,
newValue);
}
public String getString () { kembali
internalString;}
/ / Menerapkan metode untuk menambah dan menghapus
pendengar
/ /
publik
kekosongan addPropertyChangeListener (PropertyChangeListener l) {
changes.addPropertyChangeListener (l);
}
publik
kekosongan removePropertyChangeListener (PropertyChangeListener l) {
changes.removePropertyChangeListener (l);
}
|
Dibatasi sifat
Jenis terakhir dari properti adalah properti dibatasi. Ketika nilai properti perubahan VetoableChangeEvent sebuah dipecat. Pendengar dari acara ini dapat memveto perubahan nilai properti. Sebuah pendengar veto perubahan dengan melemparkan sebuah PropertyVetoException. Jadi berikut ini terjadi ketika nilai properti dibatasi berubah:
Kacang kebakaran VetoableChangeEvent a.
Setiap pendengar untuk acara ini, akan menerima acara
ini.
Menurut beberapa aturan, pendengar ini akan menerima
atau memveto perubahan. Ketika veto terjadi pendengar melempar
PropertyVetoException a.
Selanjutnya kacang akan api PropertyChangeEvent untuk
setiap pendengar untuk acara ini, untuk memberitahu mereka properti telah
berubah.
/ / Mendeklarasikan objek perubahan properti dan
instantiate
/ /
swasta PropertyChangeSupport perubahan = new
PropertyChangesSupport ( ini );
/ / Mendeklarasikan objek perubahan vetoable dan
instantiate
/ /
swasta VetoableChangeSupport vetos = new
VetoableChangeSupport ( ini );
/ / Anggota yang digunakan untuk menyimpan nilai
properti
/ /
swasta String internalString;
/ / Set dan mendapatkan metode untuk properti
bernama String
/ / Metode set melempar PropertyVetoException
/ /
publik
kekosongan SetString (String newValue) melempar PropertyVetoException
{
/ /
Menyimpan nilai saat ini dari properti
String
oldValue = internalString;
/ /
Memberitahu pendengar perubahan tertarik vetoable tentang perubahan
vetos.fireVetoableChange
("string", oldValue, newValue);
/ /
Memberikan nilai baru properti
internalString = newValue;
/ / Kirim
mengubah acara untuk pendengar, karena properti telah berubah
changes.firePropertyChangeEvent ("string", oldValue, newValue);
}
public String getString () { kembali
internalString;}
/ / Menerapkan metode untuk menambah dan menghapus
pendengar untuk acara perubahan vetoable
/ /
publik
kekosongan addVetoableChangeListener (VetoableChangeListener l) {
changes.addVetoableChangeListener (l);
}
publik
kekosongan removeVetoableChangeListener (VetoableChangeListener l) {
changes.removeVetoableChangeListener (l);
}
/ / Menerapkan metode untuk menambah dan menghapus
pendengar untuk acara perubahan properti
/ /
publik
kekosongan addPropertyChangeListener (PropertyChangeListener l) {
changes.addPropertyChangeListener (l);
}
publik
kekosongan removePropertyChangeListener (PropertyChangeListener l) {
changes.removePropertyChangeListener (l);
}
|
Acara
Java Beans mendukung Java 1.1 model acara. The 1,1 event model penanganan didasarkan pada konsep pendengar acara. Sebuah objek tertarik untuk menerima peristiwa adalah pendengar acara. Sebuah benda yang menghasilkan peristiwa yang disebut sumber acara. Dalam hal ini kami kacang merupakan sumber acara dan aplikasi pelaksanaan kacang adalah pendengar acara. Sumber Acara menyimpan daftar pendengar dan menyediakan metode untuk menambah dan menghapus pendengar tertarik untuk dan dari daftar. Jadi kita perlu menambahkan metode untuk menambah dan menghapus pendengar tertarik untuk kacang kami.
Java Beans mendukung Java 1.1 model acara. The 1,1 event model penanganan didasarkan pada konsep pendengar acara. Sebuah objek tertarik untuk menerima peristiwa adalah pendengar acara. Sebuah benda yang menghasilkan peristiwa yang disebut sumber acara. Dalam hal ini kami kacang merupakan sumber acara dan aplikasi pelaksanaan kacang adalah pendengar acara. Sumber Acara menyimpan daftar pendengar dan menyediakan metode untuk menambah dan menghapus pendengar tertarik untuk dan dari daftar. Jadi kita perlu menambahkan metode untuk menambah dan menghapus pendengar tertarik untuk kacang kami.
Ketika peristiwa tertentu terjadi sumber acara
memberitahu semua pendengar terdaftar. Sumber acara memberitahukan
pendengar dengan menerapkan metode di atasnya dan melewati sebuah objek
acara. Ini objek acara adalah subclass dari kelas
java.util.EventObject. Jadi kita perlu membuat kelas Event kita
sendiri. Untuk skema ini untuk bekerja semua pendengar harus menerapkan
metode yang diperlukan. Hal ini dicapai dengan mewajibkan semua pendengar
untuk mengimplementasikan antarmuka yang sesuai dengan acara. Sebuah
antarmuka pendengar acara dilaksanakan dengan memperluas antarmuka
java.util.EventListener. Interface ini tidak mengandung metode dan hanya
penanda, dengan jelas mengidentifikasi antarmuka seperti.
Ini adalah langkah-langkahnya:
Ini adalah langkah-langkahnya:
Buat acara kita sendiri kelas kustom, bernama
XXXEvent.
Buat kelas antarmuka XXXListener, mengandung metode
yang objek pendengar perlu menimpa.
Tambahkan properti untuk kacang yang berisi daftar
objek pendengar.
Menambahkan addXXXListener dan metode
removeXXXListener, di mana XXX singkatan nama acara.
Tambahkan metode yang akan memberitahukan kepada semua
pendengar terdaftar.
Sebagian besar waktu kita ingin kacang kami untuk
mengirimkan acara untuk semua pendengar terdaftar. Tapi kadang-kadang kita
hanya ingin terhubung ke satu pendengar saja. Hal ini dapat dicapai dengan
melemparkan TooManyListenersException pada metode addXXXListener. Bila
pendengar sudah terhubung ke kacang, pendengar yang lain mencoba untuk menghubungkan
akan ditolak.
Langkah 1.
/ / Kami acara bernama OurEvent
/ /
public class
OurEventObject meluas java.util.EventObject {
/ / Hanya
pelaksanaan konstruktor sederhana
/ /
public
OurEventObject (sumber Object) {
Super
(sumber);
}
}
|
Langkah 2.
/ / Acara antarmuka pendengar untuk OurEvent,
sehingga dinamai OurEventListener
/ /
publik
antarmuka OurEventListener meluas java.util.EventListener {
/ / Metode
yang pendengar perlu menyediakan dengan tubuh
/ /
eventRaised
(OurEventObject e);
}
|
Langkah 3.
/ / Mempertahankan daftar objek yang telah terdaftar
untuk menerima acara kami
/ /
swasta pendengar Vector = new Vector ();
|
Langkah 4.
/ / Metode untuk menambahkan pendengar untuk kacang
/ / Metode ini disinkronkan karena pendengar
beberapa dapat menyebutnya
/ / Metode pada saat yang sama
/ /
publik disinkronisasi addOurEventListener (l
OurEventListener) {
listeners.addElement (l);
}
/ / Metode untuk menghilangkan pendengar dari kacang
/ /
publik disinkronisasi removeOurEventListener (l
OurEventListener) {
listeners.removeElement (l);
}
|
Langkah 5.
/ / Metode yang akan memberitahu semua pendengar
dari OurEvent
/ /
public batal
fireOurEvent () {
Vector l;
/ / Membuat
salinan diterapkan pendengar yang tersedia
/ /
disinkronkan
( ini ) {l = (Vector) listeners.clone ();}
/ / Loop
sampai semua pendengar telah tercapai dan memanggil metode
/ /
Didefinisikan dalam antarmuka OurEventListener
/ /
untuk ( int
i = 0; i <l.size (); i + +) {
OurEventListener pendengar = (OurEventListener) l.elementAt (i);
listener.eventRaised ( new OurEventObject ( ini ));
}
}
|
Metode
Dengan hanya menyatakan publik metode dalam kacang kami, alat pembangun akan tahu tentang metode ini.
Dengan hanya menyatakan publik metode dalam kacang kami, alat pembangun akan tahu tentang metode ini.
/ / Hanya dengan mendeklarasikan publik metode dalam
kacang,
/ / Akan metode akan terkena alat pembangun
/ / Dengan cara introspeksi
/ /
publik
kekosongan myMethod () {/ * kosong apa-apa, do * /}
|
Penyimpanan persisten
Untuk membuat gigih Java Bean, kacang hanya perlu mengimplementasikan interface java.io.Serializable. Dengan menerapkan antarmuka ini bidang kacang secara otomatis akan disimpan. Kami tidak perlu melakukan apa-apa lagi! Untuk mencegah bidang tertentu diselamatkan kita dapat menggunakan kata kunci sementara atau statis. Sebuah properti sementara atau statis tidak disimpan.
Untuk membuat gigih Java Bean, kacang hanya perlu mengimplementasikan interface java.io.Serializable. Dengan menerapkan antarmuka ini bidang kacang secara otomatis akan disimpan. Kami tidak perlu melakukan apa-apa lagi! Untuk mencegah bidang tertentu diselamatkan kita dapat menggunakan kata kunci sementara atau statis. Sebuah properti sementara atau statis tidak disimpan.
/ / Mengimplementasikan antarmuka
java.io.Serializable membuat persisten kacang
/ /
public class
MyBean
meluas
java.lang.Object
mengimplementasikan java.io.Serializable {
}
|
Kustomisasi
Tampilan dan perilaku kacang dalam alat pembangun dapat diubah oleh penggunaan Customizer dan editor properti.
Tampilan dan perilaku kacang dalam alat pembangun dapat diubah oleh penggunaan Customizer dan editor properti.
Editor Properti
Sebuah editor properti mari kita pengguna mengubah nilai properti melalui editor khusus. Misalnya properti yang hanya berisi nilai-nilai dari array tertentu, seperti properti keselarasan LayoutManager a. Properti keselarasan biasanya hanya memungkinkan integer konstan FlowLayout.LEFT.Dengan menetapkan editor properti untuk properti ini pengguna hanya akan ditampilkan nilai yang valid untuk properti ini.
Sebuah editor properti mari kita pengguna mengubah nilai properti melalui editor khusus. Misalnya properti yang hanya berisi nilai-nilai dari array tertentu, seperti properti keselarasan LayoutManager a. Properti keselarasan biasanya hanya memungkinkan integer konstan FlowLayout.LEFT.Dengan menetapkan editor properti untuk properti ini pengguna hanya akan ditampilkan nilai yang valid untuk properti ini.
Editor properti mengimplementasikan antarmuka
java.beans.PropertyEditor.
Customizer
A mari Customizer adalah pengguna mengubah sifat banyak kacang. Customizer Sebuah meluas komponen visual seperti java.awt.Panel. Dan mengimplementasikan antarmuka java.beans.Customizer, sehingga alat pembangun akan mengenali Customizer yang seperti itu.
BeanInfo
Sebuah kelas kacang juga dapat memiliki kelas BeanInfo tambahan. Kelas ini akan digunakan oleh alat pembangun untuk mendapatkan sifat, kejadian, nama untuk menampilkan, editor properti, ikon dan banyak lagi. Nama kelas BeanInfo adalah nama dari kacang diikuti oleh BeanInfo. Jika alat pembangun tidak dapat menemukan kelas BeanInfo dengan kacang, alat pembangun akan menggunakan mekanisme introspeksi berdasarkan pada konvensi penamaan.
Menyebarkan
Distribusi Jawa Beans dilakukan melalui file JAR. Sebuah file JAR adalah ZIP seperti file dengan file kelas Java, dan sumber daya lain yang tersimpan di dalamnya. Sebuah file JAR mungkin memiliki file MANIFEST. Ini file MANIFEST menjelaskan isi dari file JAR. Ketika kita menghilangkan file MANIFEST, file JAR akan memperlakukan semua kelas Java dalam JAR kacang-kacangan. Dengan menyediakan file MANIFEST kita dapat memberitahu file JAR, yang merupakan kelas Java Beans dan mana yang tidak. Kita perlu menambahkan "Java-Bean: Benar". Baris di file MANIFEST
Contoh baris dalam sebuah file MANIFEST, yang akan menunjukkan kelas KnowledgeBean sebagai Bean Java:
Nama: com / bolesian / kacang / KnowledgeBean
Java-kacang: benar
Java-kacang: benar
JBuilder dan kacang
Kita tahu banyak tentang Java Beans sekarang. Ini saatnya untuk melihat beberapa dalam tindakan. Dan sekarang saatnya untuk melihat apa JBuilder dan Java Beans memiliki kesamaan. Jadi pertama kita akan melihat JBuilder sebagai alat pembangun untuk visual memanipulasi Java Beans.
Kita tahu banyak tentang Java Beans sekarang. Ini saatnya untuk melihat beberapa dalam tindakan. Dan sekarang saatnya untuk melihat apa JBuilder dan Java Beans memiliki kesamaan. Jadi pertama kita akan melihat JBuilder sebagai alat pembangun untuk visual memanipulasi Java Beans.
Manipulasi Visual
Ketika kita membuka aplikasi baru di JBuilder dan beralih ke tab Desain AppBrowser, kita melihat apa yang JBuilder berarti dengan visual memanipulasi.Di tengah kita melihat "Formulir" di mana kita dapat menempatkan kacang kami. Kacang ini dapat ditemukan pada Palette Komponen di bagian atas layar. Ini Palette Komponen mengandung banyak komponen GUI yang dapat digunakan dalam aplikasi kami. Di bagian kanan layar kita lihat Object Inspector. Dan sebagai nama menyarankan, Object Inspector menunjukkan kepada kita semua properti dan peristiwa itu akan menemukan di dalam kacang melalui introspeksi.
Ketika kita membuka aplikasi baru di JBuilder dan beralih ke tab Desain AppBrowser, kita melihat apa yang JBuilder berarti dengan visual memanipulasi.Di tengah kita melihat "Formulir" di mana kita dapat menempatkan kacang kami. Kacang ini dapat ditemukan pada Palette Komponen di bagian atas layar. Ini Palette Komponen mengandung banyak komponen GUI yang dapat digunakan dalam aplikasi kami. Di bagian kanan layar kita lihat Object Inspector. Dan sebagai nama menyarankan, Object Inspector menunjukkan kepada kita semua properti dan peristiwa itu akan menemukan di dalam kacang melalui introspeksi.
Gambar 2 JBuilder 2 sebagai contoh alat pembangun
Bean Insight penyihir
JBuilder berisi wizard BeanInsight yang memungkinkan untuk introspeksi Bean Jawa tertentu tanpa terlebih dahulu menjatuhkannya pada "Formulir" kami. Kita dapat menemukan Wizard BeanInsight dalam menu Wizard.
JBuilder berisi wizard BeanInsight yang memungkinkan untuk introspeksi Bean Jawa tertentu tanpa terlebih dahulu menjatuhkannya pada "Formulir" kami. Kita dapat menemukan Wizard BeanInsight dalam menu Wizard.
Gambar 3 JBuilder BeanInsight dialog
Dalam dialog kita dapat memilih Bean Jawa. Ketika
kacang dimuat JBuilder akan introspeksi kacang melalui kelas BeanInfo jika
tersedia. Jika tidak ada JBuilder kelas BeanInfo akan menggunakan refleksi
dan Java Beans konvensi penamaan untuk menganalisis kacang. Setelah
menganalisis kacang, kita dapat melihat hasilnya. Halaman pertama
menunjukkan ringkasan hasil, tetapi ketika kita klik pada View Details
.. tombol, kita mendapatkan halaman yang terpisah untuk setiap kategori
hasil.
Gambar 4 Rincian BeanInsight dengan Properti dipilih
Kami akan menggunakan wizard ini BeanInsight lanjut di
dalam tutorial.
BeansExpress
Kita telah melihat bagaimana JBuilder adalah alat pembangun untuk memanipulasi kacang. Tapi mungkin lebih penting adalah dukungan dari JBuilder untuk membuat Java Beans. Kami adalah pengembang dan ingin tahu bagaimana JBuilder membuatnya mudah untuk membangun Java Beans. Di sini kita akan melihat deskripsi singkat dari masing-masing pilihan. Masing-masing topik akan dijelaskan lebih lanjut di seluruh tutorial.
Kita telah melihat bagaimana JBuilder adalah alat pembangun untuk memanipulasi kacang. Tapi mungkin lebih penting adalah dukungan dari JBuilder untuk membuat Java Beans. Kami adalah pengembang dan ingin tahu bagaimana JBuilder membuatnya mudah untuk membangun Java Beans. Di sini kita akan melihat deskripsi singkat dari masing-masing pilihan. Masing-masing topik akan dijelaskan lebih lanjut di seluruh tutorial.
Bantuan yang paling penting untuk mendapatkan kita
mulai adalah Wizard BeansExpress. Wizard ini menciptakan potongan kode,
yang membuat kami tepat di jalan.
Terkait erat dengan wizard BeansExpress adalah tab
Bean di AppBrowser tersebut. Tab ini dibagi menjadi 5 tab
lainnya. Kita dapat mengaktifkan serialisasi dari kacang, menambah atau
menghapus properti, membuat kelas BeanInfo, menambah atau menghapus peristiwa,
dan menambahkan editor properti.
Kami pertama kacang
Pertama
kita akan membangun kacang sederhana, tidak menggunakan BeansExpress JBuilder
khusus. Hal ini untuk memastikan, kita memahami apa yang JBuilder tidak
ketika menghasilkan banyak kode sumber untuk kita, ketika kita menggunakan
wizard BeansExpress.
Kami akan membangun sebuah kacang yang berisi nomor,
sebuah metode untuk mendapatkan kacang bersemangat dengan melewati nomor baru
ke kacang dan peristiwa yang akan dipecat bila jumlah lulus adalah dalam
kisaran 5 dari properti jumlah kacang. Dengan cara ini kita akan menemukan
sifat, metode dan peristiwa dalam satu kacang.
Pertama kita perlu memulai Proyek Baru di
JBuilder. Kemudian kita perlu menambahkan sebuah kelas sederhana untuk
proyek. Ketik dalam kode sumber berikut ini:
public class
SampleBean meluas java.lang.Object {
public
SampleBean () {
/ /
Melakukan apa-apa
}
}
|
Dan voila! Kacang pertama kami siap. Kami mendefinisikan kelas
bernama SampleBean dan menambahkan konstruktor yang tidak mengambil
parameter. Ia tidak melakukan apa-apa tapi setidaknya itu adalah kacang.
Mari kita menambahkan properti untuk kacang ini. Kami mendefinisikan nomor sebagai properti untuk kacang ini. Di sinilah API JavaBeans masuk Dalam rangka untuk mengkonfirmasi ke kerangka JavaBean, kita perlu menambahkan untuk properti setiap kacang yang perlu membaca / menulis akses set dan mendapatkan metode.
Mari kita menambahkan properti untuk kacang ini. Kami mendefinisikan nomor sebagai properti untuk kacang ini. Di sinilah API JavaBeans masuk Dalam rangka untuk mengkonfirmasi ke kerangka JavaBean, kita perlu menambahkan untuk properti setiap kacang yang perlu membaca / menulis akses set dan mendapatkan metode.
Metode accessor Jadi misalnya jika kita menambahkan properti bernama
sejumlah tipe int, mendapatkan dan menetapkan akan disebut getNumber ()
mengembalikan int dan setNumber (int newNumber).
Berikut adalah kode sumber ketika properti ditambahkan ke kacang :
Berikut adalah kode sumber ketika properti ditambahkan ke kacang :
1: public class SampleBean meluas java.lang.Object {
2:
3: swasta
int nomor;
4:
5: public
kekosongan setNumber ( int newNumber) {
6: jumlah =
newNumber;
7:}
8:
9: public
int getNumber () {
10: kembali nomor;
11:}
12:
13: public SampleBean () {
14: setNumber
(0);
15:}
16:}
|
Kami
sekarang akan mengambil melihat lebih dekat pada kode. Kami melihat di
baris 3 deklarasi jumlah properti. Kami juga melihat penggunaan pengubah
swasta. Ini berarti bahwa properti ini tidak dapat dilihat oleh dunia luar
dan hanya bisa diakses dari dalam kelas ini. Hal ini di luar cakupan
tutorial ini untuk menjelaskan semua pengubah berbeda yang tahu Java. Tapi
apakah baik untuk mengetahui bahwa pengubah swasta menyimpannya di kelas dan
pengubah publik menerbitkan properti atau metode di luar kelas. Untuk
dapat mengubah nilai properti ini kami menambahkan metode setNumber dan
getNumber di baris 5-11. Kita dapat melihat metode ini memiliki pengubah
publik sehingga pengguna dapat mengakses kacang metode ini. Dan akhirnya
konstruktor memiliki pernyataan menginisialisasi nilai properti dengan nilai 0
(line14).
Selanjutnya kita menambahkan metode untuk kacang ini,
yang akan mengambil int sebagai parameter dan akan memecat acara dalam kasus
int ini adalah dalam kisaran plus dan minus 5 dari properti nomor. Untuk
memastikan metode ini dapat dipanggil oleh pengembang kita perlu mendefinisikan
sebagai publik di.
Berikut adalah kode sumber dari metode ini:
1: public
kekosongan rangeCheck ( int compareTo) {
2: jika ((compareTo <= jumlah + 5)
&& (compareTo> = jumlah - 5)) {
3: event / /
Api
4:}
5:}
|
Logika hanya di baris 2. Di sini kita
membandingkan compareTo parameter masukan ke properti jumlah kacang. Dan
ketika parameter berada dalam jangkauan kita perlu api acara yang kita butuhkan
untuk membuat, sehingga hanya komentar terlampir.
Sejauh ini semuanya telah langsung. Untuk acara
itu tidak berbeda, tapi kita perlu menambahkan kode lebih banyak untuk
mewujudkannya.
Sebelumnya ketika kita melihat peristiwa, kita harus
mengikuti langkah-langkah tertentu untuk menggunakan event. Berikut adalah
langkah-langkah diulang kita perlu mengambil untuk menambahkan acara adat kita
sendiri ke SampleBean:
Buat acara kita sendiri kelas kustom, bernama XXXEvent.
Buat kelas antarmuka XXXListener, mengandung metode
yang objek pendengar perlu menimpa.
Tambahkan properti untuk kacang yang berisi daftar
objek pendengar.
Menambahkan addXXXListener dan metode
removeXXXListener, di mana XXX singkatan nama acara.
Tambahkan metode yang akan memberitahukan kepada semua
pendengar terdaftar.
Langkah 1.
Untuk menciptakan sebuah kelas custom event kita perlu subclass kelas java.util.EventObject. Kita perlu menambahkan konstruktor untuk kelas ini dengan sebagai parameter obyek sumber acara. Konstruktor ini akan memanggil konstruktor dari kelas java.util.EventObject. Dalam kacang contoh kita bisa juga menggunakan EventObject sendiri untuk memberitahu sistem dari suatu peristiwa, tapi cara ini kita dapat melihat bahwa suatu peristiwa tidak lebih dari perpanjangan sederhana untuk kelas EventObject. Kita juga dapat menambahkan properti untuk acara ini, untuk memberikan acara kami informasi lebih lanjut dan detail.
Untuk menciptakan sebuah kelas custom event kita perlu subclass kelas java.util.EventObject. Kita perlu menambahkan konstruktor untuk kelas ini dengan sebagai parameter obyek sumber acara. Konstruktor ini akan memanggil konstruktor dari kelas java.util.EventObject. Dalam kacang contoh kita bisa juga menggunakan EventObject sendiri untuk memberitahu sistem dari suatu peristiwa, tapi cara ini kita dapat melihat bahwa suatu peristiwa tidak lebih dari perpanjangan sederhana untuk kelas EventObject. Kita juga dapat menambahkan properti untuk acara ini, untuk memberikan acara kami informasi lebih lanjut dan detail.
Karena ini adalah kelas baru, kita perlu menambahkan
file Java sumber baru untuk proyek kami di JBuilder. Nama ini InRangeEvent
kelas. Ini hasil dalam kode berikut:
1:
public class InRangeEvent meluas
java.util.EventObject {
2: public InRangeEvent (Object EventSource)
{
3: Super (EventSource);
4:}
5:}
|
Langkah 2
Sekarang kita akan membuat lem antara sumber acara dan pendengar acara: antarmuka pendengar acara. Kita akan menyebutnya InRangeListener untuk mengkonfirmasi ke konvensi penamaan kacang. Interface ini hanya akan berisi metode tanda tangan untuk metode yang perlu dilaksanakan oleh setiap pendengar acara. Kita akan menyebutnya inRange metode. Tambahkan file Java sumber baru untuk proyek kami. Berikut adalah kode sumber untuk antarmuka:
Sekarang kita akan membuat lem antara sumber acara dan pendengar acara: antarmuka pendengar acara. Kita akan menyebutnya InRangeListener untuk mengkonfirmasi ke konvensi penamaan kacang. Interface ini hanya akan berisi metode tanda tangan untuk metode yang perlu dilaksanakan oleh setiap pendengar acara. Kita akan menyebutnya inRange metode. Tambahkan file Java sumber baru untuk proyek kami. Berikut adalah kode sumber untuk antarmuka:
publik
antarmuka InRangeListener meluas java.util.EventListener {
public kekosongan inRange (InRangeEvent event);
}
|
Langkah 3.
Untuk memastikan kami memiliki properti yang akan menahan semua benda pendengar kita menambahkan properti java.util.Vector jenis. Kelas ini akan menyimpan Object apapun. Jadi tambahkan baris berikut ke sumber kami:
Untuk memastikan kami memiliki properti yang akan menahan semua benda pendengar kita menambahkan properti java.util.Vector jenis. Kelas ini akan menyimpan Object apapun. Jadi tambahkan baris berikut ke sumber kami:
swasta
pendengar java.util.Vector = new java.util.Vector ();
|
Langkah 4.
Tambahkan metode addXXXListener dan removeXXXListener. Kami akan memanggil InRange acara kami, sehingga nama akan addInRangeListener dan removeInRangeListener. Satu-satunya metode ini perlu Anda lakukan adalah untuk menambah dan menghapus objek pendengar dari daftar. Obyek Vector menyediakan dua metode berikut untuk ini: addElement dan removeElement. Ini hasil dalam kode sumber berikut:
Tambahkan metode addXXXListener dan removeXXXListener. Kami akan memanggil InRange acara kami, sehingga nama akan addInRangeListener dan removeInRangeListener. Satu-satunya metode ini perlu Anda lakukan adalah untuk menambah dan menghapus objek pendengar dari daftar. Obyek Vector menyediakan dua metode berikut untuk ini: addElement dan removeElement. Ini hasil dalam kode sumber berikut:
publik
disinkronisasi batal addInRangeListener (pendengar InRangeListener) {
listeners.addElement (pendengar);
}
publik
disinkronisasi batal removeInRangeListener (pendengar InRangeListener) {
listeners.removeElement (pendengar);
}
|
Langkah 5.
Dan langkah terakhir adalah menambahkan metode untuk kacang kami yang akan memberitahukan kepada semua pendengar. Untuk tujuan ini kita akan menambahkan metode fireEvent. Metode ini akan mengambil acara adat, InRangeEvent, sebagai parameter. Berikut adalah sumber untuk metode ini:
Dan langkah terakhir adalah menambahkan metode untuk kacang kami yang akan memberitahukan kepada semua pendengar. Untuk tujuan ini kita akan menambahkan metode fireEvent. Metode ini akan mengambil acara adat, InRangeEvent, sebagai parameter. Berikut adalah sumber untuk metode ini:
1: swasta
batal fireEvent (InRangeEvent event) {
2: / /
Membuat salinan daftar dan menggunakan ini untuk daftar peristiwa kebakaran.
3: / /
Dengan cara ini pendengar dapat ditambahkan dan dihapus dari dan ke
4: / /
daftar asli dalam menanggapi ini acara.
5: / /
6: Daftar
java.util.Vector;
7:
disinkronkan ( ini ) {list = (java.util.Vector) listeners.clone ();}
8:
9: untuk ( int i = 0; i <list.size ();
i + +) {
10: / /
Dapatkan pendengar berikutnya dan melemparkan objek ke kanan
11: tipe / /
pendengar.
12: / /
13:
InRangeListener pendengar = (InRangeListener) list.elementAt (i);
14: / /
Membuat panggilan ke metode dilaksanakan oleh pendengar
15: / / dan
didefinisikan dalam pendengar antarmuka objek.
16: / /
17:
listener.inRange (event);
18:}
19:}
|
Sejalan 6 dan 7 kita membuat salinan daftar pendengar,
kita menghindari masalah bentrok dalam objek pendengar. Jalur 9 mulai loop
untuk itu akan loop melalui salinan daftar. Ini menciptakan objek
pendengar melalui casting elemen dari daftar. The inRange metode dalam
antarmuka InRangeListener dipanggil dengan objek acara sebagai
parameter. Hal ini memastikan metode dalam setiap objek pendengar
dijalankan.
Akhirnya kita perlu menambahkan panggilan ke metode
ini fireEvent dalam kacang kami. Ingat kita menciptakan metode
rangeCheck. Di dalam pernyataan jika kita akan menambahkan pernyataan
bahwa akan memanggil metode fireEvent. Ini hasil dalam kode berikut:
1: public
kekosongan rangeCheck ( int compareTo) {
2: jika ((compareTo <= jumlah + 5)
&& (compareTo> = jumlah - 5)) {
3: event / /
Api
4: fireEvent
( new InRangeEvent ( ini ));
5:}
6:}
|
Baris 4 berisi panggilan ke metode fireEvent.
Itu banyak mengetik, tapi sekarang kita memiliki Bean Java yang belum sifat saja dan metode, tetapi juga peristiwa kebakaran sendiri kustom.
Itu banyak mengetik, tapi sekarang kita memiliki Bean Java yang belum sifat saja dan metode, tetapi juga peristiwa kebakaran sendiri kustom.
Pengujian
Sekarang saatnya untuk mengkompilasi proyek kami. Jika semuanya berjalan dengan baik, kita sekarang memiliki tiga kelas baru: InRangeEvent, InRangeListener dan SampleBean. Untuk menguji kacang ini, kita perlu menulis sebuah aplikasi sederhana yang akan menggunakan kacang. Oleh karena itu kita menulis aplikasi konsol yang sangat sederhana dalam JBuilder. Menambahkan file baru untuk proyek kami dan nama itu TestBeanApp.java. Instantiate kacang dan melakukan beberapa tes dengan menerapkan metode rangeCheck dengan nilai yang berbeda untuk parameter.
Sekarang saatnya untuk mengkompilasi proyek kami. Jika semuanya berjalan dengan baik, kita sekarang memiliki tiga kelas baru: InRangeEvent, InRangeListener dan SampleBean. Untuk menguji kacang ini, kita perlu menulis sebuah aplikasi sederhana yang akan menggunakan kacang. Oleh karena itu kita menulis aplikasi konsol yang sangat sederhana dalam JBuilder. Menambahkan file baru untuk proyek kami dan nama itu TestBeanApp.java. Instantiate kacang dan melakukan beberapa tes dengan menerapkan metode rangeCheck dengan nilai yang berbeda untuk parameter.
Ketika dijalankan aplikasi akan menampilkan output
sebagai berikut:
Nilai nomor: 100
Memanggil checkRange dengan nilai 110
Memanggil checkRange dengan nilai 102
Tertangkap acara. Acara Sumber: SampleBean @ 1cc756
Memanggil checkRange dengan nilai 96
Tertangkap acara. Acara Sumber: SampleBean @
1cc756
|
Seperti yang bisa kita lihat peristiwa hanya
disebarkan kepada pendengar ketika nilai berada dalam kisaran dengan properti
nomor.
Beans Express
Nah,
kami membuat Bean Java, dan kami bahkan menggunakan JBuilder untuk
melakukannya. Tapi kami tidak menggunakan potensi penuh dari
JBuilder. Karena JBuilder memiliki BeansExpress untuk membuat kacang
membuat jauh lebih mudah. BeansExpress terdiri dari satu set penyihir,
desainer visual, dan contoh kode yang membantu kita membangun Java Beans cepat
dan mudah. Setelah kita memiliki Bean Java, kita dapat menggunakan
BeansExpress untuk membuat perubahan untuk itu. Kita bisa menemukan
penyihir BeansExpress pada tab dalam File | dialog New. Jadi mari kita
pilih File | Baru di JBuilder. Dialog berikut akan ditampilkan:
Pada tab pertama kita dapat melihat ikon JavaBean, itu
adalah ikon pertama dalam daftar. Pada akhir daftar kita bisa melihat
Enterprise JavaBean ikon. Kami akan melihat di Enterprise JavaBean
nanti. Dengan mengklik ikon JavaBean wizard BeansExpress akan
dimulai. Selain ikon JavaBean, apakah ada tab BeansExpress terpisah dalam
dialog ini. Dengan mengklik pada tab ini, kita mendapatkan ikon berikut:
Gambar 6 BeansExpress halaman dalam dialog New
Mari kita lihat di setiap ikon di halaman ini:
New Bean: Komponen Bean Baru adalah kerangka yang
sangat sederhana yang memiliki penampung sampel di mana sifat, metode dan
peristiwa milik.
OK Batal Bean: Ini adalah kacang sampel dengan OK,
Batal dan Bantuan tombol pada panel.
DB Bean: lain kacang sampel dengan properti dataset,
sehingga dapat digunakan oleh JBuilder DataExpress. Ini berisi Grid,
Statusbar dan Navigator kontrol untuk mengoperasikan beberapa fungsi datababase
dasar.
Bean Info: Untuk elemen dalam kacang yang tidak
mengikuti konvensi penamaan kacang, dan karena itu tidak dapat muncul dengan
introspeksi, kita bisa menggunakan kelas BeanInfo ke permukaan elemen-elemen
ini secara manual. Saya akan menjelaskan lebih lanjut tentang ini nanti.
Bean New Event: Sebuah potongan kode yang dapat
digunakan untuk membuat acara baru.
Ini potongan kode merupakan warisan dari versi
JBuilder sebelumnya. Karena wizard BeansExpress baru, kata-kata diatas
tidak begitu berguna lagi.
Dan sebelum kita memulai wizard BeansExpress baru,
pertama-tama kita harus memikirkan untuk membuat kacang. Kacang sebelumnya
kita membangun, adalah kacang tak terlihat. Kacang tidak memiliki
representasi GUI. Kali ini kita akan membuat kacang visual, dengan GUI
sendiri. Kacang akan terbuat dari label dan textfield. Label akan
ditempatkan di atas textfield. Penyelarasan label mungkin harus diubah ke
kiri, tengah, atau kanan selama waktu desain. Dan ketika saat run-time
pengguna menekan Enter di textfield suatu peristiwa harus
dihasilkan. Acara ini harus mengandung nilai textfield.
Wizard
Klik pada ikon JavaBean pada halaman baru di File | dialog New. JBuilder akan menampilkan dialog berikut:
Klik pada ikon JavaBean pada halaman baru di File | dialog New. JBuilder akan menampilkan dialog berikut:
Gambar 7 BeansExpress penyihir beraksi
Di sini kita dapat menyediakan wizard dengan
informasi, yang akan digunakan dalam proses generasi Bean Jawa
JBuilder. Dialog ini terbagi menjadi dua bagian: Kelas Pilihan dan
Informasi. Field pertama dari bagian Informasi Kelas berisi nama paket
kacang ditempatkan masuk Bagian kedua berisi nama kacang kami. Kami
mengubahnya ke nama yang lebih deskriptif: LabelTextFieldControl.
Selanjutnya kita dapat memilih kelas untuk mewarisi
kacang kami dari. JBuilder telah memilih kelas com.sun.java.swing.JPanel
bagi kita. Tetapi jika kita tidak seperti ini, kita dapat dengan mudah
mengubah ini dengan memilih kelas yang berbeda dari combobox, atau dengan
mengklik tombol dengan tiga titik untuk memilih kelas dari browser
paket. Isi combobox didefinisikan oleh negara kotak centang di bawah
combobox: Tampilkan hanya inti JDK dan kelas ayunan. Jika checkbox ini
diperiksa combobox akan berisi hanya "nyata" JDK dan kelas
ayunan. Jika kotak centang dicentang, dua borland kelas akan ditambahkan
ke combobox:
Borland.jbcl.view.BeanPanel adalah, transparan ringan
swing / visual JBCL JavaBean wadah dengan kode tambahan untuk pemetaan acara
pengiriman, tekstur, dan penanganan fokus. Borland.jbcl.control.BevelPanel
adalah BeanPanel dengan tepi miring. Kelas-kelas lainnya adalah JDK
standar dan kelas ayunan. Kami memilih untuk BeanPanel kacang kami.
Jika dicentang, kotak centang di sebelah memberitahu
JBuilder untuk memperingatkan kita jika kita ingin memperpanjang berlaku non
Jawa kelas Bean. Kami meninggalkan itu diperiksa.
Akhirnya kita dapat membiarkan JBuilder menghasilkan
fungsi utama, sehingga kacang dapat berjalan sendiri. Kami tidak ingin
melakukannya di sini, jadi kita biarkan dicentang. Dan kotak centang
terakhir menyatakan JBuilder untuk menghasilkan properti sampel dalam
kacang. Periksa checkbox ini untuk kacang kami.
Klik pada tombol OK. JBuilder menghasilkan kode
untuk kacang baru kami dan menambahkannya ke proyek kami. Mari kita melihat
dari dekat pada kode yang dihasilkan oleh JBuilder:
1: Paket
borcon98;
2:
3: import
java.awt *;.
4: import
borland.jbcl.view.BeanPanel;
5:
6:
public class LabelTextFieldControl
meluas BeanPanel {
7:
BorderLayout borderLayout1;
8: swasta sampel String =
"Contoh";
9:
10:
11: public LabelTextFieldControl () {
12: coba
{
13: jbInit
();
14:}
15: catch (Exception ex) {
16:
ex.printStackTrace ();
17:}
18:}
19:
20: swasta
batal jbInit () throws Exception {
21: ini setLayout (borderLayout1);.
22:}
23:
24: public String getSample () {
25: kembali sampel;
26:}
27:
28: public
batal setExample (String newSample) {
29: sampel =
newSample;
30:}
31:}
|
Baris pertama berisi nama paket. Baris 3 dan 4
berisi pernyataan impor yang diperlukan untuk kacang ini. Dan jika kita
turun, kita melihat deklarasi kelas di baris 6. Baris 8 berisi variabel
dudukan untuk Contoh nama properti. Metode get dan set untuk properti ini
dapat ditemukan di baris 24-30.Baris 11-18 mengandung konstruktor. Dalam
konstruktor ini metode jbInit dipanggil. Metode ini dinyatakan dalam baris
20-22 dan digunakan untuk tata letak kacang.
Nah, ini tidak terlalu jauh berbeda dari kode kami
untuk kacang sebelumnya. Satu-satunya perbedaan utama adalah kode tambahan
untuk menangani user interface atau bagian visual dari kacang. Dan karena
kami sebelumnya adalah kacang kacang non-visual yang dapat dimengerti.
Klik pada tab Bean di AppBrowser untuk melihat apa
yang terjadi di sana. Satu-satunya perubahan yang menarik telah terjadi
pada halaman Properties:
Gambar 8 Properties untuk kacang kami
Di sini kita dapat melihat properti sampel yang
ditunjukkan, dan semua fitur-fiturnya.
User interface
Kami telah mendapat kerangka untuk kacang kami, mari kita menambahkan beberapa fungsionalitas untuk itu. Pilih kacang di Pane Navigasi browser proyek kami. Klik pada tab Desain di Pane Konten untuk membuka Designer Visual JBuilder. Di sini kita dapat melihat representasi visual dari kacang.Saya ingin membuat kacang dengan label dan textfield, jadi mari kita menambahkan kedua TextFieldControl dan sebuah LabelControl dari tab Control pada Palette Komponen untuk kacang.
Kami telah mendapat kerangka untuk kacang kami, mari kita menambahkan beberapa fungsionalitas untuk itu. Pilih kacang di Pane Navigasi browser proyek kami. Klik pada tab Desain di Pane Konten untuk membuka Designer Visual JBuilder. Di sini kita dapat melihat representasi visual dari kacang.Saya ingin membuat kacang dengan label dan textfield, jadi mari kita menambahkan kedua TextFieldControl dan sebuah LabelControl dari tab Control pada Palette Komponen untuk kacang.
Untuk memastikan komponen akan sefleksibel mungkin
ketika sedang diubah ukurannya, kita perlu menggunakan Java layoutmanagers
standar AWT.Dengan menggunakan layoutmanagers kita dapat yakin bahwa kacang
kita akan platform independen dan tidak menunjukkan salah pada platform yang
berbeda. Mengubah properti tata letak "ini" untuk GridBagLayout. Dan
mengubah kendala untuk kedua kontrol, sehingga keduanya memiliki mengisi
horisontal, x-berat 1, jangkar Barat, dan posisi ketinggian grid dan lebar
1. TextControl1 harus memiliki y-posisi 0, dan textFieldControl1 y-posisi
1. Dan setelah mengubah ukuran ini adalah hasilnya:
Gambar 9 UI kacang kami
Akhirnya kita dapat mengatur properti teks
textFieldControl1 ke nilai string kosong, dan properti teks textControl1 pada
teks "Label:".
Acara
Selanjutnya kita menambahkan event kacang kami. Karena kita sudah memiliki TextFieldControl dalam kacang kita dapat menggunakan event actionPerformed dari komponen ini. Setiap kali acara ini disebut, LabelTextFieldControl kami memastikan bahwa acara ini akan ditampilkan kepada dunia luar sebagai acara sendiri. Untuk mencapai hal ini kita harus mendaftarkan kacang sebagai pendengar ke acara actionPerformed dari kelas TextFieldControl. Tapi JBuilder membuatnya sangat mudah bagi kita, untuk melakukan tugas ini.
Selanjutnya kita menambahkan event kacang kami. Karena kita sudah memiliki TextFieldControl dalam kacang kita dapat menggunakan event actionPerformed dari komponen ini. Setiap kali acara ini disebut, LabelTextFieldControl kami memastikan bahwa acara ini akan ditampilkan kepada dunia luar sebagai acara sendiri. Untuk mencapai hal ini kita harus mendaftarkan kacang sebagai pendengar ke acara actionPerformed dari kelas TextFieldControl. Tapi JBuilder membuatnya sangat mudah bagi kita, untuk melakukan tugas ini.
Pergi ke tab Bean, dan pilih halaman Events. Di
sebelah kiri kita bisa melihat jenis kegiatan yang bisa dipecat. Pilih
acara pertama: Aksi. JBuilder sekarang akan menambahkan kode yang sesuai
untuk kacang kami, sehingga acara ini dapat dipecat.
Gambar 10 halaman Events dari tab Bean
Sekarang kita perlu memanggil metode
fireActionPerformed dihasilkan dari dalam event handler dari TextFieldControl
tersebut.
Pergi ke
Designer Visual.
Double-klik
pada TextFieldControl tersebut. Ini akan memasukkan semua kode yang
diperlukan, untuk menangani event actionPerformed dari kontrol ini.
Tambahkan kode berikut metode
textFieldControl1_actionPerformed yang JBuilder dihasilkan:
fireActionPerformed (e);
|
Ini akan menjalankan metode fireActionPerformed, dan
ini pada gilirannya akan memberitahu semua pendengar acara untuk sumber acara.
Menambahkan properti baru
Sekarang kita telah mendefinisikan event sendiri, sekarang saatnya untuk menambahkan beberapa properti untuk kacang ini. Mari kita mulai dengan properti alignment untuk teks label pada kacang ini.
Sekarang kita telah mendefinisikan event sendiri, sekarang saatnya untuk menambahkan beberapa properti untuk kacang ini. Mari kita mulai dengan properti alignment untuk teks label pada kacang ini.
Pergi ke tab Bean, dan pilih halaman Properties.
Mengubah nama properti sampel untuk labelAlignment.
Mengubah jenis properti ke int.
Dan jika kita kembali ke sumber kacang kita, kita bisa
melihat perubahan tercermin dalam kode sumber.
Selanjutnya kita menambahkan properti label
baru. Properti label berisi teks untuk label TextControl
tersebut. Pada halaman properti kita klik pada halaman properti
Tambah. JBuilder menunjukkan dialog berikut:
Gambar 11 Menambahkan properti untuk kacang kami
Di sini kita dapat memberikan informasi tentang
properti dalam dua bagian utama: Properti data dan data BeanInfo. Segala
sesuatu yang kita mengisi di bagian Data Properti akan dihasilkan untuk kode
sumber. Data di bagian data BeanInfo akan digunakan untuk menghasilkan
kelas BeanInfo. Kami mengisi nama label properti. Kami meninggalkan
jenis ke String. Kami juga ingin memiliki pengambil dan metode penyetel
untuk properti ini.Selanjutnya kita dapat menetapkan mengikat properti
ini. Ini berarti kita dapat membuat properti terikat atau dibatasi. JBuilder
kemudian akan memasukkan kode tambahan yang diperlukan untuk menembakkan
peristiwa yang sesuai. Untuk saat ini kita meninggalkan ke none.
Kotak centang Paparan melalui BeanInfo kelas mari kita
memilih jika kita ingin properti ini akan ditampilkan di kelas
BeanInfo. Selanjutnya kita dapat mengisi nama tampilan. Nama ini
digunakan dalam Object Inspector. Gambaran singkat ini digunakan untuk
teks dalam tooltip dari properti di Object Inspector. Dan akhirnya kita
dapat menetapkan editor properti untuk properti ini. Kami meninggalkan ke
default. Klik tombol OK untuk membiarkan JBuilder menghasilkan sumber.
Dan akhirnya kita perlu menerapkan metode yang akan
mencerminkan perubahan dalam sifat-sifat dalam GUI dari kacang. Jadi jika
seseorang mengubah nama label, label akan berubah secara visual dalam
kacang. Kami menciptakan metode updateLabel yang akan dipanggil oleh kedua
metode set. Metode updateLabel akan terlihat seperti ini:
swasta batal updateLabel () {
textControl1.setAlignment (labelAlignment);
textControl1.setText (label);
}
|
Dan di sana kita memilikinya, visual benar-benar
berfungsi Java Bean ditulis dengan kode sangat sedikit.
Pengujian kacang
Pertama-tama kita dapat memeriksa kacang di Wizard BeanInsight. Klik pada menu Wizards dan pilih opsi BeanInsight. Kacang saat ini kami sudah terisi Al harus kita lakukan sekarang adalah klik pada tombol Periksa Bean. Hasilnya ditunjukkan dalam dialog. Untuk lebih detail kita dapat mengklik pada View Detail &ldots; tombol.
Pertama-tama kita dapat memeriksa kacang di Wizard BeanInsight. Klik pada menu Wizards dan pilih opsi BeanInsight. Kacang saat ini kami sudah terisi Al harus kita lakukan sekarang adalah klik pada tombol Periksa Bean. Hasilnya ditunjukkan dalam dialog. Untuk lebih detail kita dapat mengklik pada View Detail &ldots; tombol.
Sekarang kami telah membuat kacang, sekarang saatnya
untuk menguji dan menggunakannya dalam aplikasi sampel. Tapi sebelum kita
membuat aplikasi baru mari kita pastikan kacang tersedia di Palette Komponen
JBuilder. Pastikan kacang LabelTextFieldControl dikompilasi dan kita tahu
di mana untuk menemukan file kelas. Kami sekarang akan menggunakan cara
yang agak cepat dan kotor menambahkan kacang kami ke Palette Komponen.Kami akan
melihat cara yang lebih canggih menyebarkan biji kita di kemudian hari.
Pertama buka dialog properti dari Palette Komponen
dengan mengklik kanan pada palet dan memilih Properties ... option dari
menu popup. Ini akan membuka dialog Properties:
Gambar 12 properti Palette
Kita bisa melihat tiga tab bernama Pages, Tambah dari
Arsip dan Tambah dari Paket. Tab Pages menunjukkan semua tab yang tersedia
pada Palette Komponen. Kita dapat menambahkan tab baru dan menambahkan
komponen itu, atau menambahkan komponen ke tab yang ada. Kami akan
menambahkan tab baru untuk mengembangkan diri kami kacang. Klik Tambah .. tombol. Sebuah
dialog akan muncul menanyakan untuk nama halaman baru. Ketik Beans saya
untuk nama halaman dan klik tombol OK. Sekarang kita perlu menambahkan
kacang LabelTextFieldControl kami ke halaman ini.
Pilih Tambah dari tab Package. Di sini kita bisa
pergi ke folder yang berisi file kelas kacang dan kacang menginstal ke
palet. Klik Browse ... tombol dan pilih folder di mana file kelas
kacang yang. Folder myclasses dalam folder JBuilder mungkin di mana kita
harus melihat. JBuilder akan ditampilkan dalam kotak daftar besar semua
biji dapat ditemukan. Pilih kacang BeanExpress.LabelTextFieldControl dan
pilih tombol Install. Dan kita selesai. Klik OK untuk menutup dialog.
Jika kita melihat pada Palette Komponen kita dapat
melihat tab baru telah ditambahkan bernama Beans saya, dan pada tab ini adalah
ikon tunggal, menunjukkan kacang kami. Jika kita menggerakkan mouse kita
di atasnya, JBuilder akan menampilkan nama kacang di tooltip:
borcon98.LabelTextFieldControl. Kita sekarang bisa drop kacang dari
Palette ke bingkai baru.
Membuat aplikasi baru dengan Wizard Aplikasi Baru
JBuilder. Pergi ke modus desain kerangka aplikasi ini dan menambahkan
LabelTextFieldControl ke frame. Pilih kontrol dan melihat Object Inspector
untuk kontrol ini. Kita bisa melihat dua hal. Pertama, Object
Inspector menunjukkan sifat yang jauh lebih dari yang kita telah ditambahkan ke
komponen ini dan kedua, kita melihat label kita sendiri properti, dan
labelAlignment dalam daftar properti.Mengapa Object Inspector menunjukkan sifat
lebih daripada kita menambahkan? Itu karena kita telah subclassed
BeanPanel untuk menciptakan kacang kami dan semua properti milik kelas
BeanPanel. Dan kacang kami mewarisi semua properti.
Sekarang melihat tab peristiwa Object
Inspector. Di bagian atas kita dapat melihat ActionEvent kami,
actionPerformed. Peristiwa lain semuanya diwariskan dari kelas
BeanPanel. Bermain dengan sifat yang berbeda dan peristiwa untuk melihat
bahwa kacang kami memiliki perilaku yang sama di IDE JBuilder seperti halnya
kacang lainnya.
Menyebarkan
Seperti yang saya sebutkan sebelumnya, kami menggunakan cara cepat dan kotor untuk menambahkan kacang kami ke Palette Komponen. Jika kita ingin mendistribusikan kacang kami kepada orang lain, sehingga mereka dapat menggunakannya, kita perlu untuk berkemas kacang kami dalam file JAR. Sebuah file JAR adalah Java arsip file dan dapat berisi banyak kelas dan file tambahan. Untungnya JBuilder dilengkapi dengan Deployment Wizard berguna yang membuat hidup mudah ketika datang untuk menyebarkan aplikasi, applet atau kacang.
Seperti yang saya sebutkan sebelumnya, kami menggunakan cara cepat dan kotor untuk menambahkan kacang kami ke Palette Komponen. Jika kita ingin mendistribusikan kacang kami kepada orang lain, sehingga mereka dapat menggunakannya, kita perlu untuk berkemas kacang kami dalam file JAR. Sebuah file JAR adalah Java arsip file dan dapat berisi banyak kelas dan file tambahan. Untungnya JBuilder dilengkapi dengan Deployment Wizard berguna yang membuat hidup mudah ketika datang untuk menyebarkan aplikasi, applet atau kacang.
Pilih Deployment Wizard dari menu Wizard. Ini
akan membuka dialog dengan beberapa pilihan.
Gambar 13 Deployment Wizard
Di sebelah kiri kita bisa melihat daftar file yang
dapat diarsipkan dalam file JAR. Pastikan kita hanya pilih file
LabelTextFieldControl.java dari daftar.Jika kita ingin mendistribusikan kacang
kami untuk seseorang yang tidak punya JBuilder, namun menggunakan Java IDE
lain, kita perlu memeriksa kedua Sertakan JBCL dan Sertakan kotak centang JGL
di groupbox dependensi. Biarkan pilihan dalam kelompok Pengiriman Options
berubah. Dan akhirnya mengubah nama dari Jalan Keluaran Arsip untuk nama
yang lebih tepat seperti LabelTextFieldControl.jar. Klik pada tombol
Finish untuk membiarkan JBuilder menghasilkan file JAR yang tepat.
Sekarang kita memiliki file JAR dengan kelas kacang di
dalamnya kita dapat menggunakan cara lain untuk menambahkannya ke Palette
Komponen.Buka dialog Properties dari Palette Komponen lagi. Dan bukannya
memilih Tambah dari tab Paket seperti yang kita lakukan sebelumnya, sekarang
kita pilih Tambah dari tab Arsip. Pilih file JAR yang baru saja kita buat
dan menginstalnya pada tab palet saya Beans.
Kita bisa menambahkan komponen dengan cara yang sama untuk aplikasi uji kami dan itu akan bekerja.
Kita bisa menambahkan komponen dengan cara yang sama untuk aplikasi uji kami dan itu akan bekerja.
Menambahkan acara baru
Katakanlah kita telah bekerja dengan komponen ini untuk berhenti sementara sekarang. Dan kami ingin menambahkan acara baru untuk itu, karena kita tampaknya membutuhkannya. Misalnya suatu peristiwa yang akan dipecat ketika nilai perubahan label, LabelChangedEvent a. Kita dapat mencapai fungsi ini tentu saja dengan membuat properti label terikat. Tapi di sini kita menggunakan event terpisah. Kita telah melihat sebelumnya, bahwa untuk mencapai hal ini kita perlu subclass kelas EventObject dan menciptakan sebuah antarmuka EventListener. BeansExpress JBuilder yang datang dengan Wizard set acara baru yang akan melakukan sebagian besar pekerjaan (jika tidak semua).
Katakanlah kita telah bekerja dengan komponen ini untuk berhenti sementara sekarang. Dan kami ingin menambahkan acara baru untuk itu, karena kita tampaknya membutuhkannya. Misalnya suatu peristiwa yang akan dipecat ketika nilai perubahan label, LabelChangedEvent a. Kita dapat mencapai fungsi ini tentu saja dengan membuat properti label terikat. Tapi di sini kita menggunakan event terpisah. Kita telah melihat sebelumnya, bahwa untuk mencapai hal ini kita perlu subclass kelas EventObject dan menciptakan sebuah antarmuka EventListener. BeansExpress JBuilder yang datang dengan Wizard set acara baru yang akan melakukan sebagian besar pekerjaan (jika tidak semua).
Pergi ke tab Bean dan pilih tab Events. Pada
bagian atas layar kita melihat tombol bernama Buat acara Kustom &ldots;
Klik pada tombol ini. Kita sekarang melihat dialog berikut:
Gambar 14 Menambahkan satu set acara baru untuk kacang kami
Kami ingin membuat LabelChangedEvent, jadi kita
mengisi LabelChanged dalam Nama set acara field input baru. Nama objek
Event dan bidang acara pendengar tidak dapat disesuaikan, tetapi berubah sesuai
dengan nama kita ketik masuk
Di bagian bawah dialog ini kita dapat menambah dan
menghapus peristiwa. Apa yang kita mengisi di sini adalah nama-nama metode
yang akan dideklarasikan pada antarmuka EventListener, dan karena itu perlu
dilaksanakan oleh setiap pendengar acara ini. Lepaskan acara dataChanged,
dan menambahkan dua peristiwa bernama kosong dan sebaliknya. Jika properti
label kosong, metode kosong akan disebut, dan jika label tidak kosong metode
lain akan dipanggil.
Klik pada tombol OK. JBuilder sekarang tidak
banyak pekerjaan di belakang layar. Dan ketika JBuilder selesai kita
perhatikan penambahan dua sumber file tambahan Java dalam proyek kami:
LabelChangedEvent.java dan LabelChangedListener.java. Tapi sebelum kita
melihat pada file-file sumber, kita harus terlebih dahulu memeriksa kotak
centang untuk LabelChangedEvent dalam daftar acara. Sekarang JBuilder akan
menambah pendengar yang tepat dan kode lainnya:
publik
disinkronisasi batal removeLabelChangedListener (LabelChangedListener l) {
jika
(labelChangedListeners =! nol && labelChangedListeners.contains (l))
{
Vektor v
= (Vector) labelChangedListeners.clone ();
v.removeElement (l);
labelChangedListeners = v;
}
}
publik
disinkronisasi batal addLabelChangedListener (LabelChangedListener l) {
Vektor v =
labelChangedListeners == nol ? baru Vector (2): (Vector)
labelChangedListeners.clone ();
jika (!
v.contains (l)) {
v.addElement (l);
labelChangedListeners = v;
}
}
dilindungi batal fireEmpty
(LabelChangedEvent e) {
jika
(labelChangedListeners =! nol ) {
Vektor
pendengar = labelChangedListeners;
int
count = listeners.size ();
untuk ( int i = 0; i <count; i + +)
((LabelChangedListener) listeners.elementAt (i)) kosong (e).;
}
}
dilindungi batal fireOtherwise
(LabelChangedEvent e) {
jika
(labelChangedListeners =! nol ) {
Vektor
pendengar = labelChangedListeners;
int
count = listeners.size ();
untuk (
int i = 0; i <count; i + +)
((LabelChangedListener) listeners.elementAt (i)) jika (e).;
}
}
|
Kami melihat penampilan add dan menghapus metode
pendengar. Dan dua tambahan metode: fireEmpty dan
fireOtherwise. Masing-masing bertanggung jawab untuk mengirimkan acara
sesuai dengan pendengar terdaftar dan memanggil metode yang tepat.
Sekarang lihatlah masing-masing perpanjangan dari kelas EventObject dan kelas EventListener. Apa perbedaan dengan usaha pertama kami dengan peristiwa, ketika kita kode semua ini dengan tangan. Ketika kita melihat lebih dekat di kelas LabelChangedEvent, kita melihat bahwa itu sangat dasar.Ini hanya memperpanjang EventObject dan menyediakan konstruktor. Untuk memberikan makna lebih untuk acara ini baru, kami menambahkan beberapa kode. Kode ini akan memberikan acara negara. Kami menambahkan properti id yang akan berisi nilai untuk menunjukkan string kosong atau non-string kosong. Jadi kita dapat membedakan antara dua pilihan. Kode ini perlu ditambahkan:
Sekarang lihatlah masing-masing perpanjangan dari kelas EventObject dan kelas EventListener. Apa perbedaan dengan usaha pertama kami dengan peristiwa, ketika kita kode semua ini dengan tangan. Ketika kita melihat lebih dekat di kelas LabelChangedEvent, kita melihat bahwa itu sangat dasar.Ini hanya memperpanjang EventObject dan menyediakan konstruktor. Untuk memberikan makna lebih untuk acara ini baru, kami menambahkan beberapa kode. Kode ini akan memberikan acara negara. Kami menambahkan properti id yang akan berisi nilai untuk menunjukkan string kosong atau non-string kosong. Jadi kita dapat membedakan antara dua pilihan. Kode ini perlu ditambahkan:
/ /
Konstanta untuk menunjukkan negara yang berbeda
/ /
public static
akhir int KOSONG = 0;
public static
akhir int SEBALIKNYA = 1;
/ / Properti
Swasta yang bernama id, mengandung negara
/ /
swasta int id = 0;
/ /
Konstruktor yang akan mengambil id sebagai parameter Baru
/ /
public
LabelChangedEvent (Obyek sumber, int id) {
/ /
Panggil Super konstruktor
/ /
Super
(source);
/ /
Menetapkan parameter id ke properti id
/ /
ini . id =
id;
}
|
Ketika kita membuka file sumber LabelChangedEventListener, kita melihat
deklarasi dari metode yang kosong dan sebaliknya.
Dan akhirnya kita harus menulis beberapa kode yang akan api ini acara baru. Tempat terbaik untuk menambahkan kode ini dalam metode setLabel, karena hanya dalam metode ini akan nilai dari perubahan label. Kita harus menulis rutin yang akan memeriksa apakah label kosong dan jika itu, memanggil metode fireEmpty dengan benda LabelChangedEvent baru yang memiliki id dari LabelChangedEvent.EMPTY. Jika label tidak kosong, kita harus memanggil metode fireOtherwise dengan benda LabelChangedEvent yang memiliki id dari LabelChanged.OTHERWISE. Ini adalah kode yang akan mengurus ini:
Dan akhirnya kita harus menulis beberapa kode yang akan api ini acara baru. Tempat terbaik untuk menambahkan kode ini dalam metode setLabel, karena hanya dalam metode ini akan nilai dari perubahan label. Kita harus menulis rutin yang akan memeriksa apakah label kosong dan jika itu, memanggil metode fireEmpty dengan benda LabelChangedEvent baru yang memiliki id dari LabelChangedEvent.EMPTY. Jika label tidak kosong, kita harus memanggil metode fireOtherwise dengan benda LabelChangedEvent yang memiliki id dari LabelChanged.OTHERWISE. Ini adalah kode yang akan mengurus ini:
jika
(label.equals (""))
fireEmpty
( new LabelChangedEvent ( ini , LabelChangedEvent.EMPTY));
yang lain
fireOtherwise ( new LabelChangedEvent ( ini ,
LabelChangedEvent.OTHERWISE));
|
Kami mampu untuk bereksperimen dan menggunakan acara
ini dalam aplikasi pengujian kami.
BeanInfo
Seperti dijelaskan sebelumnya JBuilder menemukan sifat, metode dan peristiwa kacang melalui introspeksi berdasarkan API JavaBeans. Jika kita ingin memberikan informasi lebih lanjut tentang kacang, atau ingin memperbaiki informasi yang tersedia melalui introspeksi, kita harus mendefinisikan sebuah kelas yang mengimplementasikan antarmuka BeanInfo. Sebuah kelas BeanInfo biasanya subclass kelas SimpleBeanInfo, yang merupakan implementasi no-op dari antarmuka BeanInfo. Ketika kita ingin mengganti hanya satu atau dua metode dalam antarmuka BeanInfo lebih mudah untuk SimpleBeanInfo subclass kemudian menerapkan BeanInfo secara langsung. Agar JBuilder dapat menemukan kelas BeanInfo sesuai dengan kacang, ada konvensi penamaan yang harus diikuti: kelas BeanInfo harus memiliki nama yang sama dengan kacang dengan BeanInfo string yang ditambahkan.
Seperti dijelaskan sebelumnya JBuilder menemukan sifat, metode dan peristiwa kacang melalui introspeksi berdasarkan API JavaBeans. Jika kita ingin memberikan informasi lebih lanjut tentang kacang, atau ingin memperbaiki informasi yang tersedia melalui introspeksi, kita harus mendefinisikan sebuah kelas yang mengimplementasikan antarmuka BeanInfo. Sebuah kelas BeanInfo biasanya subclass kelas SimpleBeanInfo, yang merupakan implementasi no-op dari antarmuka BeanInfo. Ketika kita ingin mengganti hanya satu atau dua metode dalam antarmuka BeanInfo lebih mudah untuk SimpleBeanInfo subclass kemudian menerapkan BeanInfo secara langsung. Agar JBuilder dapat menemukan kelas BeanInfo sesuai dengan kacang, ada konvensi penamaan yang harus diikuti: kelas BeanInfo harus memiliki nama yang sama dengan kacang dengan BeanInfo string yang ditambahkan.
Sebuah kelas BeanInfo menentukan sejumlah potongan
informasi untuk kacang kami:
Ikon yang mewakili kacang.
Sebuah objek BeanDescriptor yang berisi referensi ke
kelas Customizer untuk kacang. Customizers akan dijelaskan nanti.
Sebuah daftar properti didukung dari kacang, bersama
dengan penjelasan singkat dari properti. Deskripsi ini akan digunakan oleh
JBuilder sebagai tool tips di Object Inspector.
Penyebutan kelas editor properti. Properti editor
akan dijelaskan nanti.
Sebuah daftar metode didukung oleh kacang, lagi dengan
deskripsi singkat dari masing-masing.
Aturan prioritas adalah bahwa kelas BeanInfo akan
digunakan sebelum mekanisme introspeksi ikut bermain. Jadi dengan menambahkan
kelas BeanInfo untuk kacang kita, kita bahkan dapat menyembunyikan sifat kita
tidak ingin ditampilkan dalam Object Inspector, yang lain akan selalu
ditampilkan.
Tapi kita tidak harus menulis informasi ini diri kita
sendiri, kita membiarkan JBuilder melakukan tugas ini. Jika kita pergi ke
halaman BeanInfo pada tab Bean, kita mendapatkan layar berikut:
Gambar 15 BeanInfo halaman tab Bean
Di bagian atas kita melihat tombol Generate Info
Bean. Dengan mengklik tombol ini kelas BeanInfo akan dihasilkan bagi
kita. Sebelah tombol kotak centang Paparan BeanInfo superclass. Jika
kita memeriksa checkbox ini, kacang informasi yang terkandung di kelas BeanInfo
kelas induk kami, akan dimasukkan dalam kelas BeanInfo. Jadi jika kita
memeriksa pilihan ini, semua properti terpapar melalui kelas BeanInfo dari
BeanPanel juga akan terkena melalui kelas BeanInfo kami. Kami meninggalkan
opsi ini dicentang.
Selanjutnya ada daftar properti kita menambah kacang
kami: label dan labelAlignment. Untuk setiap properti kita dapat memilih
untuk mengekspos melalui BeanInfo atau tidak. Kami dapat menyediakan nama
tampilan untuk properti. Nama ini akan digunakan oleh Object
Inspector. Hal ini cukup berguna untuk masalah internasionalisasi. Di
sini kita dapat mendefinisikan nama, yang akan menggantikan dengan yang
spesifik lokal, jika ada. Nilai kita mengisi di deskripsi singkat akan
ditampilkan dalam tooltip dalam Object Inspector. Jika kita membawa mouse
kami selama nama properti tooltip akan ditampilkan, dan itu akan berisi nilai
dimasukkan di sini. Dan akhirnya kita dapat menetapkan Editor Properti ke
properti.
Di bagian bawah layar, kita dapat menetapkan gambar
untuk ikon. Ikon ini akan digunakan oleh JBuilder untuk ditampilkan di
Palette Komponen. Kita dapat memilih ikon yang ada, atau membangun
sendiri. Kita harus pastikan untuk menyertakan gambar icon dalam file JAR
ketika kita menyebarkan Bean Jawa.
Sekarang kita bisa klik pada tombol Info Bean
Hasilkan. Sebuah sumber file BeanInfo ditambahkan ke proyek. Dan
ketika kita melihat dengan BeanInsight kita bisa lihat misalnya ikon.
Kegigihan
Ketekunan adalah kemampuan kacang untuk menyelamatkan dirinya sendiri. Hal ini dicapai dengan mengimplementasikan antarmuka serialisasi.Interface ini berisi dua metode: writeObject dan readObject. Ketika kita menerapkan antarmuka ini, kita harus memberikan kode untuk kedua metode.Tetapi sebagian besar waktu, kita tidak perlu, karena kelas kita mewarisi dari, sudah serializable. Dan ini berlangsung juga untuk BeanPanel, kami berasal dari membangun kacang kami.
Ketekunan adalah kemampuan kacang untuk menyelamatkan dirinya sendiri. Hal ini dicapai dengan mengimplementasikan antarmuka serialisasi.Interface ini berisi dua metode: writeObject dan readObject. Ketika kita menerapkan antarmuka ini, kita harus memberikan kode untuk kedua metode.Tetapi sebagian besar waktu, kita tidak perlu, karena kelas kita mewarisi dari, sudah serializable. Dan ini berlangsung juga untuk BeanPanel, kami berasal dari membangun kacang kami.
Jika hal ini tidak terjadi, kita selalu dapat
memeriksa kotak centang Serialisasi Dukungan pada halaman tab Umum
Bean. Ini akan mengimplementasikan antarmuka dan menambahkan dua metode
writeObject kosong dan readObject.
Editor properti
Kita telah berbicara tentang editor properti, tapi kami tidak membuat satu. Jadi waktunya telah datang untuk menyelam ke dalam subjek editor properti. Kita tahu bahwa dengan menetapkan editor properti untuk properti, nilai properti dapat diubah dengan bantuan editor properti. The borland JBCL kacang mengandung banyak properti dengan editor milik mereka sendiri. Misalnya untuk mencari file di sistem kami, atau untuk memilih warna untuk label. Sebuah editor properti dapat menjadi sederhana sebagai field input, tetapi juga bisa menjadi combobox atau jendela dialog yang terpisah.
Kita telah berbicara tentang editor properti, tapi kami tidak membuat satu. Jadi waktunya telah datang untuk menyelam ke dalam subjek editor properti. Kita tahu bahwa dengan menetapkan editor properti untuk properti, nilai properti dapat diubah dengan bantuan editor properti. The borland JBCL kacang mengandung banyak properti dengan editor milik mereka sendiri. Misalnya untuk mencari file di sistem kami, atau untuk memilih warna untuk label. Sebuah editor properti dapat menjadi sederhana sebagai field input, tetapi juga bisa menjadi combobox atau jendela dialog yang terpisah.
Kita dapat menggunakan editor properti untuk properti
kita juga. Dengan menggunakan editor properti yang tepat sudah
didefinisikan oleh JBuilder atau dengan membangun editor properti kita sendiri. Untuk
memastikan Object Inspector tahu mana editor properti untuk menunjukkan selama
waktu desain, kita dapat mendefinisikan editor di kelas BeanInfo dari kacang
tertentu pada halaman BeanInfo.
Mari kita mencoba untuk menambahkan editor properti
untuk kacang kami. Properti labelAlignment adalah calon yang baik untuk
editor properti sendiri. Dan kami sedang beruntung, karena JBuilder sudah
didefinisikan editor properti untuk mengubah nilai penyelarasan label kami,
borland.jbcl.editors.AlignmentEditor. Bahkan paket borland.jbcl.editors
mengandung banyak editor properti bisa kita gunakan. Untuk menetapkan
editor ini ke properti labelAlignment kami pertama-tama kita harus pergi ke
halaman Property Editor pada tab Bean, dan pilih Editor Properti Impor ..tombol. Dalam
dialog kita dapat mengetikkan nama dari satu kelas atau pencarian dengan
mengklik tombol dengan tiga titik. Dengan mengklik OK editor akan
ditampilkan dalam daftar. Setelah itu dalam daftar, kita dapat menetapkan
ke properti labelAlignment pada halaman BeanInfo.
Nah itu tidak terlalu sulit. Kita dapat menyebarkan kacang lagi dan
melihat dalam aplikasi pengujian kami bagaimana ternyata.
Namun selain menggunakan editor properti yang sudah ada, kita ingin menggunakan kita sendiri. Mari kita membuat editor properti untuk kacang kami. Ini editor properti menunjukkan combobox string, dari mana pengguna dapat memilih. String terpilih akan ditampilkan di bagian textfield kacang kami.
Namun selain menggunakan editor properti yang sudah ada, kita ingin menggunakan kita sendiri. Mari kita membuat editor properti untuk kacang kami. Ini editor properti menunjukkan combobox string, dari mana pengguna dapat memilih. String terpilih akan ditampilkan di bagian textfield kacang kami.
Jadi mari kita kembali ke halaman Property Editor dan
pilih Editor Membuat Custom .. tombol. JBuilder menunjukkan dialog
berikut:
Gambar 16 Menambah / membuat kelas properti editor baru
Kami dapat menyediakan nama editor. Nama editor
harus sama dengan nama properti memang ditujukan untuk, dengan kata Editor
ditambahkan. Jadi untuk kami (belum membuat properti teks), kita akan
mengisi sebagai TextEditor nama.
Kolom berikutnya memberi kita pilihan jenis
editor. Ada empat pilihan:
Daftar string; Daftar String adalah daftar
string. Daftar ini ditampilkan dalam Object Inspector sebagai daftar
drop-down dengan string tertentu. Nilai properti akan ditetapkan sesuai
dengan pilihan pengguna.
String Tag List, juga daftar string. Nilai
ditampilkan dalam Object Inspector tidak sama adalah nilai yang akan ditetapkan
untuk properti.JBuilder menggunakan string inisialisasi Java untuk mengatur
nilai properti.
Tag Integer Daftar; editor ini dapat digunakan untuk
mengatur properti integer. Object Inspector akan menampilkan daftar
string. Ini akan dikonversi ke nilai integer. The AlignmentEditor
kita gunakan adalah contoh dari Editor Daftar Tag Integer.
Editor kustom, kita bisa menggunakan komponen editor kita sendiri. Jadi jika kita tidak ingin menggunakan salah satu editor JBuilder menawarkan kita, kita masih bisa menulis Editor kita sendiri dan menggunakannya.
Kacang kami akan menggunakan Editor Daftar String,
jadi kita pilihan opsi ini dari daftar. Pada bagian rinci kita dapat
menambah dan menghapus entri. Entri tersebut akan ditampilkan dalam Object
Inspector. Tambahkan beberapa entri string, tidak peduli apa untuk
string. Klik tombol OK dan kita akan melihat TextEditor dalam daftar
editor properti. Sekarang kita harus menambahkan properti teks dan
menetapkan TextEditor untuk itu. Hal ini dapat dilakukan pada halaman
Properties. Kita telah melihat ini sebelumnya, jadi kita tidak perlu
penjelasan lagi. Kita tidak boleh lupa untuk menambahkan baris kode
berikut ke metode setText:
textFieldControl1.setText (teks);
|
Atau kalau kacang tidak akan mencerminkan perubahan
dalam nilai properti.
Dan ketika kita menguji kacang lagi, kita akan melihat
properti teks dan TextEditor dalam Object Inspector.
Customizer
Mungkin kami ingin memberikan pengguna kacang kami dengan beberapa cara untuk menyesuaikan sifat-sifat lainnya dari satu pada satu waktu. Kita perlu menulis sebuah kelas yang akan mengimplementasikan antarmuka Customizer. Dengan mendaftar kelas Customizer dengan objek BeanDescriptor dalam kelas BeanInfo, JBuilder harus menyadari Customizer ini. Untuk JBuilder untuk dapat menunjukkan Customizer kelas harus berasal dari kelas Komponen, karena JBuilder akan mencoba untuk menunjukkan Customizer dalam kotak dialog dengan tombol OK Batal en. Dan di sini kita melihat bahwa JBuilder tidak akan menggunakan Object Inspector untuk menunjukkan Customizer tersebut. Karena independensi dari Customizer terkait dengan alat pembangun, keadaan kacang setelah telah disesuaikan, tidak disimpan. Kita perlu serialize kacang untuk menyimpan perubahan yang dilakukan. Ada analogi yang besar untuk editor properti yang disebutkan sebelumnya, tapi bukannya editor untuk setiap properti, kita mendefinisikan editor properti untuk seluruh kelas. Kita bahkan dapat menulis wizard lengkap untuk mengatur properti untuk kacang. Sampai sekarang BeansExpress JBuilder tidak mendukung pengembangan kelas Customizer.
Mungkin kami ingin memberikan pengguna kacang kami dengan beberapa cara untuk menyesuaikan sifat-sifat lainnya dari satu pada satu waktu. Kita perlu menulis sebuah kelas yang akan mengimplementasikan antarmuka Customizer. Dengan mendaftar kelas Customizer dengan objek BeanDescriptor dalam kelas BeanInfo, JBuilder harus menyadari Customizer ini. Untuk JBuilder untuk dapat menunjukkan Customizer kelas harus berasal dari kelas Komponen, karena JBuilder akan mencoba untuk menunjukkan Customizer dalam kotak dialog dengan tombol OK Batal en. Dan di sini kita melihat bahwa JBuilder tidak akan menggunakan Object Inspector untuk menunjukkan Customizer tersebut. Karena independensi dari Customizer terkait dengan alat pembangun, keadaan kacang setelah telah disesuaikan, tidak disimpan. Kita perlu serialize kacang untuk menyimpan perubahan yang dilakukan. Ada analogi yang besar untuk editor properti yang disebutkan sebelumnya, tapi bukannya editor untuk setiap properti, kita mendefinisikan editor properti untuk seluruh kelas. Kita bahkan dapat menulis wizard lengkap untuk mengatur properti untuk kacang. Sampai sekarang BeansExpress JBuilder tidak mendukung pengembangan kelas Customizer.
Namun tidak menghentikan kita. Kami membangun
Customizer kita sendiri. Nama Customizer harus nama kacang itu akan
menyesuaikan, ditambahkan dengan kata Customizer. Jadi Customizer kami
akan diberi nama LabelTextFieldControlCustomizer.
Pilih File | New, dan pilih Panel dari dialog
New. Isi LabelTextFieldControlCustomizer nama ke kolom nama. Kita
peroleh JPanel panel formulir kami.Dengan mengklik OK, JBuilder akan
menghasilkan kode sumber. Kami pergi ke Designer Layar dan menambahkan dua
textfield, tombol, dan dua groupboxes, sampai layar kami terlihat seperti ini:
Gambar 17 UI untuk kelas Customizer
Kedua textfield mewakili nilai dari sifat label dan
teks dari kelas kacang.
Selanjutnya kita harus mengimplementasikan interface
Customizer. Kami menggunakan Wizard Antarmuka dalam menu Wizard untuk
tugas ini. JBuilder otomatis akan memasukkan metode yang perlu ditulis.
Ketika kita melihat pada sumbernya kita dapat melihat
metode setObject, bahwa kita harus menulis. Tapi tidak addPropertyChangeListener
atau metode removePropertyChangeListener, karena JPanel mewarisi metode-metode
dari JComponent. Metode ini akan mengatur kacang yang Customizer ini
digunakan untuk. Jadi kita menambahkan anggota bernama kacang untuk
Customizer kami dan menulis metode setObject:
LabelTextFieldControl kacang,
public batal setObject (Object bean) {
ini
kacang = (LabelTextFieldControl) kacang.;
jText.setText ( ini bean.getText ().);
jLabel.setText ( ini bean.getLabel ().);
}
|
Dalam metode ini kita akan terhubung ke kacang, dan
menggunakan nilai dari properti label dan teks untuk mengatur textfield di
kelas Customizer kami.
Ketika pengguna mengklik tombol Apply perubahan,
Customizer harus mengatur properti label dan teks dari kacang. Setelah
pengaturan properti ini PropertyChangedEvent yang harus dipecat karena setiap
properti. Kode untuk menangani ini adalah dalam metode
applyButton_actionPerformed didefinisikan:
membatalkan
applyButton_actionPerformed (e ActionEvent) {
String
t_oldValue = bean.getText ();
String
t_newValue = jText.getText ();
bean.setText (t_newValue);
firePropertyChange ("text", t_oldValue, t_newValue);
String
l_oldValue = bean.getLabel ();
String
l_newValue = jLabel.getText ();
bean.setLabel (l_newValue);
firePropertyChange ("label", l_oldValue, l_newValue);
}
|
Pertama nilai lama dari properti perlu mendapatkan,
maka nilai baru dapat diatur, dan PropertyChangedEvent dapat dipecat, dengan
memanggil metode firePropertyChange dari JComponent. Dan ini selesai
Customizer kami. Tapi sebelum JBuilder tahu itu ada kita perlu menambahkan
beberapa kode ke sumber BeanInfo. Dan karena JBuilder belum mendapat
penyihir yang bagus untuk melakukan hal ini, kita perlu melakukannya dengan tangan.Tapi
untungnya tidak sulit. Kami menambahkan anggota ke kelas BeanInfo, bernama
customizerClass Kelas jenis, dan metode getBeanDescriptor.JBuilder akan
menggunakan metode ini untuk menentukan kelas Customizer untuk kacang
tertentu. Berikut adalah kode:
Kelas customizerClass
= LabelTextFieldControlCustomizer. class ,
public
BeanDescriptor getBeanDescriptor () {
kembali baru BeanDescriptor
(beanClass, customizerClass);
}
|
Ketika kita mengkompilasi segala sesuatu yang kita
bisa melihat BeanInsight untuk kacang kami. Dan kita melihat bahwa
BeanInsight sinyal kehadiran kelas Customizer. Ketika kita pergi ke
aplikasi uji kami, kita bisa pergi ke Designer Layar. Dan mengklik dengan
tombol mouse sebelah kanan, pada kacang kami, menunjukkan menu popup, dengan
nama Customizer pilihan &ldots; Memilih opsi ini akan membuka kelas
Customizer kami. Kita dapat mengubah nilai-nilai untuk label dan teks di
sini dan dengan mengklik tombol Terapkan perubahan, perubahan tercermin dalam
Designer Layar.
Kesimpulan
Dan ini berakhir kami menggunakan BeansExpress dari JBuilder. The BeansExpress, yang terdiri dari penyihir yang berbeda, adalah alat yang sangat berguna untuk membangun Java Beans. Ini mari kita fokus pengembang pada masalah kita ingin menyelesaikan dengan kacang, dan menciptakan buffer ke Java Beans API. Jadi kita bisa berkonsentrasi pada interior kacang, dan bukan pada bagaimana seharusnya untuk menampilkan diri untuk menjadi kacang yang baik.
Dan ini berakhir kami menggunakan BeansExpress dari JBuilder. The BeansExpress, yang terdiri dari penyihir yang berbeda, adalah alat yang sangat berguna untuk membangun Java Beans. Ini mari kita fokus pengembang pada masalah kita ingin menyelesaikan dengan kacang, dan menciptakan buffer ke Java Beans API. Jadi kita bisa berkonsentrasi pada interior kacang, dan bukan pada bagaimana seharusnya untuk menampilkan diri untuk menjadi kacang yang baik.
Karena menggunakan wizard BeansExpress, kode yang
dihasilkan mengikuti konvensi penamaan kerangka Java Beans. Dan karena itu
adalah kacang yang dirancang baik. The penyihir mengurangi jumlah
kesalahan jenis, karena ada kurang untuk mengetik.
Para penyihir BeansExpress difokuskan pada Java Bean
builder, namun JBuilder juga merupakan alat pembangun baik, menggunakan Java
Beans.Dukungan dari serialisasi, properti editor, dan customizers dalam IDE
luar biasa.
Enterprise Java Beans
Kacang
yang telah kita lihat sejauh ini semua "pengguna" kacang
tertentu. Lingkungan di mana kacang dijalankan, adalah ketika pengguna
menggunakan aplikasi yang berisi kacang. Sebagian besar waktu yang ada di
satu komputer. Pada bulan Desember 1997 JavaSoft merilis Enterprise
JavaBeans (EJB) spesifikasi. Spesifikasi EJB mendefinisikan sebuah model
server komponen untuk JavaBeans. Sebuah Enterprise Java Bean adalah
non-terlihat dan berjalan pada server. Sebuah EJB dapat dimanipulasi
dengan cara yang sama dalam alat pembangun, kacang-kacangan dapat membuat
beberapa aplikasi. Bagian ini akan memperkenalkan Perusahaan Java Beans,
dan kami akan melihat di Enterprise Java Bean penyihir disediakan dalam
JBuilder 2.0.
Sebuah EJB berjalan dalam wadah EJB pada
server. Ini kontainer mengelola semua biji yang berbeda yang
berjalan. Sebagian besar run-time atribut dari sebuah EJB dapat dikelola
dan diatur dengan alat visual.
Kerangka kerja ini mendefinisikan satu set interface
kacang harus mengekspos sehingga dapat digunakan oleh vendor kontainer server
yang berbeda.Nama lain untuk suatu wadah server-side adalah Transaksi Obyek
Monitor (OTM). Secara singkat kita dapat mengatakan bahwa wadah
server-side atau OTM adalah untuk perusahaan kacang, apa aplikasi untuk kacang
"normal".
Apa skenario dari apa yang terjadi dalam kehidupan
nyata? Seorang klien akan mencari wadah EJB dan tersambung ke. Ini
akan memanggil metode create pada EJB dan kacang akan instantiated. Dan
kemudian klien dapat memanggil metode pada EJB. Ini semua sangat mirip
dengan RMI (Method Invocation Remote) dan CORBA (Object Request Broker Architecture
umum).
Sesi dan kacang Badan
Beans dapat berupa persisten (kacang entitas) atau transient (kacang sesi). Ini berarti bahwa sebuah kacang entitas mampu menyelamatkan negara untuk disk, dan beban negara dari disk. Masa pakai sebuah kacang entitas tidak bergantung pada lingkungan. Jika lingkungan turun, kacang bisa menyelamatkan dirinya, transaksi rollback saat ini. Kemudian kita bisa menyambung kembali ke kacang, tanpa kehilangan data. Kacang memiliki ID unik yang pointer ke negara mereka. Melalui kunci unik adalah wadah mampu memuat kembali kacang ke dalam memori.
Beans dapat berupa persisten (kacang entitas) atau transient (kacang sesi). Ini berarti bahwa sebuah kacang entitas mampu menyelamatkan negara untuk disk, dan beban negara dari disk. Masa pakai sebuah kacang entitas tidak bergantung pada lingkungan. Jika lingkungan turun, kacang bisa menyelamatkan dirinya, transaksi rollback saat ini. Kemudian kita bisa menyambung kembali ke kacang, tanpa kehilangan data. Kacang memiliki ID unik yang pointer ke negara mereka. Melalui kunci unik adalah wadah mampu memuat kembali kacang ke dalam memori.
Sebuah kacang sesi memiliki karakteristik sebagai
berikut:
Kacang mengeksekusi atas nama klien tunggal.
Kacang bisa transaksi sadar.
Perbarui data dalam database.
Memiliki biasanya masa klien.
Akan hancur ketika kontainer turun.
Sebuah kacang entitas memiliki karakteristik sebagai
berikut:
Dukungan akses bersama oleh beberapa pengguna.
Kacang berpartisipasi dalam transaksi.
Lifetime dari data dalam database.
Bertahan crash dari wadah EJB.
Memiliki referensi objek terus-menerus.
Sebuah kontainer EJB harus mendukung kacang
sesi. Dukungan untuk kacang entitas adalah opsional, untuk saat
ini. Tapi ketika versi 2.0 EJB tersedia wadah harus mendukung kedua jenis
kacang-kacangan. Dan di sini kita melihat masalah, karena pasokan EJB
kontainer tidak terlalu besar.Ini masih merupakan teknologi yang sangat muda,
dan itu akan memakan waktu, sebelum dunia nyata EJB akan membangun dan
digunakan.
Perusahaan Bean Wizard
JBuilder memberikan kita dengan wizard yang akan menghasilkan template kode sumber untuk EJBs. Jika kita mengaktifkan wizard kita akan mendapatkan dialog berikut:
JBuilder memberikan kita dengan wizard yang akan menghasilkan template kode sumber untuk EJBs. Jika kita mengaktifkan wizard kita akan mendapatkan dialog berikut:
Di sini kita dapat memberikan nama untuk komponen EJB,
ketik nama paket, lalu pilih basis kelas untuk mewarisi bentuk. Dan
akhirnya kita bisa memilih apakah kita ingin JBuilder untuk menghasilkan
Session Bean atau Bean Entity. Kacang Sesi akan mengimplementasikan
antarmuka SessionBean dan kacang Badan akan mengimplementasikan antarmuka
EntityBean. Kode sumber yang dihasilkan berisi semua deklarasi metode
antarmuka, dengan tubuh kosong.
Karena teknologi ini sangat baru dan ketersediaan
kontainer EJB dan server tidak besar, kita hanya meninggalkan ini.
ActiveX dan Java Beans
Pada
awal tutorial, ketika kami melihat komponen teknologi secara umum, kami sengaja
menemukan ActiveX. Dan kita melihat bahwa ActiveX adalah teknologi
komponen Microsoft untuk (terutama) platform Windows. Kita sekarang tahu
bahwa Java Beans adalah platform independen. Jika VM Java tersedia, Bean
Jawa akan bekerja.
Tapi bagaimana kalau kita adalah pengembang komponen,
dan telah membangun keluar banyak kontrol ActiveX. Dan kami ingin beralih
ke kerangka kacang. Haruskah kita membangun semuanya dari awal? Atau
apakah mungkin untuk menggunakan kacang sebagai kontrol ActiveX di alat pembangun
kami, seperti Borland Delphi. Bagian ini akan mengambil cepat melihat
pilihan yang berbeda kita sebagai pengembang punya.
JavaBeans Migrasi Asisten ActiveX
IBM dan Taligent, objek teknologi anak perusahaan berorientasi, dengan dukungan dari JavaSoft, sedang mengembangkan seperangkat konvensi konversi, panduan port dan alat yang akan memungkinkan para pengembang untuk dengan mudah mengkonversi mereka Windows komponen ActiveX ke JavaBeans. Alat migrasi akan membangun kerangka Java source code, dari informasi yang diberikan oleh kontrol ActiveX diinstal. Kita perlu menambahkan fungsi kontrol diri kita sendiri.
IBM dan Taligent, objek teknologi anak perusahaan berorientasi, dengan dukungan dari JavaSoft, sedang mengembangkan seperangkat konvensi konversi, panduan port dan alat yang akan memungkinkan para pengembang untuk dengan mudah mengkonversi mereka Windows komponen ActiveX ke JavaBeans. Alat migrasi akan membangun kerangka Java source code, dari informasi yang diberikan oleh kontrol ActiveX diinstal. Kita perlu menambahkan fungsi kontrol diri kita sendiri.
Alat migrasi memungkinkan kita memilih properti, dan
acara yang akan dihasilkan dalam kode kerangka. Dan ketika kita memiliki
akses ke misalnya C + + kode kontrol, terjemahan ke bahasa Jawa dapat keluar
mudah.
Alat ini dikirimkan dengan Bean Development Kit (BDK)
dari JavaSoft.
JavaBeans Bridge untuk ActiveX
JavaSoft juga memiliki produk yang akan memungkinkan Java Bean untuk bertindak seolah-olah kacang adalah kontrol ActiveX. Dengan cara ini biji dapat digunakan dalam semua kontainer ActiveX, seperti MS Word, Internet Explorer, dan banyak lagi.
Kita dapat menetapkan kacang, dan jembatan akan
menulis pembungkus ActiveX untuk kacang. Dan dengan mendaftarkan wrapper
ini di registri, akan Jawa Bean akan tersedia dalam berbagai aplikasi
Tidak ada komentar:
Posting Komentar