Table des matières
Contenu de la question
Contournement
Maison Java JAVA : déplacer l'objet dans le volet de bordure lorsque le bouton est enfoncé

JAVA : déplacer l'objet dans le volet de bordure lorsque le bouton est enfoncé

Feb 10, 2024 pm 01:40 PM
点击事件

L'éditeur PHP Xinyi vous présente aujourd'hui une technique de programmation JAVA intéressante : déplacer des objets dans le volet de bordure lorsque vous appuyez sur un bouton. Cette technique peut ajouter une certaine interactivité à l'interface utilisateur, permettant aux utilisateurs de déplacer des objets en cliquant sur des boutons. La méthode d'implémentation de cette fonction est relativement simple. Il suffit d'écouter l'événement clic du bouton et de mettre à jour la position de l'objet dans la méthode de traitement de l'événement. De cette façon, nous pouvons offrir aux utilisateurs une expérience d’interface plus vivante et plus intéressante. Ci-dessous, nous présenterons en détail le processus de mise en œuvre de cette technique.

Contenu de la question

Je fais un devoir dans lequel je dois créer un cercle dans un volet et le déplacer à l'aide des boutons en bas de l'écran. Je parviens à faire apparaître le cercle et le bouton dans le volet, mais lorsque j'appuie sur le bouton, le cercle ne bouge pas.

Ma méthode principale est la suivante :

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);  
  }  
  
  
}
Copier après la connexion

La véritable façon de déplacer un cercle est ici :

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);
    }
}
Copier après la connexion
Le but de la méthode

ballcontrol est de vérifier si le déplacement du cercle l'étendra au-delà des limites de la fenêtre, et sinon, de le déplacer. Mais quand on appuie sur le bouton, le cercle ne bouge jamais.

Contournement

borderpane 是一种“布局窗格”,这意味着它将根据自己的算法布局其子节点。特别是,如果该节点可调整大小,并且在其最小、最大和首选大小指定的约束范围内,则 borderpane 将扩展 center 区域中的节点以填充整个区域,然后将其在该区域内居中。 circle Non redimensionnable, donc il se concentre uniquement dans cette zone.

Modifier les coordonnées centerxcentery du cercle n'aidera pas ici : les limites de la disposition du cercle seront un rectangle d'environ 20x20 pixels (puisque le rayon est de 10, c'est le plus petit rectangle qui contient le cercle ; "approximativement" ici est parce que le trait peut besoin d'espace supplémentaire). Le rectangle aura un système de coordonnées qui commence au rayon central et s'étend jusqu'au centre + rayon, mais il sera ensuite centré dans la zone centrale conformément à la politique de disposition du volet de bordure. En fait, les coordonnées du centre du cercle changent, mais ces coordonnées se trouvent uniquement dans le système de coordonnées du cercle lui-même, et non dans le système de coordonnées du volet de bordure.

Une solution consiste à envelopper le cercle dans un volet normal qui n'effectue pas de mise en page, et à placer le volet au centre du borderpane. Le pane est redimensionnable, donc le borderpane le redimensionnera à la taille maximale de la zone centrale. Le pane ne dispose pas le cercle, il reste donc aux coordonnées définies par pane 中,并将 pane 放置在 borderpane 的中心。 pane 的大小是可调整的,因此 borderpane 会将其大小调整为中心区域的完整大小。 pane 不会对圆进行布局,因此它保留在 centerxcentery sans aucune disposition supplémentaire. (En fait, vous faites en sorte que le système de coordonnées du cercle soit identique à celui du volet.) C'est la solution que j'utilise dans le code ci-dessous.

Une autre solution consiste à manipuler les translatextranslatey propriétés du cercle. Ces transformations sont appliquées après la mise en page. Cependant, avec cette solution, empêcher le cercle de sortir des limites de son contenant devient plus compliqué. (Je ne montre pas cette solution dans le code ci-dessous.)

Voir la documentation de mise en page pour plus de détails.

Voici les modifications pour que cela fonctionne. Notez que j'ai également modifié la façon dont les limites sont calculées afin que cela fonctionne toujours même si la fenêtre est redimensionnée.

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);
    }
}
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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Développez des applications de bureau puissantes à l'aide de Golang Développez des applications de bureau puissantes à l'aide de Golang Mar 19, 2024 pm 05:45 PM

Utilisez Golang pour développer des applications de bureau puissantes. Avec le développement continu d'Internet, les utilisateurs sont devenus indissociables de différents types d'applications de bureau. Pour les développeurs, il est crucial d’utiliser des langages de programmation efficaces pour développer des applications bureautiques puissantes. Cet article explique comment utiliser Golang (langage Go) pour développer des applications de bureau puissantes et fournit des exemples de code spécifiques. Golang est un langage de programmation open source développé par Google. Il présente les caractéristiques de simplicité, d'efficacité, de forte concurrence, etc., et convient parfaitement.

Comment configurer le saut sur la page de connexion Layui Comment configurer le saut sur la page de connexion Layui Apr 04, 2024 am 03:12 AM

