JAVA: Gerakkan objek dalam anak tetingkap sempadan apabila butang ditekan
PHP Editor Xinyi hari ini memperkenalkan anda kepada teknik pengaturcaraan JAVA yang menarik: menggerakkan objek dalam anak tetingkap sempadan apabila menekan butang. Teknik ini boleh menambah beberapa interaktiviti pada antara muka pengguna, membolehkan pengguna mengalihkan objek dengan mengklik butang. Kaedah pelaksanaan fungsi ini agak mudah Anda hanya perlu mendengar acara klik butang dan mengemas kini kedudukan objek dalam kaedah pemprosesan acara. Dengan cara ini, kami boleh memberikan pengguna pengalaman antara muka yang lebih jelas dan menarik. Di bawah ini kami akan memperkenalkan proses pelaksanaan teknik ini secara terperinci.
Kandungan soalan
Saya sedang membuat tugasan kerja rumah di mana saya perlu membuat bulatan dalam anak tetingkap dan mengalihkannya menggunakan butang di bahagian bawah skrin. Saya boleh mendapatkan bulatan dan butang untuk muncul dalam anak tetingkap, tetapi apabila saya menekan butang bulatan itu tidak bergerak.
Kaedah utama saya adalah seperti berikut:
import javafx.application.application; import javafx.event.actionevent; import javafx.event.eventhandler; import javafx.geometry.insets; import javafx.geometry.pos; import javafx.scene.scene; import javafx.scene.control.button; import javafx.scene.layout.borderpane; import javafx.scene.layout.hbox; import javafx.scene.layout.pane; import javafx.scene.paint.color; import javafx.scene.shape.circle; import javafx.stage.stage; public class moveball extends application { @override public void start(stage primarystage) { circle ball = new circle(10); button btup = new button("up"); button btdown = new button("down"); button btleft = new button("left"); button btright = new button("right"); hbox pane = new hbox(); borderpane bpane = new borderpane(); ball.setfill(color.red); ball.setstroke(color.black); pane.setspacing(10); pane.setalignment(pos.center); pane.getchildren().addall(btup, btdown, btleft, btright); bpane.setcenter(ball); bpane.setbottom(pane); btup.setonaction((actionevent e) -> ballcontrol.moveup(ball)); btdown.setonaction((actionevent e) -> ballcontrol.movedown(ball)); btleft.setonaction((actionevent e) -> ballcontrol.moveleft(ball)); btright.setonaction((actionevent e) -> ballcontrol.moveright(ball)); scene scene = new scene(bpane, 400, 400); primarystage.setscene(scene); primarystage.settitle("move the ball"); primarystage.show(); } public static void main (string[] args) { launch(args); } }
Cara sebenar untuk menggerakkan bulatan adalah di sini:
class BallControl{ public static void moveUp(Circle circle){ if(circle.getCenterY() - circle.getRadius() - 10 < 0) return; circle.setCenterY(circle.getCenterY() - 10); } public static void moveDown(Circle circle){ if(circle.getCenterY() + circle.getRadius() + 10 > 400) return; circle.setCenterY(circle.getCenterY() + 10); } public static void moveLeft(Circle circle){ if(circle.getCenterX() - circle.getRadius() - 10 < 0) return; circle.setCenterX(circle.getCenterX() - 10); } public static void moveRight(Circle circle){ if(circle.getCenterX() + circle.getRadius() + 10 > 400) return; circle.setCenterX(circle.getCenterX() + 10); } }
ballcontrol adalah untuk memeriksa sama ada menggerakkan bulatan akan memanjangkannya melepasi sempadan tingkap, dan jika tidak, gerakkannya. Tetapi apabila butang ditekan, bulatan tidak pernah bergerak.
Penyelesaian
borderpane
是一种“布局窗格”,这意味着它将根据自己的算法布局其子节点。特别是,如果该节点可调整大小,并且在其最小、最大和首选大小指定的约束范围内,则 borderpane
将扩展 center
区域中的节点以填充整个区域,然后将其在该区域内居中。 circle
Tidak boleh diubah saiz, jadi ia hanya berpusat di kawasan itu.
Mengubah suai koordinat centerx
和 centery
bulatan tidak akan membantu di sini: sempadan susun atur bulatan ialah segi empat tepat kira-kira 20x20 piksel (memandangkan jejari ialah 10, ini ialah segi empat tepat terkecil yang mengandungi bulatan; "anggaran" di sini adalah kerana lejang mungkin memerlukan ruang tambahan). Segi empat tepat akan mempunyai sistem koordinat yang bermula pada jejari tengah dan memanjang ke tengah+jejari, tetapi kemudian ia akan dipusatkan di kawasan tengah mengikut dasar susun atur anak tetingkap sempadan. Sebenarnya, koordinat pusat bulatan berubah, tetapi koordinat ini hanya dalam sistem koordinat bulatan itu sendiri, bukan sistem koordinat anak tetingkap sempadan.
Satu penyelesaian ialah membalut bulatan dalam pane
biasa yang tidak melaksanakan reka letak dan letakkan pane
di tengah pane
. pane
boleh diubah saiz, jadi borderpane
akan mengubah saiznya kepada saiz penuh kawasan tengah. pane
tidak menyusun bulatan, jadi ia kekal pada koordinat yang ditakrifkan oleh pane
中,并将 pane
放置在 borderpane
的中心。 pane
的大小是可调整的,因此 borderpane
会将其大小调整为中心区域的完整大小。 pane
不会对圆进行布局,因此它保留在 centerx
和 centery
tanpa sebarang reka letak tambahan. (Sebenarnya, anda menjadikan sistem koordinat bulatan sama dengan sistem koordinat anak tetingkap.) Ini ialah penyelesaian yang saya gunakan dalam kod di bawah.
Penyelesaian lain ialah memanipulasi sifat translatex
和 translatey
bulatan. Transformasi ini digunakan selepas reka letak. Walau bagaimanapun, dengan penyelesaian ini, menghalang bulatan daripada meninggalkan sempadan bekasnya menjadi lebih rumit. (Saya tidak menunjukkan penyelesaian ini dalam kod di bawah.)
Lihat dokumentasi susun atur untuk butiran lanjut.
Berikut ialah pengubahsuaian untuk menjadikan ini berfungsi. Ambil perhatian bahawa saya juga mengubah suai cara sempadan dikira supaya ia masih berfungsi walaupun tetingkap diubah saiznya.
package org.jamesd.examples.movingball; import javafx.application.Application; import javafx.event.ActionEvent; import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.BorderPane; import javafx.scene.layout.HBox; import javafx.scene.layout.Pane; import javafx.scene.paint.Color; import javafx.scene.shape.Circle; import javafx.stage.Stage; public class MoveBall extends Application { @Override public void start(Stage primaryStage) { Circle ball = new Circle(200, 200, 10); Button btUp = new Button("Up"); Button btDown = new Button("Down"); Button btLeft = new Button("Left"); Button btRight = new Button("Right"); HBox controls = new HBox(); BorderPane bPane = new BorderPane(); ball.setFill(Color.RED); ball.setStroke(Color.BLACK); controls.setSpacing(10); controls.setAlignment(Pos.CENTER); controls.getChildren().addAll(btUp, btDown, btLeft, btRight); Pane ballPane = new Pane(ball); bPane.setCenter(ballPane); bPane.setBottom(controls); btUp.setOnAction((ActionEvent e) -> moveUp(ball)); btDown.setOnAction((ActionEvent e) -> moveDown(ball)); btLeft.setOnAction((ActionEvent e) -> moveLeft(ball)); btRight.setOnAction((ActionEvent e) -> moveRight(ball)); Scene scene = new Scene(bPane, 400, 400); primaryStage.setScene(scene); primaryStage.setTitle("Move the Ball"); primaryStage.show(); } public static void main (String[] args) { launch(args); } public void moveUp(Circle circle){ if(circle.getCenterY() - circle.getRadius() - 10 < 0) return; circle.setCenterY(circle.getCenterY() - 10); } public void moveDown(Circle circle){ if(circle.getCenterY() + circle.getRadius() + 10 > circle.getParent().getBoundsInLocal().getHeight()) return; circle.setCenterY(circle.getCenterY() + 10); } public void moveLeft(Circle circle){ System.out.println(circle.getBoundsInLocal()); if(circle.getCenterX() - circle.getRadius() - 10 < 0) return; circle.setCenterX(circle.getCenterX() - 10); } public void moveRight(Circle circle){ if(circle.getCenterX() + circle.getRadius() + 10 > circle.getParent().getBoundsInLocal().getWidth()) return; circle.setCenterX(circle.getCenterX() + 10); } }
Atas ialah kandungan terperinci JAVA: Gerakkan objek dalam anak tetingkap sempadan apabila butang ditekan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas





