1. Penanganan acara
Bahkan, nama pemrosesan acara secara alami dipikirkan mekanisme respons pesan di MFC. Sejauh yang saya mengerti, mereka harus dianggap sebagai situasi jeruk selatan dan jeruk utara. Saya menduga bahwa "botol baru" pemrosesan acara di Java harus menjadi respons pesan di MFC.
Apa yang disebut "peristiwa" adalah perubahan seperti kunci keyboard, klik mouse, dll. Yang menyebabkan keadaan tertentu berubah karena tindakan atau apa yang perlu ditanggapi sesuai. Kita dapat membagi acara di Java menjadi beberapa kategori: tombol, mouse, keyboard, jendela, dan acara lainnya.
Model pemrosesan acara
1. Model pemrosesan acara yang diwariskan (JDK1.0)
Di JDK1.0, pemrosesan acara didasarkan pada warisan. Acara dikirim ke komponen terlebih dahulu dan kemudian diperbanyak ke atas di sepanjang tingkat wadah. Peristiwa yang tidak diproses oleh komponen akan secara otomatis terus menyebar ke wadah komponen. --Ini tampaknya konsisten dengan urutan respons peristiwa asli atau mekanisme respons polimorfik dalam MFC, dan mekanisme pemrosesan peristiwa berbasis proxy yang disebutkan kemudian tampaknya konsisten dengan mekanisme panggilan balik MFC.
Metode perawatan khusus
Hubungi metode ACTION () atau Metode HandleEvent () untuk mendapatkan peristiwa yang terjadi ketika program berjalan, dan semua peristiwa yang terjadi dalam komponen ditangani dalam metode ini.
2. Model Pemrosesan Acara Berbasis Agen (JDK1.1)
Dalam model ini, acara dikirim langsung ke komponen yang menghasilkan acara ini.
Untuk setiap komponen, satu atau lebih kelas yang disebut pendengar terdaftar, yang berisi penangan acara yang menerima dan memproses acara ini.
Pendengar adalah kelas yang mengimplementasikan antarmuka pendengar. Acara adalah objek yang dilaporkan hanya untuk pendengar terdaftar. Setiap acara memiliki antarmuka pendengar yang sesuai.
Saat mengklik objek tombol dengan mouse, acara ActionEvent akan dikirim. Acara ActionEvent ini akan diterima dengan metode ActionPerformed () dari semua ActionListener yang terdaftar menggunakan metode addactionListener ().
Fitur model pemrosesan acara berbasis agen ① Acara tidak akan diproses secara tidak terduga. Dalam model hierarkis, suatu peristiwa dapat merambat ke wadah dan diproses pada tingkat yang tidak terduga.
② Dimungkinkan untuk membuat dan menggunakan kelas adaptor untuk mengklasifikasikan tindakan acara.
③ Ini kondusif untuk mendistribusikan pekerjaan ke berbagai kategori.
Fokus pada mempelajari model pemrosesan acara ini
3. Acara
Tiga elemen pemrosesan acara.
(1) Sumber Acara Sumber acara adalah generator suatu acara, seperti tombol, windows dan bidang teks.
(2) Tipe Acara Semua acara di Java dienkapsulasi ke dalam kelas, dan kelas acara ini terkonsentrasi dalam paket Java.awt.event. Semua kelas acara mewarisi metode Awtevent dan metode - getsouce (), yang mengembalikan objek tempat peristiwa terjadi.
(3) Setelah berbagai jenis peristiwa terjadi di acara pendengar, pendengar acara menerima acara tersebut dan memanggil metode pemrosesan acara yang sesuai. Semua pendengar acara sebenarnya adalah antarmuka dalam paket Java.awt.event, memperkenalkan antarmuka java.util.eventlistener. Pendengar jenis acara yang berbeda memiliki metode yang berbeda.
Langkah Pemrosesan Acara ① Program ini menambahkan paket java.awt.event:
Impor java.awt.event;
② Daftarkan pendengar acara untuk objek sumber acara yang diperlukan:
Acara Sumber Object.addxxxListener (XXXListener);
③ Menerapkan metode yang sesuai. Jika antarmuka pendengar berisi banyak metode, Anda perlu menerapkan semua contoh metode: b2.addactionlistener (ini)
4. Acara ADMA (Adaptor)
Beban kerja menerapkan semua metode dari setiap antarmuka pendengar sangat tinggi. Untuk kenyamanan, bahasa Java menyediakan kelas adaptor untuk mengimplementasikan kelas yang berisi banyak metode.
Pendengar yang Anda definisikan dapat mewarisi kelas adaptor dan hanya mengganti metode yang Anda butuhkan.
Misalnya, pendengar yang sesuai dengan peristiwa jendela adalah WindowListener, yang harus mengimplementasikan beberapa metode, termasuk Windowopened (), WindowClosed (), WindowClosing (), Windowiconfied (), Windowdeiconfied (), Windowactivated (), dan WindowDeactivated (), yang meningkatkan beban kerja pemrograman yang tidak perlu.
Jika Anda mewarisi WindowAdapter, Anda hanya perlu menerapkan satu atau beberapa metode, dan Anda tidak perlu menerapkan semua metode. Banyak contoh berikut hanya menerapkan satu metode windowclosing (), dengan tujuan keluar dari sistem saat menutup jendela.
4.1 Penanganan acara tombol
Peristiwa yang terjadi saat mengklik tombol adalah peristiwa tindakan. Kelas acara yang sesuai dengan acara Action adalah kelas ActionEvent. Pendengar acara yang sesuai dengan acara tindakan adalah: ActionListener
Metode utama pendengar:
ActionPerformed (ActionEvent e) Proyek Operasi yang disebut ketika peristiwa tindakan terjadi:
Langkah pertama adalah mendaftarkan Action Event Listener AddactionListener (ActionListener).
Langkah kedua adalah mengimplementasikan metode antarmuka ActionListener: ActionPerformed (ActionEvent e)
4.2 Penanganan Acara Tikus
Sumber acara yang memicu acara mouse biasanya merupakan wadah. Ketika mouse masuk atau meninggalkan wadah, atau mengklik mouse, menyeret mouse, dll. Dalam wadah, acara mouse akan terjadi. Kelas acara yang sesuai dengan acara mouse adalah kelas MouseEvent.
Metode di kelas MouseEvent:
getx () Mendapat koordinat x mouse
gety () mendapatkan koordinat y mouse
getPoint () Mendapat posisi mouse dan acara mouse sesuai dengan dua pendengar acara: MouseListener (atau MouseAdapter) sesuai dengan acara mouse, dan MousemotionListener (atau MousemotionAdapter) sesuai dengan acara gerakan tikus.
Metode utama MouseListener (atau Mouseadapter)
Mousepressed (mouseevent e) Cara menangani tekanan mouse
Mousereleased (mouseevent e) Cara menangani pelepasan mouse
Mouseent, mouseEvent e) cara menangani mouse saat memasuki
MouseExited (MouseEvent e) Bagaimana menangani mouse saat pergi
Mouseclicked (MouseEvent E) Cara menangani klik mouse
Metode utama MousemotionListener (atau MousemotionAdapter)
Mousemoved (mouseevent e) Cara menangani mouse saat bergerak
Mousedraged (MouseEvent E) Cara Menangani Seret Mouse
4.3 Penanganan acara keyboard
Saat menekan atau melepaskan keyboard dalam komponen dengan fokus keyboard, peristiwa keyboard terjadi. Kelas acara yang sesuai dengan acara keyboard adalah kelas KeyEvent
Metode Utama Kelas Keyevent:
getKeyCode () Mendapat kode kunci untuk ditekan atau dilepaskan
getKeyText () Mendapat string tombol yang ditekan atau dirilis. Pendengar acara yang sesuai dengan acara keyboard adalah: KeyListener atau KeyAdapter
Metode utama:
Keypressed (keyevent e) cara menangani saat menekan keyboard
Keyreleased (keyevent e) cara menangani keyboard saat melepaskannya
4.4 Penanganan Acara Jendela
Hanya jika ada jendela dan kelas yang diperluas (bingkai, dialog), dll., Peristiwa jendela dapat dipicu, menunjukkan bahwa jendela berada dalam keadaan aktif/tidak valid, keadaan ikon/non-ikon, atau keadaan terbuka/tutup, dll.
Metode utama:
Windowopened (WindowEvent E) Penanganan acara jendela pembuka
Windowclosed (WindowEvent E) Penanganan acara jendela penutupan
Windowclosing (WindowEvent E) Pemrosesan acara penutupan jendela
Penanganan Acara Status Aktivasi Windowactivated (WindowEvent E)
Penanganan Acara Status Tidak Valid WindowDeactivated (WindowEvent E)
4.5 Penanganan Acara Lainnya
4.5.1 Kelas acara untuk kotak centang dan pemrosesan acara tombol radio adalah ItemEvent:
Pendengar acara yang sesuai dengan acara opsi adalah: ItemListener
metode:
ItemStateChanged (ItemEvent E) dipanggil ketika acara Opsi terjadi 4.5.2 Kelas acara yang sesuai dengan acara penyesuaian pemrosesan acara ScrollBar adalah kelas penyesuaian Event:
Acara pendengar yang sesuai dengan acara penyesuaian adalah: penyetel
metode:
Penyesuaian ValueChanged (Penyesuaian Event E) dipanggil saat peristiwa penyesuaian terjadi
4.5.3 Kelas acara pemrosesan acara dalam daftar drop-down adalah ItemEvent:
Pendengar acara yang sesuai dengan acara opsi adalah: ItemListener
metode:
ItemStatechanged (ItemEvent E) dipanggil saat tindakan terjadi dalam daftar drop-down
(Dapat dilihat bahwa pemrosesan acara dari daftar drop-down sama dengan jenis acara, pendengar dan metode acara, seperti pemrosesan acara dari kotak centang, jenis acara, pendengar acara dan metode pemrosesan acara kotak radio)
4.5.4 Penanganan Acara Menu Acara umumnya merupakan peristiwa yang terjadi ketika kita mengklik item menu.
Ada dua jenis item menu:
Acara Aksi Menuitem
Centang kotak, acara opsi
Langkah pertama dalam pemrosesan acara MenuUtem adalah mendaftarkan Action Event Listener AddactionListener (ActionListener) untuk semua item menu Menuitem.
Langkah kedua adalah mengimplementasikan metode antarmuka ActionListener: ActionPerformed (ActionEvent E). Dalam metode ini, gunakan e.getSource () untuk mendapatkan item menu yang dipilih oleh pengguna dan melakukan pemrosesan yang sesuai.
Langkah pertama dalam penanganan acara dari CheckboxMenuitem adalah mendaftarkan opsi pendengar acara untuk semua item menu checkMenuitem ke addIteMlistener (itemListener).
Langkah kedua adalah mengimplementasikan Metode Antarmuka ItemListener: ItemStateChanged (ItemEvent E). Dalam metode ini, gunakan e.getSource () untuk mendapatkan item menu yang dipilih oleh pengguna, e.getItem () untuk mendapatkan label item menu yang dipilih oleh pengguna, dan e.getStateChange () untuk mendapatkan apakah itu dipilih dan melakukan pemrosesan yang sesuai.
2. Penanganan pengecualian
Tidak ada bahasa pemrograman yang baik atau programmer yang akan mengabaikan penanganan pengecualian. Sebagai bahasa pemrograman yang berorientasi objek yang populer, Java, mekanisme penanganan pengecualian secara alami adalah salah satu fitur penting.
Secara umum, pengecualian digambarkan sebagai: kesalahan dalam pemrograman. Namun, pada kenyataannya, kesalahan ini sangat sering, dengan banyak jenis, seperti: kesalahan kompilasi dan kesalahan operasi (khususnya, ia dibagi menjadi: kesalahan operasi sistem dan kesalahan operasi logis. Kesalahan operasi sistem apa yang jarang dianggap sebagai kesalahan pemrograman, sebelumnya.)
Di Java, pengecualian adalah kelas yang mewarisi dari kelas yang dapat dilemparkan. Setiap kelas pengecualian mewakili kesalahan run (Catatan: Ini adalah kesalahan lari). Kelas pengecualian berisi informasi tentang kesalahan operasi dan metode penanganan kesalahan.
Mekanisme Penanganan Pengecualian Java:
Setiap kali kesalahan berjalan yang dapat diidentifikasi terjadi selama operasi program Java, (yaitu, ketika kesalahan memiliki kelas pengecualian yang sesuai dengan itu), sistem akan menghasilkan objek yang sesuai dari kelas pengecualian (Catatan: disebut menghasilkan objek kelas pengecualian.) Yaitu, pengecualian dihasilkan.
Setelah objek pengecualian dihasilkan, harus ada mekanisme yang sesuai dalam sistem untuk menanganinya untuk memastikan bahwa tidak akan ada crash, loop mati atau kerusakan lain pada sistem operasi, sehingga memastikan keamanan operasi seluruh program.
Kelas Pengecualian dan Pengecualian:
Kesalahan: Dihasilkan dan dilemparkan oleh mesin virtual Java, dan program Java tidak menanganinya.
Pengecualian runtime (kesalahan sistem seperti 0, subskrip array melebihi rentang): terdeteksi oleh sistem, program Java pengguna tidak dapat diproses, dan sistem menyerahkannya ke penangan pengecualian default (Catatan: Ada penanganan pengecualian default).
Pengecualian (masalah dalam program, dapat diprediksi): Kompiler Java mensyaratkan bahwa program Java harus menangkap atau menyatakan semua pengecualian non-runim yang membuat pengguna menghasilkan pengecualian sendiri.
Konstruktor Kelas Pengecualian:
pengecualian publik ();
Pengecualian Publik (String S); Dapat menerima informasi yang dilewati oleh parameter string, yang biasanya merupakan deskripsi kesalahan yang sesuai dengan pengecualian.
Kelas pengecualian juga mewarisi beberapa metode dari bapak yang dapat dilemparkan, di antaranya yang biasa digunakan adalah:
1) string publik tostring ();
Metode ToString () mengembalikan string yang menggambarkan informasi kelas pengecualian saat ini.
2) public void printStackTrace ();
Metode PrintStackTrace () tidak memiliki nilai pengembalian. Fungsinya adalah untuk menyelesaikan operasi pencetakan dan mencetak trek penggunaan tumpukan dari objek pengecualian saat ini pada output standar saat ini (biasanya layar), yaitu, program memanggil objek atau kelas mana yang akan dijalankan, metode mana dari objek pengecualian dihasilkan selama operasi.
Pengecualian Operasi yang Ditentukan Sistem
Beberapa subkelas ini didefinisikan sebelumnya oleh sistem dan termasuk dalam pustaka kelas Java, dan disebut pengecualian operasi yang ditentukan sistem
Pengecualian yang ditentukan pengguna
Untuk kesalahan operasi yang unik untuk aplikasi tertentu, pemrogram perlu membuat kelas pengecualian yang ditentukan pengguna dan objek pengecualian dalam program pengguna sesuai dengan logika khusus program. Pengecualian yang ditentukan pengguna biasanya digunakan sebagai kelas induk dari kelas pengecualian. Namun, ada masalah yang belum dipahami: bagaimana sistem tahu bahwa kesalahan terjadi dan dapat dikenali? Bagaimana cara menghasilkan objek kelas pengecualian yang sesuai? Bagaimana Anda tahu cara menyelesaikan objek kelas pengecualian dengan menggunakan metode yang sesuai? Apakah setiap objek kelas pengecualian yang menangani pengecualian yang sesuai hanya memiliki satu metode penanganan pengecualian? ―6666666666 A ~ ―6666666666666 A / kata ―66666666666 A /6666666666 AITirasan A mendeset
Saat membuat pengecualian yang ditentukan pengguna, tugas-tugas berikut umumnya diperlukan:
1) Deklarasikan kelas pengecualian baru, sehingga mengambil kelas pengecualian atau kelas pengecualian sistem atau pengecualian pengguna lainnya sebagai kelas induk.
2) Tentukan atribut dan metode untuk kelas pengecualian baru, atau membebani atribut dan metode kelas induk sehingga atribut dan metode ini dapat mencerminkan informasi kesalahan yang sesuai dengan kelas.
Pengecualian dilemparkan
Jika program Java menimbulkan kesalahan yang dapat diidentifikasi saat dijalankan, itu akan menghasilkan objek dari kelas pengecualian yang sesuai dengan kesalahan. Proses ini disebut pelemparan pengecualian.
Ini sebenarnya melempar instance dari objek kelas pengecualian yang sesuai.
Bergantung pada kelas pengecualian, ada dua cara untuk melempar pengecualian: pelemparan otomatis sistem dan lemparan pengguna:
1. Sistem akan secara otomatis membuangnya
Pengecualian kesalahan operasi yang ditentukan sistem secara otomatis dilemparkan oleh sistem.
2. Pengguna melempar
Pengecualian yang ditentukan pengguna tidak dapat secara otomatis dilemparkan oleh sistem, tetapi harus dilemparkan oleh pengguna dalam pernyataan Java. Dalam pernyataan Java, pernyataan lemparan digunakan untuk secara eksplisit melempar "pengecualian".
Nama metode tipe return (daftar parameter) dalam daftar lemparan format daftar nama kelas pengecualian untuk dilemparkan {
...
Lemparkan contoh kelas pengecualian; // Catatan di sini ...
}
Melihat:
1) Secara umum, pengecualian dilemparkan ketika kondisi tertentu dipenuhi dalam program;
Sering memasukkan pernyataan lemparan di cabang if pernyataan if,
if (i> 100)
lempar (myException baru ());
2) Untuk metode yang berisi pernyataan lemparan, bagian -bagian berikut harus ditambahkan ke definisi header metode:
melempar daftar nama kelas pengecualian yang akan dilemparkan. Ini terutama untuk menginformasikan metode atas untuk memanggil metode ini, dan bersiap untuk menerima dan menangani pengecualian yang mungkin dilemparkannya selama runtime. Jika ada lebih dari satu pernyataan lemparan dalam metode ini, semua pengecualian yang mungkin harus tercantum dalam lemparan header metode.
3) Bahasa Java mensyaratkan bahwa semua kelas yang dinyatakan dengan kata kunci lemparan dan objek yang dilemparkan dengan lemparan harus dilempar kelas atau subkelasnya. Jika Anda mencoba melempar objek yang tidak dapat dilempar, kompiler Java akan melaporkan pengecualian kesalahan:
Terutama pertimbangkan bagaimana menangkap pengecualian, cara melompat setelah menangkap pengecualian, dan bagaimana menulis pernyataan penanganan pengecualian
1. Coba ... tangkap ... akhirnya blokir
1) Coba
{} Dalam pernyataan coba berisi sepotong kode program yang mungkin melemparkan satu atau lebih pengecualian. Kode -kode ini sebenarnya menentukan kisaran pengecualian yang dapat ditangkap oleh blok tangkapan setelahnya.
Jika pengecualian terjadi ketika program Java mengalami pernyataan di blok percobaan, itu tidak lagi terus menjalankan pernyataan lain di blok coba, tetapi langsung memasuki blok tangkapan untuk menemukan jenis pengecualian pencocokan pertama dan memprosesnya.
2) Tangkap blok
Parameter pernyataan tangkapan mirip dengan definisi metode, termasuk jenis pengecualian dan objek pengecualian.
Jenis pengecualian harus merupakan subkelas dari kelas yang dapat dilempar, yang menentukan jenis pengecualian yang ditangani oleh pernyataan tangkapan;
Objek pengecualian adalah kode metode untuk menangani objek pengecualian di kawat gigi keriting yang dilemparkan oleh sistem runtime Java di blok kode program yang ditentukan oleh coba.
Mungkin ada beberapa pernyataan tangkapan yang menangani berbagai jenis pengecualian secara terpisah.
Sistem Java Runtime mendeteksi jenis pengecualian yang diproses oleh setiap pernyataan tangkapan dari atas ke bawah, sampai menemukan pernyataan tangkapan yang cocok dengan itu.
Di sini, ketik pencocokan berarti bahwa tipe pengecualian dalam tangkapan persis sama dengan jenis objek pengecualian yang dihasilkan atau kelas induk dari objek pengecualian. Oleh karena itu, urutan penyortiran pernyataan tangkapan harus dari khusus ke umum. (Pikirkan tentang mengapa?)
3) Akhirnya blokir
Pernyataan akhirnya dapat dikatakan sebagai mekanisme pembersihan yang disediakan untuk acara penanganan pengecualian. Ini umumnya digunakan untuk menutup file atau melepaskan sumber daya sistem lainnya. Pernyataan mencoba-tangkapan-akhir mungkin memiliki pernyataan dengan bagian akhirnya.
Jika tidak ada bagian akhirnya, ketika kode program yang ditentukan oleh coba melempar pengecualian, kode program lain tidak akan dieksekusi;
Jika ada bagian akhirnya, tidak peduli apakah ada pengecualian di blok coba atau apakah bagian penangkapan telah dieksekusi, pernyataan bagian akhirnya harus dieksekusi.
Dapat dilihat bahwa bagian akhirnya dari pernyataan itu memberikan jalan keluar terpadu untuk penanganan pengecualian.
Beberapa pengecualian dapat menghasilkan beberapa pengecualian yang berbeda, dan jika Anda ingin mengambil metode yang berbeda untuk menangani pengecualian ini, Anda perlu menggunakan mekanisme penanganan multi -pengecualian.
Pemrosesan pengecualian berganda dicapai dengan mendefinisikan beberapa blok tangkapan setelah mencoba blok. Setiap blok tangkapan digunakan untuk menerima dan memproses objek pengecualian tertentu. Melalui parameter blok tangkapan, ini menentukan apakah objek pengecualian harus menjadi pengecualian yang diterima dan diproses oleh blok tangkapan ini.
Blok tangkapan mana yang diperoleh? Menurut pencocokan parameter pengecualian dari objek pengecualian dan blok tangkapan: ketika mereka memenuhi salah satu dari tiga kondisi berikut, objek pengecualian dan parameter dianggap cocok:
1) Objek pengecualian termasuk dalam kelas pengecualian yang sama dengan parameter.
2) Objek pengecualian milik subkelas dari kelas pengecualian parameter.
3) Objek pengecualian mengimplementasikan antarmuka yang ditentukan oleh parameter.
Jika objek pengecualian yang dihasilkan oleh blok coba diterima oleh blok tangkapan pertama, aliran program akan langsung melompat ke blok pernyataan tangkapan ini. Setelah blok pernyataan dieksekusi, metode saat ini akan keluar. Pernyataan yang belum dieksekusi di blok percobaan dan blok tangkapan lainnya akan diabaikan. Jika objek pengecualian yang dihasilkan oleh blok coba tidak cocok dengan blok tangkapan pertama, sistem akan secara otomatis pergi ke blok tangkapan kedua untuk pencocokan. Jika yang kedua masih tidak cocok, itu akan beralih ke yang ketiga, keempat ... sampai blok tangkapan yang dapat menerima objek pengecualian ditemukan, dan prosesnya akan selesai.
Jika objek pengecualian yang dihasilkan oleh blok coba diterima oleh blok tangkapan pertama, aliran program akan langsung melompat ke blok pernyataan tangkapan ini. Setelah blok pernyataan dieksekusi, metode saat ini akan keluar. Pernyataan yang belum dieksekusi di blok percobaan dan blok tangkapan lainnya akan diabaikan. Jika objek pengecualian yang dihasilkan oleh blok coba tidak cocok dengan blok tangkapan pertama, sistem akan secara otomatis pergi ke blok tangkapan kedua untuk pencocokan. Jika yang kedua masih tidak cocok, itu akan beralih ke yang ketiga, keempat ... sampai blok tangkapan yang dapat menerima objek pengecualian ditemukan, dan prosesnya akan selesai.
Jika pelaksanaan semua pernyataan di blok coba tidak meningkatkan pengecualian, semua blok tangkapan akan diabaikan dan tidak dieksekusi.
Melihat:
1) Pernyataan di blok tangkapan harus melakukan operasi yang berbeda sesuai dengan pengecualian yang berbeda, jadi ketika berhadapan dengan beberapa pengecualian, Anda harus memperhatikan dengan cermat merancang urutan pengaturan setiap blok tangkapan. Secara umum, blok tangkapan yang berhubungan dengan pengecualian yang lebih spesifik dan umum harus ditempatkan di depan, sementara blok tangkapan yang dapat cocok dengan beberapa pengecualian harus ditempatkan di belakang.
/*Coba pengguna untuk menjalankan penanganan pengecualian kesalahan: masalahnya adalah ini. Ketika nilai awal dari gaji pengguna yang dimasukkan kurang dari 800, itu salah. Tentu saja, jika perubahan gaji melebihi 20%, itu juga salah*/ impor java.awt.*; impor java.applet.*; impor java.awt.event.*; kelas publik UserExceptionApplet memperluas applet mengimplementasikan ActionListener {label prompt1 = label baru ("Harap masukkan nama karyawan dan nilai awal gaji:"); Label prompt2 = label baru ("Harap masukkan gaji yang akan dimodifikasi"); Nama Textfield, ISAL, NSAL; String msg; Emp karyawan; Tombol okbtn = tombol baru ("ok"); Tombol cancelbtn = tombol baru ("Batalkan"); public void init () {name = new TextField (5); isal = Textfield baru (5); nsal = Textfield baru (5); tambahkan (prompt1); tambahkan (nama); tambahkan (isal); tambahkan (prompt2); Tambah (nsal); tambahkan (okbtn); okbtn.addactionListener (ini); cancelbtn.addactionListener (ini); tambahkan (cancelbtn); } public void cat (grafik g) {g.drawstring (msg, 0,80); } public void createemp (string empname, double SA) {coba {emp = karyawan baru (empname, SA); msg = string baru (emp.toString ()); } catch (IllegalSalaryException adalah) {msg = string baru (ise.toString ()); }} public void changeempsal (perubahan ganda) {coba {emp.setempsalary (perubahan); msg = string baru (emp.toString ()); } catch (IllegalSalaryException illsal) {msg = string baru (illsal.toString ()); } catch (ilegalSalaryChangeException ilsalchange) {msg = string baru (emp.toString ()+ilsalchange.tostring ()); }} public void actionPerformed (actionEvent e) {string empname; emppsal ganda, perubahan; Objek obj = e.getSource (); if (obj == okbtn) {empname = string baru (name.getText ()); if (empname == null) {msg = string baru ("Silakan masukkan nama dan gaji karyawan terlebih dahulu dan buat itu"); } if (nsal.getText () == null) {empsal = double.valueof (isal.getText ()). doublevalue (); Createemp (empname, emppsal); } else {changeal = double.valueof (nsal.getText ()). doubleValue (); Changeempsal (perubahan); }} if (obj == cancelbtn) {naem.setText (""); isal.setText (""); nsal.setText (""); } repaint (); }} kelas karyawan {string m_empname; ganda m_empsalary; Karyawan (nama string, double initial) melempar ilegalSalaryException {m_empname = name; // lihat apakah ada masalah di sini, kode referensi adalah m_empname = string baru (nama); if (initsalary <800) {throw (new ilegalsalaryexception (ini, initsalary)); // lempar pernyataan} m_empsalary = initsalary; } public string getempname () {return m_empname; } getempsalary public double () {return m_empsalary; } public boolean setemppsalary (newsal ganda) melempar ilegalsalaryyexception, ilegalsalaryaryChangeException {if (newsal <800) lempar (baru ilegalsalaryaryexception (ini, newsal)); lain jika (getempsalary () == 0.0) {m_empsalary = newsal; Kembali Benar; } lain jika (math.abs (newsal-getempsalary ())/getemppsalary ()> = 0.2) lempar (IllegalSalaryaryChangeException baru (ini, newsal-getempsalary ())); else {m_empsalary = newsal; Kembali Benar; }} public string toString () {string s; s = "name:"+m_empname+"gaji:"+m_empsalary; kembali S; }} class ilegalSalaryException memperluas pengecualian {karyawan pribadi m_concernedemp; private double m_illegalsalary; IllegalSalaryException (EMP Karyawan, ISAL Ganda) {Super ("Upah lebih rendah dari upah minimum"); m_concernedemp = emp; m_illegalsalary = isal; } public String ToString () {String S; S = "Upah yang diberikan kepada karyawan adalah ilegal: karyawan:"+m_concernedemp.getempName ()+"Gaji ilegal:"+m_illegalsalary+"lebih rendah dari jumlah upah minimum RMB 800"; kembali S; }} kelas ilegalsalaryarychangeException memperluas pengecualian {karyawan pribadi m_concernedemp; private double m_illegalsalarychange; IllegalSalaryChangeException (EMP Karyawan, CSAL ganda) {super ("Perubahan gaji terlalu besar"); m_concernedemp = emp; m_illegalsalarychange = csal; } public String ToString () {String S; s = "Perubahan upah yang diberikan kepada karyawan adalah ilegal: karyawan:"+m_concernedemp.getempName ()+"Perubahan ilegal perubahan upah:"+m_illegalsalarychange+"20% lebih tinggi dari gaji asli"; kembali S; }}