2017-03-28 6 views
0

基本的に、ユーザーがキーボードでRを押すと、ImageViewを90度回転します。Javafx imageキーを押したときの回転表示

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


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

答えて

1

あなたの質問は少し非特異的であるので、私はあなたがイメージビューが置かれているペインに追加されたイベントハンドラをしたい、とあなたはコントローラにそれを設定することを想定しました。もちろん

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

    }  

} 

が、これはペインの内側にImageViewのを保持しているFXMLを必要としますが、それは簡単にあなたのニーズに合わせて調整することができます。これは私のソリューションです。 回転を実行する関数は思ったように機能しますが、可能な限りequalsを使って比較します。シーン全体がロードされ、シーンが設定されたら、ペインにフォーカスを要求させるために、ペインのscenePropertyにリスナーを追加しました。つまり、キーを押すと実際にペインに登録されているKeyEventHandlerがトリガーされます。 EventHandlerの登録はまっすぐです。希望は助ける:)

関連する問題