Selasa, 26 Februari 2013

JAVA BEANS



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.
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.
http://www.drbob42.com/gif/image1.gif
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:
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.


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.

/ / 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.
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:
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.
/ / 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.

/ / 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.
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.
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
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.
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.

                       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.

                                           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.
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.
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 :
  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.
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:
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:
  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:
  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:
  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.
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.
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:


Gambar 5 dialog Baru di JBuilder
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:


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.
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.
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.
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.
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.
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.
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).
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:
  / / 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:
    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.
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.
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 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.
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.
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.
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.
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:


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.
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