Étapes de configuration du saut de la page de connexion Layui : Ajouter un code de saut : ajoutez un jugement dans l'événement de clic sur le bouton de soumission du formulaire de connexion et accédez à la page spécifiée via window.location.href après une connexion réussie. Modifiez la configuration du formulaire : ajoutez un champ de saisie masqué à l'élément de formulaire de lay-filter="login", avec le nom "redirect" et la valeur étant l'adresse de la page cible.

Comment ajouter des événements tactiles aux images dans vue Comment ajouter des événements tactiles aux images dans vue May 02, 2024 pm 10:21 PM

Comment ajouter un événement de clic à une image dans Vue ? Importez l'instance Vue. Créez une instance Vue. Ajoutez des images aux modèles HTML. Ajoutez des événements de clic à l'aide de la directive v-on:click. Définissez la méthode handleClick dans l'instance Vue.

Développement du langage Hongmeng HarmonyOS et Go Développement du langage Hongmeng HarmonyOS et Go Apr 08, 2024 pm 04:48 PM

Introduction au développement du langage HarmonyOS et Go HarmonyOS est un système d'exploitation distribué développé par Huawei, et Go est un langage de programmation moderne. La combinaison des deux offre une solution puissante pour développer des applications distribuées. Cet article présentera comment utiliser le langage Go pour le développement dans HarmonyOS et approfondira sa compréhension à travers des cas pratiques. Installation et configuration Pour utiliser le langage Go pour développer des applications HarmonyOS, vous devez d'abord installer GoSDK et HarmonyOSSDK. Les étapes spécifiques sont les suivantes : #Install GoSDKgogetgithub.com/golang/go#Set PATH

Astuces PHP : implémentez rapidement la fonction de retour à la page précédente Astuces PHP : implémentez rapidement la fonction de retour à la page précédente Mar 09, 2024 am 08:21 AM

Astuces PHP : Implémentez rapidement la fonction de retour à la page précédente. Dans le développement web, nous rencontrons souvent le besoin d'implémenter la fonction de retour à la page précédente. De telles opérations peuvent améliorer l’expérience utilisateur et faciliter la navigation des utilisateurs entre les pages Web. En PHP, nous pouvons réaliser cette fonction grâce à un code simple. Cet article présentera comment implémenter rapidement la fonction de retour à la page précédente et fournira des exemples de code PHP spécifiques. En PHP, on peut utiliser $_SERVER['HTTP_REFERER'] pour récupérer l'URL de la page précédente

Quel est le mécanisme événementiel des fonctions C++ en programmation concurrente ? Quel est le mécanisme événementiel des fonctions C++ en programmation concurrente ? Apr 26, 2024 pm 02:15 PM

Le mécanisme événementiel de la programmation simultanée répond aux événements externes en exécutant des fonctions de rappel lorsque des événements se produisent. En C++, le mécanisme événementiel peut être implémenté avec des pointeurs de fonction : les pointeurs de fonction peuvent enregistrer des fonctions de rappel à exécuter lorsque des événements se produisent. Les expressions Lambda peuvent également implémenter des rappels d'événements, permettant la création d'objets fonction anonymes. Le cas réel utilise des pointeurs de fonction pour implémenter des événements de clic sur un bouton de l'interface graphique, appelant la fonction de rappel et imprimant des messages lorsque l'événement se produit.

Explication détaillée de l'obtention par JavaScript d'éléments de page Web Explication détaillée de l'obtention par JavaScript d'éléments de page Web Apr 09, 2024 pm 12:45 PM

Réponse : JavaScript fournit diverses méthodes pour obtenir des éléments de page Web, notamment l'utilisation d'identifiants, de noms de balises, de noms de classes et de sélecteurs CSS. Description détaillée : getElementById(id) : obtient des éléments basés sur un identifiant unique. getElementsByTagName(tag) : obtient le groupe d'éléments avec le nom de balise spécifié. getElementsByClassName(class) : obtient le groupe d'éléments avec le nom de classe spécifié. querySelector(selector) : utilisez le sélecteur CSS pour obtenir le premier élément correspondant. querySelectorAll (sélecteur) : obtenez toutes les correspondances à l'aide du sélecteur CSS

Conquérir le monde des interfaces graphiques avec Python Tkinter : le guide complet Conquérir le monde des interfaces graphiques avec Python Tkinter : le guide complet Mar 24, 2024 am 09:26 AM

Tkinter est une puissante boîte à outils GUI dans la bibliothèque standard Python pour créer des interfaces utilisateur graphiques (GUI) multiplateformes. Il est basé sur la boîte à outils Tcl/Tk et fournit une syntaxe simple et intuitive, permettant aux développeurs Python de créer facilement et rapidement des interfaces utilisateur complexes. Avantages de la compatibilité multiplateforme Tkinter : les applications Tkinter fonctionnent sur tous les principaux systèmes d'exploitation tels que Windows, Mac et Linux. Facile à utiliser : sa syntaxe est claire et facile à apprendre, ce qui la rend facile à maîtriser aussi bien pour les développeurs débutants que expérimentés. Extensibilité : Tkinter fournit une variété de widgets et de contrôles qui permettent aux développeurs de créer une grande variété d'interfaces utilisateur. Intégration : elle est liée à P