【发布时间】:2021-03-11 04:05:06
【问题描述】:
我有一个现有的应用程序,用于移动星形图案的 3D 图(平移、旋转等)
我的鼠标事件(按下、拖动等)工作正常。
我想添加一个键盘事件处理程序,但奇怪的是它从不捕获任何按键事件。
我定义了一个子场景来管理事物。这是事件设置和处理代码。在下面的代码中,所有鼠标事件都按预期工作。没有记录按键事件。
private void handleUserEvents() {
subScene.setOnKeyPressed((KeyEvent key)-> {
log.info("key={}", key);
});
subScene.setOnScroll((ScrollEvent event) -> {
double deltaY = event.getDeltaY();
zoomGraph(deltaY * 5);
updateLabels();
});
subScene.setOnMousePressed((MouseEvent me) -> {
mousePosX = me.getSceneX();
mousePosY = me.getSceneY();
mouseOldX = me.getSceneX();
mouseOldY = me.getSceneY();
}
);
subScene.setOnMouseDragged((MouseEvent me) -> {
int direction = userControls.isControlSense() ? +1 : -1;
mouseOldX = mousePosX;
mouseOldY = mousePosY;
mousePosX = me.getSceneX();
mousePosY = me.getSceneY();
mouseDeltaX = (mousePosX - mouseOldX);
mouseDeltaY = (mousePosY - mouseOldY);
// double modifier = 0.2;
double modifier = UserControls.NORMAL_SPEED;
if (me.isPrimaryButtonDown() && me.isControlDown()) {
log.info("shift sideways");
camera.setTranslateX(mousePosX);
camera.setTranslateY(mousePosY);
} else if (me.isPrimaryButtonDown()) {
if (me.isAltDown()) { //roll
rotateZ.setAngle(((rotateZ.getAngle() + direction * mouseDeltaX * modifier) % 360 + 540) % 360 - 180); // +
} else {
rotateY.setAngle(((rotateY.getAngle() + direction * mouseDeltaX * modifier) % 360 + 540) % 360 - 180); // +
rotateX.setAngle(
clamp(
(((rotateX.getAngle() - direction * mouseDeltaY * modifier) % 360 + 540) % 360 - 180),
-60,
60
)
); // -
}
}
updateLabels();
}
);
}
【问题讨论】:
-
SubScene有焦点吗? -
这能回答你的问题吗? JavaFX onKeyPressed event not being handled
-
log.info("key={}", key.getCharacter());这有什么用?
-
Slaw,当我测试它时,我点击子场景用鼠标移动了子场景(使用上面的鼠标事件),我试着敲击键来查看它们是否被记录。所以我相信它有重点,以防没有意义
-
路西法,按键根本没有被触发,所以特定的改变不会做任何事情。