Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javafx中借助键盘移动对象(形状)?_Javafx_Event Handling - Fatal编程技术网

如何在javafx中借助键盘移动对象(形状)?

如何在javafx中借助键盘移动对象(形状)?,javafx,event-handling,Javafx,Event Handling,我正在尝试构建一个JavaFX应用程序,在这个应用程序中,我无法借助键盘和控件按钮来移动矩形。它工作正常,但使用keyevent处理程序,它似乎甚至没有调用该函数。 这是我的控制器类代码 请给我一些建议 对不起,语言不方便,我真的不知道怎么提问 谢谢 包装样品; 导入javafx.animation.KeyFrame; 导入javafx.animation.Timeline; 导入javafx.event.ActionEvent; 导入javafx.event.EventHandler; 导入j

我正在尝试构建一个JavaFX应用程序,在这个应用程序中,我无法借助键盘和控件按钮来移动矩形。它工作正常,但使用keyevent处理程序,它似乎甚至没有调用该函数。 这是我的控制器类代码 请给我一些建议 对不起,语言不方便,我真的不知道怎么提问 谢谢

包装样品;
导入javafx.animation.KeyFrame;
导入javafx.animation.Timeline;
导入javafx.event.ActionEvent;
导入javafx.event.EventHandler;
导入javafx.fxml.Initializable;
导入javafx.scene.scene;
导入javafx.scene.control.Button;
导入javafx.scene.input.KeyCode;
导入javafx.scene.input.KeyEvent;
导入javafx.scene.input.MouseEvent;
导入javafx.scene.layout.Pane;
导入javafx.scene.shape.Circle;
导入javafx.scene.shape.Rectangle;
导入javafx.scene.shape.shape;
导入javafx.scene.shape.Shape3D;
导入javafx.util.Duration;
导入java.awt.*;
导入java.net.URL;
导入java.util.ResourceBundle;
导入静态javafx.scene.paint.Color.*;
公共类控制器实现可初始化{
公众圈;
公共按钮b1;
公共按钮b2;
公共矩形;
公共窗格;
双dx=4;
双dy=4;
整数计数=0;
@凌驾
公共void初始化(URL、ResourceBundle、ResourceBundle){
关键帧k=新的关键帧(持续时间.毫秒(100)),
e->{
circle.setLayoutX(circle.getLayoutX()+dx);
circle.setLayoutY(circle.getLayoutY()+dy);
if(circle.getLayoutX()<30 | circle.getLayoutX()>=600){
dx=-dx;
}
if(circle.getLayoutY()<30 | circle.getLayoutY()>=400){
dy=-dy;
}
//与矩形碰撞的条件
形状相交=形状相交(圆形、矩形);
if(intersect.getBoundsInParent().getWidth()!=-1){
dy=-dy;
}
}
);
时间线t=新时间线(k);
t、 setCycleCount(Timeline.unfinite);
t、 play();
}
公共无效移动(KeyEvent KeyEvent){
开关(keyEvent.getCode()){
案例A:
rectangle.setX(rectangle.getX()+10);
打破
案例B:
rectangle.setX(rectangle.getX()+10);
打破
}
}
}
试试看

public void move(KeyEvent keyEvent) {
    switch (keyEvent.getCode()) {
        case A:
            Platform.runLater(()->rectangle.setX(rectangle.getX() + 10));
            break;
        case B:
            Platform.runLater(()->rectangle.setX(rectangle.getX() + 10));
            break;
    }
}

请在发布之前做一些研究(您不是第一个提出您的需求的开发人员,您可以在这里找到示例:)-当您需要根据特定需求调整工作示例时,请提供一个演示意外行为的示例)
import java.awt.*可能会导致问题。如果不是100%必要的话,我会删除它。看看你是否能从中得到一些想法
public void move(KeyEvent keyEvent) {
    switch (keyEvent.getCode()) {
        case A:
            Platform.runLater(()->rectangle.setX(rectangle.getX() + 10));
            break;
        case B:
            Platform.runLater(()->rectangle.setX(rectangle.getX() + 10));
            break;
    }
}