Rumah >Java >javaTutorial >Mengapa Menggunakan Pengikatan Utama Daripada Pendengar Utama untuk Responsif Dipertingkatkan dalam Aplikasi?
Cara Menggunakan Pengikatan Utama sebagai Alternatif kepada Pendengar Utama
Daripada bergantung pada KeyListeners untuk membolehkan objek pada skrin bertindak balas kepada kunci pengguna input, pertimbangkan untuk memanfaatkan pengikatan utama untuk responsif yang dipertingkatkan.
Ikatan utama menawarkan beberapa kelebihan berbanding KeyListeners:
Menghapuskan Keperluan untuk Fokus:
Tidak seperti KeyListeners, pengikatan kunci membenarkan objek bertindak balas kepada input tanpa mengira sama ada mereka mempunyai fokus. Ini menghapuskan gelagat yang tidak dijangka di mana pengguna mesti mengklik pada objek untuk mencetuskan fungsinya.
Penyelenggaraan dan Fleksibiliti Dipermudah:
Pengikatan utama memudahkan pengurusan dan penyesuaian tindakan input pengguna. Mengikat semula, melumpuhkan atau memberikan tindakan baharu kepada kunci menjadi mudah, meningkatkan kebolehbacaan dan kebolehselenggaraan kod.
Cara Pengikatan Kunci Berfungsi:
Pengikatan utama terdiri daripada dua komponen: InputMap dan ActionMap . InputMap mengaitkan input pengguna (seperti menekan kekunci) dengan nama tindakan. ActionMap kemudian memautkan nama tindakan kepada tindakan tertentu. Apabila pengguna menekan kekunci, InputMap mengenal pasti nama tindakan yang sepadan dan ActionMap melaksanakan tindakan yang berkaitan.
Melaksanakan Pengikatan Kunci:
Untuk melaksanakan pengikatan kunci, petakan input pengguna kepada tindakan menggunakan sintaks berikut:
myComponent.getInputMap().put("userInput", "myAction"); myComponent.getActionMap().put("myAction", action);
Contoh Kod:
Berikut ialah versi semakan kod yang disediakan dalam soalan asal, menggunakan pengikatan utama:
import javax.swing.*; import java.awt.event.*; public class MyGame extends JFrame { private static final int IFW = JComponent.WHEN_IN_FOCUSED_WINDOW; private static final String MOVE_UP = "move up"; private static final String MOVE_DOWN = "move down"; private static final String FIRE = "move fire"; static JLabel obj1 = new JLabel(); static JLabel obj2 = new JLabel(); public MyGame() { // ... GUI layout and management ... obj1.getInputMap(IFW).put(KeyStroke.getKeyStroke("UP"), MOVE_UP); obj1.getInputMap(IFW).put(KeyStroke.getKeyStroke("DOWN"), MOVE_DOWN); obj1.getInputMap(IFW).put(KeyStroke.getKeyStroke("control CONTROL"), FIRE); obj2.getInputMap(IFW).put(KeyStroke.getKeyStroke("W"), MOVE_UP); obj2.getInputMap(IFW).put(KeyStroke.getKeyStroke("S"), MOVE_DOWN); obj2.getInputMap(IFW).put(KeyStroke.getKeyStroke("T"), FIRE); obj1.getActionMap().put(MOVE_UP, new MoveAction(1, 1)); obj1.getActionMap().put(MOVE_DOWN, new MoveAction(2, 1)); obj1.getActionMap().put(FIRE, new FireAction(1)); obj2.getActionMap().put(MOVE_UP, new MoveAction(1, 2)); obj2.getActionMap().put(MOVE_DOWN, new MoveAction(2, 2)); obj2.getActionMap().put(FIRE, new FireAction(2)); // ... Remaining GUI setup ... } static void rebindKey(KeyEvent ke, String oldKey) { // ... Handle key rebinding ... } public static void main(String[] args) { new MyGame(); } private class MoveAction extends AbstractAction { // ... Action details ... } private class FireAction extends AbstractAction { // ... Action details ... } }
Dengan mengasingkan InputMap daripada ActionMap, anda meningkatkan kebolehgunaan semula kod dan mendapatkan kawalan yang lebih baik atas pengikatan kunci. Selain itu, tindakan boleh didayakan atau dilumpuhkan secara bebas, memberikan fleksibiliti yang lebih besar.
Jangan ragu untuk memperhalusi kod tersebut berdasarkan keperluan khusus dan matlamat projek anda.
Atas ialah kandungan terperinci Mengapa Menggunakan Pengikatan Utama Daripada Pendengar Utama untuk Responsif Dipertingkatkan dalam Aplikasi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!