Gunakan Golang untuk membangunkan aplikasi desktop yang berkuasa Dengan pembangunan Internet yang berterusan, orang ramai menjadi tidak dapat dipisahkan daripada pelbagai jenis aplikasi desktop. Bagi pembangun, adalah penting untuk menggunakan bahasa pengaturcaraan yang cekap untuk membangunkan aplikasi desktop yang berkuasa. Artikel ini akan memperkenalkan cara menggunakan Golang (bahasa Go) untuk membangunkan aplikasi desktop yang berkuasa dan menyediakan beberapa contoh kod khusus. Golang ialah bahasa pengaturcaraan sumber terbuka yang dibangunkan oleh Google Ia mempunyai ciri-ciri kesederhanaan, kecekapan, konkurensi yang kuat, dsb., dan sangat sesuai untuk

Langkah penetapan lompat halaman log masuk Layui: Tambah kod lompat: Tambah pertimbangan dalam borang log masuk serah acara klik butang, dan lompat ke halaman yang ditentukan melalui window.location.href selepas berjaya log masuk. Ubah suai konfigurasi borang: tambah medan input tersembunyi pada elemen borang lay-filter="login", dengan nama "redirect" dan nilainya ialah alamat halaman sasaran.

Bagaimana untuk menambah acara klik pada imej dalam Vue? Import contoh Vue. Buat contoh Vue. Tambahkan imej pada templat HTML. Tambahkan acara klik menggunakan arahan v-on:click. Tentukan kaedah handleClick dalam contoh Vue.

