2017-03-28 2 views
0

Fondamentalement, je veux faire pivoter un ImageView de 90 degrés lorsque l'utilisateur frappe R sur le clavier.Javafx imageAffiche la rotation en appuyant sur la touche

@FXML 
private Image arrow; 
@FXML 
private ImageView arrowDirection; 


@FXML 
public void arrowRotation(KeyEvent keyEvent) 
{ 
    if(keyEvent.getCode() == KeyCode.R) 
    arrowDirection.setRotate(90); 
} 

Répondre

1

Votre question est un peu non spécifique, donc je suppose que vous voulez un gestionnaire d'événements qui est ajouté à la vitre dans laquelle la vue de l'image repose, et que vous voulez le mettre dans le contrôleur. Ceci est ma solution:

import java.net.URL; 
import java.util.ResourceBundle; 
import javafx.beans.value.ChangeListener; 
import javafx.beans.value.ObservableValue; 
import javafx.event.EventHandler; 
import javafx.fxml.FXML; 
import javafx.fxml.Initializable; 
import javafx.scene.Scene; 
import javafx.scene.image.Image; 
import javafx.scene.image.ImageView; 
import javafx.scene.input.KeyCode; 
import javafx.scene.input.KeyEvent; 
import javafx.scene.layout.Pane; 

public class FXMLDocumentController implements Initializable { 

    @FXML 
    Pane pane; 

    @FXML 
    ImageView imgView; 

    public void arrowRotation(KeyEvent event){ 
     if(event.getCode().equals(KeyCode.R)) 
      imgView.setRotate(90); 
    } 

    @Override 
    public void initialize(URL url, ResourceBundle rb) { 
     Image img = new Image("https://upload.wikimedia.org/wikipedia/commons/thumb/7/7c/Javafx-layout-classes.svg/1000px-Javafx-layout-classes.svg.png"); 
     imgView.setImage(img); 
     pane.sceneProperty().addListener(new ChangeListener<Scene>() { 
      @Override 
      public void changed(ObservableValue<? extends Scene> observable, Scene oldValue, Scene newValue) { 
       if(newValue != null){ 
        pane.requestFocus(); 
       } 
      } 
     }); 
     pane.setOnKeyPressed(new EventHandler<KeyEvent>() { 
      @Override 
      public void handle(KeyEvent event) { 
       arrowRotation(event); 
      } 
     }); 

    }  

} 

Bien sûr, cela a besoin d'un FXML qui est titulaire d'un ImageView à l'intérieur d'un volet, mais qui peut facilement être ajustée pour répondre à vos besoins. La fonction qui effectue la rotation fonctionne à peu près comme vous le pensiez, mais je comparerais en utilisant égal si possible. J'ai ajouté un écouteur à la sceneProperty du volet pour laisser le volet demander le focus une fois le tout chargé et la scène réglée. Cela signifie qu'appuyer sur une touche déclenchera KeyEventHandlers qui sont enregistrés dans le volet. L'enregistrement de EventHandler est à nouveau direct. J'espère que ça aide :)