Maison > Java > javaDidacticiel > Comment déplacer une image en Java en fonction des pressions sur les touches ?

Comment déplacer une image en Java en fonction des pressions sur les touches ?

Barbara Streisand
Libérer: 2024-12-06 07:06:15
original
881 Les gens l'ont consulté

How to Move an Image in Java Based on Key Presses?

Comment faire bouger une image tout en écoutant une pression sur une touche en Java

En Java, vous pouvez utiliser une combinaison de Swing Timer et Key Liaisons pour faire bouger une image tout en écoutant une pression sur une touche. Voici comment :

  1. Créer un Swing Timer : Un Swing Timer est utilisé pour exécuter périodiquement une tâche. Dans ce cas, vous pouvez l'utiliser pour mettre à jour la position de l'image.
  2. Définir les liaisons de touches : Les liaisons de touches associent des clés à des actions spécifiques. Vous pouvez utiliser des raccourcis clavier pour détecter lorsqu'un utilisateur appuie sur une touche et déplace l'image en conséquence.
  3. Dessiner l'image : Remplacez la méthode paintComponent d'un JPanel pour dessiner l'image à sa position actuelle. .

Exemple de code :

Voici un exemple de code qui montre comment utiliser un Swing Timer et des raccourcis clavier pour faire bouger une image tout en écoutant une pression sur une touche :

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class ImageMoveOnKeyPress extends JPanel implements ActionListener {

    private Image image; // The image to be moved
    private int x, y; // The current position of the image

    private Timer timer; // The Swing Timer to update the image position
    private KeyBindings keyBindings; // The Key Bindings to detect keypresses

    public ImageMoveOnKeyPress() {
        // Load the image
        image = Toolkit.getDefaultToolkit().getImage("image_path");

        // Set the initial position of the image
        x = 50;
        y = 50;

        // Create a Swing Timer to update the image position
        timer = new Timer(10, this); // 10 milliseconds delay
        timer.start();

        // Create Key Bindings to detect keypresses
        keyBindings = new KeyBindings();
        getInputMap().put(KeyEvent.VK_LEFT, "left");
        getInputMap().put(KeyEvent.VK_RIGHT, "right");
        getInputMap().put(KeyEvent.VK_UP, "up");
        getInputMap().put(KeyEvent.VK_DOWN, "down");
        getActionMap().put("left", keyBindings.new MoveLeftAction());
        getActionMap().put("right", keyBindings.new MoveRightAction());
        getActionMap().put("up", keyBindings.new MoveUpAction());
        getActionMap().put("down", keyBindings.new MoveDownAction());
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(image, x, y, null);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        // Update the image position based on keypress
        if (keyBindings.isLeftPressed()) {
            x -= 1;
        } else if (keyBindings.isRightPressed()) {
            x += 1;
        } else if (keyBindings.isUpPressed()) {
            y -= 1;
        } else if (keyBindings.isDownPressed()) {
            y += 1;
        }

        // Repaint the panel to display the moved image
        repaint();
    }

    private class KeyBindings {
        private boolean leftPressed, rightPressed, upPressed, downPressed;

        public boolean isLeftPressed() {
            return leftPressed;
        }

        public void setLeftPressed(boolean leftPressed) {
            this.leftPressed = leftPressed;
        }

        public boolean isRightPressed() {
            return rightPressed;
        }

        public void setRightPressed(boolean rightPressed) {
            this.rightPressed = rightPressed;
        }

        public boolean isUpPressed() {
            return upPressed;
        }

        public void setUpPressed(boolean upPressed) {
            this.upPressed = upPressed;
        }

        public boolean isDownPressed() {
            return downPressed;
        }

        public void setDownPressed(boolean downPressed) {
            this.downPressed = downPressed;
        }

        private class MoveLeftAction extends AbstractAction {
            @Override
            public void actionPerformed(ActionEvent e) {
                leftPressed = true;
            }
        }

        private class MoveRightAction extends AbstractAction {
            @Override
            public void actionPerformed(ActionEvent e) {
                rightPressed = true;
            }
        }

        private class MoveUpAction extends AbstractAction {
            @Override
            public void actionPerformed(ActionEvent e) {
                upPressed = true;
            }
        }

        private class MoveDownAction extends AbstractAction {
            @Override
            public void actionPerformed(ActionEvent e) {
                downPressed = true;
            }
        }
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame();
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal