Artikel ini menjelaskan simulasi gerakan planet yang diimplementasikan oleh pemrograman Java. Bagikan untuk referensi Anda, sebagai berikut:
Pemrograman bahasa Java yang telah saya nantikan untuk waktu yang lama juga telah berakhir. Dalam beberapa bulan, saya pada dasarnya telah menguasai penggunaan sederhana Java, mempelajari pengetahuan dasar utama Java, pemikiran yang berorientasi objek, kontrol konkurensi multi-utas, desain antarmuka ayunan, produksi animasi, dll. Akhirnya, saya berencana untuk membuat desain kursus yang dapat mencakup sebanyak mungkin pengetahuan yang dipelajari dan menghubungkannya secara seri. Oleh karena itu, saya telah mempertimbangkan menerapkan perangkat lunak sederhana untuk mensimulasikan gerakan planet. Ide utamanya adalah sebagai berikut:
Animasi digunakan untuk mensimulasikan gerakan planet. Ada planet pusat di panel utama, dan orbit elips ditarik, dan planet yang bergerak bergerak di sekitar planet pusat. Pada saat yang sama, ada empat tombol yang ditetapkan di sudut kanan bawah, yaitu "Mulai", "Jeda", "Accelerate" dan "melambat" yang dapat menyebabkan planet bergerak, berhenti, mempercepat dan melambat masing -masing.
1. Desain Kelas:
Bintang mewarisi dari jpanel. Kelas bintang adalah kelas dasar planet, dan semua planet yang bergerak diwarisi dari kelas bintang. Metode draw () internal terutama menggambar lingkaran padat, dan tujuannya adalah untuk memastikan bahwa planet pusat selalu ditampilkan setiap kali ditarik. Metode catcomponent () menimpa metode menggambar JPanel, yang bertujuan untuk memastikan bahwa objek instance dari kelas bintang yang diwarisi dari kelas bintang dapat menarik planet mereka sendiri. sebagai berikut:
Paket bintang; impor java.awt.color; import java.awt.graphics; import javax.swing.jpanel; bintang kelas publik memperluas jpanel { / *** kelas dasar planet* / swasta static long serialversionuid = 1l; int x, y; Int lebar, tinggi; Public Star () {width = 10; tinggi = 10; } Public Star (int x, int y) {this.x = x; this.y = y; lebar = 10; tinggi = 10; } public void draw (grafik g) {g.setColor (color.blue); g.filloval (x, y, lebar, tinggi); } protected void catcomponent (grafik g) {super.paintComponent (g); g.filloval (x, y, lebar, tinggi); }}Kelas bintang mewarisi dari kelas bintang, yang merupakan penyempurnaan lebih lanjut dari kelas bintang, mewakili planet yang bergerak. Kelas ALFA di bintang -bintang mewakili sudut awal planet yang bergerak, dan kecepatan mewakili kecepatan gerakan, yang dapat dimodifikasi. Panjang dan pendek mewakili sumbu utama dan sumbu minor masing -masing dari lintasan elips. Pusat ini mewakili planet pusat dari objek instantiated -nya. Fungsi cat component () menimpa catcomponent (), secara internal mengacu pada fungsi draw () dari kelas induk, dan menggambar track elips sesuai dengan panjang, pendek, dan panjang dan pendek ditentukan oleh objek instantiasi yang memanggil konstruktor. Fungsi MOVE () menggambarkan persamaan perubahan x dan y, yaitu perubahan di sekitar orbit elips, dan juga menentukan cara alfa berubah. Fungsi start () menunjukkan awal utas, fungsi jeda () menunjukkan jeda utas, fungsi akselerasi () menunjukkan operasi akselerasi di planet ini, dan fungsi perlambatan () menunjukkan operasi pada perlambatan planet.
Tujuan dari kelas pthread adalah untuk mengontrol utas, yaitu gerakan awal, gerakan jeda, mempercepat, dan melambat planet melalui instantiasi kelas pthread. Kelas pthread mewarisi dari kelas utas dan termasuk dalam kelas awal. Oleh karena itu, kelas pthread tidak dapat didefinisikan sebagai kelas umum. Kelas pthread menyediakan metode run (), terus -menerus memanggil metode ulang () untuk mengecat ulang gambar. Metode setSuspend () menggunakan mengubah variabel boolean untuk menjeda thread (hubungi metode notifyall ()). Karena kelas pthread adalah kelas awal awal, objek kelas pthread akan dihasilkan di kelas start dan utas akan dioperasikan menggunakan objek ini.
Desainnya adalah sebagai berikut:
Paket bintang; import java.awt.color; import java.awt.graphics; bintang kelas publik memperluas bintang { / *** Planet pemindahan* / private static final long serialversionuid = 1l; Alfa ganda; kecepatan ganda; Pusat bintang; int panjang; // Darken Axis Int Short; // Bintang Publik Sumbu Pendek (Int PX, Int Py, Star Center) {Super (PX, PY); this.center = center; Long = (px - center.x)*2; Short = (py - center.y)*2; this.setopaque (true)); // move (); alfa = 0; Kecepatan = 0,001; } protected void catcomponent (grafik g) {super.paintComponent (g); center.draw (g); // Gambarlah titik poin tengah (); g.setColor (color.green); G.Drawoval (Center.x-Long/2, Center.y-Short/2, Long, Short); } public void move () {x = center.x + (int) (long/2*math.cos (alfa)); y = center.y + (int) (pendek/2*math.sin (alfa)); // Jalankan Alfa di sepanjang lintasan elips += kecepatan; // Sudut terus -menerus mengubah} kelas pthread memperluas utas {// mengecat ulang class private boolean suspend = true; kontrol string pribadi = ""; public void run () {while (true) {disinkronkan (kontrol) {if (suspend) {// move (); ulang (); }}}} public void setssopend (boolean s) {// atur metode jeda utas jika (! Suspend) {disinkronkan (kontrol) {control.notifyall (); }} this.sUspend = s; }} pthread ptThread pube = new pthread (); public void start () {pt.setsuspend (true); pt.start (); } public void jeda () {pt.setsuspend (false); } public void accelerate () {// Metode Accelerate if (speed> 0) {// sudut akselerasi 0,0002 kecepatan += 0,0002; } else speed = 0,001; } public void Discelerate () {// Metode Diselerate if (speed> 0) {speed -= 0,0002; // Deselerasi pada setiap sudut 0,0002} // Jika kecepatannya melambat menjadi 0, Anda tidak dapat terus melambat. Kecepatannya adalah 0. Gerakan berhenti kecepatan lain = 0; }}Kelas Starframe adalah panel startup dari program ini. Dengan instantiating kelas ini, antarmuka program utama dihasilkan, dan komponen planet, tombol, dan label ditambahkan ke panel. Metode internal getPanel () mengatur dua tombol dan mengembalikan jpanel (menambahkan empat tombol ke dalam jpanel). Metode getLabel () mengembalikan jlabel dengan deskripsi literal. Objek tengah adalah instantiasi kelas bintang, dan P1 adalah instantiasi kelas bintang, masing -masing mewakili planet pusat dan planet yang mengorbit. JB1, JB2, JB3, dan JB4 adalah tombol kontrol untuk memulai, berhenti, mempercepat dan perlambatan planet masing -masing. Gambar mewakili gambar latar belakang antarmuka, dan berlapis -lapis adalah panel hierarkis antarmuka, yang memfasilitasi pengaturan gambar latar belakang. JP, JL adalah komponen yang mengatur gambar latar belakang. Desainnya adalah sebagai berikut:
Paket bintang; import java.awt.borderlayout; impor java.awt.color; import java.awt.font; import java.awt.event.actionevent; import java.awt.event.actickener; import javax.swing.imageicon; impor javax.swing.actionleren; javax.swing.jlabel; import javax.swing.jlayeredpane; import javax.swing.jpanel; kelas publik starframe memperluas jframe { / ***Panel startup simulasi planet* / SerialVersionuid lama final statis pribadi = 1L; Star Center = Bintang Baru (300.200); // Tentukan Planet Center Stars P1 = Bintang Baru (300+230.200+130, tengah); // Planet yang mengelilingi bintang tengah P2 = bintang baru (300+230+20.200+130+20, P1); Jbutton jb1 = jbutton baru ("start"); Jbutton jb2 = jbutton baru ("jeda"); Jbutton jb3 = jbutton baru ("accelerate"); Jbutton jb4 = jbutton baru ("Disselerate"); ImageIcon Image = ImageIcon baru ("Timg.jpg"); // Gambar latar belakang, gunakan jalur relatif untuk mendefinisikan JlayeredPane LayeredPane; // Tentukan panel hierarkis untuk menempatkan gambar latar belakang jpanel jp; Jlabel JL; starframe publik () {// atur posisi untuk p1, dan ukuran p1.setbounds (40.40.600.400); // p2.setbounds (40.40.600.400); // Tentukan gambar latar belakang, tempatkan gambar latar belakang di jlabel, tempatkan jlabel di jpanel layeredpane = new jlayeredpane (); jp = jpanel baru (); jp.setBounds (0,0, image.geticonWidth (), image.geticonHeight ()); jl = jlabel baru (gambar); JP.Add (JL); // Letakkan JP ke lapisan bawah. layeredpane.add (jp, jlayeredpane.default_layer); // Letakkan JB ke lantai pertama LayeredPane.Add (P1, jlayeredpane.modal_layer); // layeredpane.add (p2, jlayeredpane.modal_layer); layeredpane.add (getPanel (), jlayeredpane.modal_layer); layeredpane.add (getLabel (), jlayeredpane.modal_layer); layeredpane.add (getLabel (), jlayeredpane.modal_layer); // Tetapkan tindakan terkait untuk masing-masing JB1, JB2, JB3, dan JB4, JB1.AddactionListener (ActionListener baru () {public void actionPerformed (ActionEvent e) {// TODO Metode yang dihasilkan secara otomatis P1.start ();}}); jb2.addactionListener (ActionListener baru () {public void actionPerformed (actionEvent e) {// todo Metode yang dihasilkan otomatis stub p1.pause ();}); jb3.addactionListener (actionListener () {public void actionPerformed (ActionEvent e) {// TODO Metode yang dihasilkan otomatis Stub P1.accelerate ();}}); jb4.addactionListener (actionListener () {public void actionPerformed (ActionEvent e) {// TODO Metode yang dihasilkan otomatis Stub P1.Decelerate ();}}); this.setlayeredpane (LayeredPane); this.settitle ("star"); this.setbounds (100.100.1000.600); this.setDefaultCloseOperation (jframe.exit_on_close); this.setVisible (true); } private jpanel getPanel () {// kembalikan empat tombol yang ditentukan jpanel jp = new jpanel (); jp.add (jb1); jp.add (jb2); jp.add (jb3); jp.add (jb4); jp.setbounds (750.450.200,70); mengembalikan jp; } private jpanel getLabel () {// kembalikan deskripsi teks jlabel jl = new jlabel ("simulasi planet"); jl.setForeground (color.red); // atur font warna jl.setfont (font baru ("dialog", 0,20)); // atur font jpanel jp = jpanel baru (); jp.add (JL, borderlayout.center); jp.setbounds (800,0,150,40); mengembalikan jp; } public static void main (string [] args) {@suppressWarnings ("tidak digunakan") starframe f = starframe baru (); }}Efek Menjalankan:
2. Objek:
Karena Java adalah bahasa yang berorientasi objek, tentu saja, tidak dapat diimplementasikan oleh fungsi seperti bahasa C. Bagaimana tidak ada objek dalam struktur kursus?
Objek utama:
Pusat Objek, yaitu Planet Tengah
Objek p1, mengorbit planet ini
Objek pt, yaitu objek yang bertanggung jawab untuk mengendalikan utas
Objek F, yaitu Panel Startup Program
3. Hubungan Antara Objek (Interaksi)
Hubungan antara P1 dan tengah: kelas bintang adalah kelas dasar planet ini, diwarisi dari JPanel, dan jari -jari dasar dan koordinat didefinisikan secara internal. Faktanya, pusat objek instantiated adalah pusat planet yang bergerak. Kelas bintang yang diwarisi dari Star mewakili planet yang bergerak, yang merupakan penyempurnaan lebih lanjut. Oleh karena itu, objek Instantiation P1 mewakili planet 1 yang bergerak dan bergerak di sekitar pusat. Pada saat yang sama, pusat dilewatkan sebagai parameter untuk P1 untuk menyelesaikan interaksi antara keduanya. Ini adalah hubungan antara objek P1 dan pusat. Setelah instantiasi pusat objek, lingkaran padat akan ditarik di bawah koordinat yang ditentukan, dan koordinat X dan Y dari objek tengah tidak akan berubah. Atas dasar menggambar lingkaran padat, objek P1 menarik orbit elips dari sumbu utama yang ditentukan dan sumbu minor sesuai dengan koordinat pusat. Pada saat yang sama, ini mengimplementasikan kelas utas secara internal, yang tidak mengganggu utas eksekusi. Hubungan warisan timbal balik memungkinkan pusat dan P1 untuk menggambar grafik tanpa saling mengganggu. Perlu disebutkan bahwa dalam metode PaintComponent () di kelas STRAS, metode draw () dari objek tengah masih perlu dipanggil, karena utas akan memanggil metode ulang ulang () di awal. Jika metode penarikan pusat () tidak diterapkan, hasil akhir tidak akan menunjukkan planet pusat.
Hubungan antara PT dan P1: kelas pthread mewarisi dari kelas utas dan mendefinisikan metode run (). Dengan instantiasi objek P1, metode start () dapat dipanggil untuk memulai utas. Kelas pthread ada di dalam kelas awal, sehingga utas dapat dikontrol melalui metode dalam P1, yaitu, ia dapat mengontrol kecepatannya, mempercepat dan melambat, dan mengontrol apakah berjalan atau tidak.
Hubungan antara F dan masing -masing objek: Starframe mewarisi dari jFrame. Faktanya, objek instantiasi F menambahkan setiap objek ke dalam kanvas, menciptakan antarmuka, dan mengontrol ukuran dan posisi masing -masing komponen, yang merupakan kunci untuk operasi program.
4. Pemahaman yang berorientasi pada objek:
Semuanya adalah objek. Beberapa siswa bertanya kepada saya apa objek itu. Saya menjawab bahwa mereka yang memiliki objek baru, dan objek adalah instantiasi kelas. Dalam program ini, planet yang tak terhitung jumlahnya dapat dibuat dengan membuat kelas Stars Instantiating (secara teoritis, ya). Namun, beberapa masalah dalam implementasi fungsi internal sulit dipecahkan. Hal utama adalah menulis ulang metode cat paintComponent (). Setelah membuat objek lagi, metode ini akan ditulis ulang lagi, sehingga masalah yang tak terhindarkan akan terjadi, yang juga merupakan penyesalan yang tidak dapat diselesaikan!
Untuk lebih banyak konten terkait Java, pembaca yang tertarik dengan situs ini dapat melihat topik: "Pendahuluan dan Tutorial Lanjutan tentang Pemrograman Berorientasi Objek Java", "Tutorial tentang Struktur Data Java dan Algorithma", "Ringkasan Keterampilan Operasi Java Java", "Ringkasan Operasi Java File dan Keterampilan Operasi Direktori" dan Ringkasan Java Operasi Java "," Ringkasan Operasi Java Keterampilan Operasi Direktori "dan" Ringkasan Java Ringkasan JAVA "
Saya harap artikel ini akan membantu pemrograman Java semua orang.