Pengenalan kepada pembangunan bahasa HarmonyOS dan Go HarmonyOS ialah sistem pengendalian teragih yang dibangunkan oleh Huawei, dan Go ialah bahasa pengaturcaraan moden Gabungan kedua-duanya menyediakan penyelesaian yang berkuasa untuk membangunkan aplikasi teragih. Artikel ini akan memperkenalkan cara menggunakan bahasa Go untuk pembangunan dalam HarmonyOS dan mendalami pemahaman melalui kes praktikal. Pemasangan dan Persediaan Untuk menggunakan bahasa Go untuk membangunkan aplikasi HarmonyOS, anda perlu memasang GoSDK dan HarmonyOSSDK terlebih dahulu. Langkah-langkah khusus adalah seperti berikut: #Install GoSDKgogetgithub.com/golang/go#Set PATH

Tip PHP: Cepat melaksanakan fungsi kembali ke halaman sebelumnya Dalam pembangunan web, kita sering menghadapi keperluan untuk melaksanakan fungsi kembali ke halaman sebelumnya. Operasi sedemikian boleh meningkatkan pengalaman pengguna dan memudahkan pengguna menavigasi antara halaman web. Dalam PHP, kita boleh mencapai fungsi ini melalui beberapa kod mudah. Artikel ini akan memperkenalkan cara cepat melaksanakan fungsi kembali ke halaman sebelumnya dan memberikan contoh kod PHP tertentu. Dalam PHP, kita boleh menggunakan $_SERVER['HTTP_REFERER'] untuk mendapatkan URL halaman sebelumnya

Mekanisme dipacu peristiwa dalam pengaturcaraan serentak bertindak balas kepada peristiwa luaran dengan melaksanakan fungsi panggil balik apabila peristiwa berlaku. Dalam C++, mekanisme dipacu peristiwa boleh dilaksanakan dengan penunjuk fungsi: penunjuk fungsi boleh mendaftarkan fungsi panggil balik untuk dilaksanakan apabila peristiwa berlaku. Ungkapan Lambda juga boleh melaksanakan panggilan balik acara, membenarkan penciptaan objek fungsi tanpa nama. Kes sebenar menggunakan penunjuk fungsi untuk melaksanakan peristiwa klik butang GUI, memanggil fungsi panggil balik dan mencetak mesej apabila peristiwa itu berlaku.

Jawapan: JavaScript menyediakan pelbagai kaedah untuk mendapatkan elemen halaman web, termasuk menggunakan id, nama teg, nama kelas dan pemilih CSS. Penerangan terperinci: getElementById(id): Dapatkan elemen berdasarkan id unik. getElementsByTagName(tag): Mendapatkan kumpulan elemen dengan nama tag yang ditentukan. getElementsByClassName(class): Mendapatkan kumpulan elemen dengan nama kelas yang ditentukan. querySelector(selector): Gunakan pemilih CSS untuk mendapatkan elemen padanan pertama. querySelectorAll(selector): Dapatkan semua padanan menggunakan pemilih CSS

Tkinter ialah kit alat GUI yang berkuasa dalam perpustakaan standard Python untuk mencipta antara muka pengguna grafik (GUI) merentas platform. Ia berdasarkan kit alat Tcl/Tk dan menyediakan sintaks yang mudah dan intuitif, membolehkan pembangun Python mencipta antara muka pengguna yang kompleks dengan mudah dan cepat. Kelebihan keserasian merentas platform Tkinter: Aplikasi Tkinter dijalankan pada semua sistem pengendalian utama seperti tingkap, Mac dan Linux. Mudah digunakan: Sintaksnya jelas dan mudah dipelajari, menjadikannya mudah untuk dikuasai oleh pembangun pemula dan berpengalaman. Kebolehlanjutan: Tkinter menyediakan pelbagai widget dan kawalan, membolehkan pembangun mencipta pelbagai jenis antara muka pengguna. Integrasi: Ia berkaitan dengan P