当前位置: 首页 > 知识库问答 >
问题:

KeyEvents和Focus JavaFX

贺高杰
2023-03-14
pane.setOnKeyPressed(new EventHandler<KeyEvent>() {
   @Override
   public void handle(KeyEvent event) {
       System.out.println( "I'm here");
       jump( event);
   }
});
@FXML
public void printScene() {
    System.out.println( pane.getScene());
}

当我点击按钮时,它打印出我的窗格的场景,就像它应该有的那样。但后来,我意识到我的窗格现在捕捉KeyEvents。除了使用Fxml添加一个按钮外,我什么也没做,现在窗格捕捉KeyEvents?当我注释掉按钮的代码时,窗格不再捕捉KeyEvents

<Button onAction="#printScene"/>

这是按钮的所有代码。

注意:我还尝试了pane.requestfocus()pane.setfocustraversable(true),但也不起作用。但是添加一个按钮突然就能工作了?我好困惑。

整个代码:

public class Main extends Application {

@Override
public void start(Stage primaryStage) throws Exception{
    FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("sample.fxml"));
    Parent root = fxmlLoader.load();
    Scene scene = new Scene( root, 800, 600);
    primaryStage.setTitle("Game");
    primaryStage.setScene( scene);
    primaryStage.show();


}

public static void main(String[] args) {
    launch(args);
}
}

public class Controller {

@FXML private Pane pane;
@FXML private Rectangle cube;

public void initialize() {
    pane.requestFocus();
    pane.setFocusTraversable( true);
    pane.setOnKeyPressed(new EventHandler<KeyEvent>() {
        @Override
        public void handle(KeyEvent event) {
            System.out.println( "I'm here");
            jump( event);
        }
    });
    System.out.println( pane.getScene());
}
}

//FXML Code
<Pane fx:controller="sample.Controller" fx:id="pane"
  xmlns:fx="http://javafx.com/fxml">

<Rectangle width="800" height="20" layoutY="580" fill="green"/>
<Rectangle fx:id="cube" width="40" height="40" layoutX="5" layoutY="540"/>
<!--<Button />-->
</Pane>

未注释按钮使窗格获得焦点,反之亦然。

共有1个答案

危晨
2023-03-14

这是我在这个网站上的第一个答案,所以我可能不太好回答你。

不管怎样,我认为错误是在窗格上应用事件,尝试在场景上应用它。

编辑:我看到您使用pane.getscene();你没有场景对象吗?

 类似资料:
  • 我正在尝试在JavaFX中编写某种第一人称视角3D游戏,到目前为止,该运动效果非常好。 我使用JavaFX的内置shape和PerspectiveCamera类将图像渲染到场景中。 但是对于所有关键事件,输入延迟约为1-2秒。 滞后仅出现在: > 一旦程序切换到全屏(即使切换回窗口,它们仍然存在,但当程序刚刚启动时,它们仍然存在) 并且在按下/释放按钮之前不久使用鼠标旋转相机 例如:我按W前进,同

  • 嗨,我正在使用mediacontroller来控制我的媒体播放器,我想使用keyEvents而不是触摸事件来控制,我使用下面的代码来做到这一点,但只有播放/暂停是工作的,当mediacontroller视图出现时,KEYCODE_MEDIA_FAST_FORWARD和KEYCODE_MEDIA_REWIND不被处理。 有谁能建议如何使用关键事件处理快进和快退。 请帮忙。

  • 我目前正在通过斯坦福大学的编程方法论(2008)课程学习Java。我正在试图创建游戏突破,并试图目前动画桨,这是一个GRect类型的对象。这是我的代码: 问题是,如果我用鼠标移动拨片,它会很好地跟随,比我用键盘移动它要流畅得多。改变移动()方法中的值只会改变拨片移动的速度。 我尝试过谷歌搜索,人们做的一件事是逐渐增加和减少划桨移动的速度,但我不确定如何通过这个库正确实现这一点。以下是我的尝试: 在

  • 所以我可以对控制字符使用CTL组合,对大写字母(如a、B)和字符(如!)使用SHIFT!,{(即基本拉丁文和标点符号)。 然而,我无法在Android中找到诸如、...等符号的组合。Ubuntu使用CTRL SHIFT U...后跟四个生成符号的数字的组合,但这似乎无法翻译为Android。 TL;DR:如何使用Android KeyEvents和KeyCharacter Map生成特殊符号? 更

  • 问题内容: 关于它们有很多传说。我想知道真相。以下两个示例之间有什么区别? 问题答案: 不确定从何处获得传说,但: 提交按钮 与: IE6将在标记之间提交此按钮的所有文本,其他浏览器将仅提交值。使用可使您在按钮的设计上享有更大的布局自由度。从各种意图和目的看,它乍一看似乎很棒,但是各种浏览器怪癖使它有时很难使用。 在您的示例中,IE6将发送到服务器,而其他大多数浏览器将不发送任何内容。要使其跨浏览

  • 什么区别以及如何正确重写代码?