有一个 Java 应用程序,您需要在按下某些键时处理事件。应用程序本身启动了,但没有响应按这些键。问题是为什么?我甚至添加了一个记录器来处理事件,但它根本没有帮助
public class Controller {
private static final Logger logger = Logger.getLogger(Controller.class.getName());
@FXML
void keyPressed(KeyEvent event) throws IOException {
event.consume();
logger.info("Клавиша нажата: " + event.getCode());
if (event.getCode().equals(KeyCode.T)) {
Habitat.getInstance().timeFlag = !Habitat.getInstance().timeFlag;
Habitat.getInstance().showTimeLabel();
} else if (event.getCode().equals(KeyCode.B)) {
if (!Habitat.startFlag) {
Habitat.getInstance().startAction();
}
} else if (event.getCode().equals(KeyCode.E)) {
if (Habitat.startFlag) {
Habitat.getInstance().stopAction();
}
}
}
如果需要的话,附上一段带有主窗口代码的fxml:
<AnchorPane focusTraversable="true" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" onKeyReleased="#keyPressed"
prefHeight="750.0" prefWidth="900.0" xmlns="http://javafx.com/javafx/17" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="com.example.teststststs.Controller">
<Pane fx:id="modelPane" onKeyReleased="#keyPressed" prefHeight="750.0" prefWidth="900.0"/>
<Pane onKeyReleased="#keyPressed" prefHeight="717.0" prefWidth="900.0">
因为事件处理程序未安装,或者安装不正确。如果该方法
keyPressed()
从未被调用,那么记录器在这里就毫无用处。注册键盘事件的事件处理程序的便捷方法包括
setOnKeyPressed()
和setOnKeyReleased()
。以下示例显示如何设置这些事件处理程序。键盘事件的事件处理程序示例:
有关事件处理程序的更多信息,请参阅JavaFX 教程。