Java KeyEvent未运行
我做了一个新的计算器项目JavaFX和Java,但是当我试图添加一些东西,以便在按下这个键或那个键时可以完成一些事情,但是它不起作用,反而阻止了程序运行。如果有人有这方面的经验,这将是非常有帮助的,这样我就可以继续前进Java KeyEvent未运行,java,javafx,key,Java,Javafx,Key,我做了一个新的计算器项目JavaFX和Java,但是当我试图添加一些东西,以便在按下这个键或那个键时可以完成一些事情,但是它不起作用,反而阻止了程序运行。如果有人有这方面的经验,这将是非常有帮助的,这样我就可以继续前进 我的操作系统是Windows10。我已经导入了KeyCode和KeyEvent,并尝试了“JavaFX KeyEvent not firing”的答案,但失败了。我也在没有按下scene1.setOnKeyPressed((EventHandlerOk)的情况下尝试过它,因此首先
我的操作系统是Windows10。我已经导入了
KeyCode
和KeyEvent
,并尝试了“JavaFX KeyEvent not firing”的答案,但失败了。我也在没有按下scene1.setOnKeyPressed((EventHandlerOk)的情况下尝试过它,因此首先,在修复代码后,我会在google上快速搜索java命名约定。接下来,我将如何解决这个问题,有许多不同的方法可以做到这一点
首先,我们需要删除FXML中的所有onKeyActions,以便在看到onKeyPressed=“#KeyAction”
的任何地方删除它
接下来,我们需要一个函数来替换这个(您的旧onKeyPressed),所以我已经模拟了数字1和2的示例
public void initKeyActions(Scene scene){
scene.setOnKeyPressed(keyAction ->{
System.out.println(keyAction.getCode());
if(keyAction.getCode()==KeyCode.DIGIT1)
one.fire();//Fires the necessary button
else if(keyAction.getCode()==KeyCode.DIGIT2)
two.fire();
//Continue as I don't want to type these all out
});
}
之后,我们需要调用函数并传递场景,因此我们需要更改初始化fxml的方式,以便您可以访问控制器,所以请执行以下操作
@Override
public void start(Stage stage) throws Exception{
FXMLLoader loader = new FXMLLoader(getClass().getResource("FXMLDocument.fxml"));
Scene scene = new Scene(loader.load());
FXMLDocumentController controller = loader.getController();
controller.initKeyActions(scene);
stage.setScene(scene);
stage.show();
}
在您执行所有按钮后,它应按预期工作。如果您对有任何其他问题,请告诉我(EventHandler但您是否停止尝试将root
强制转换为EventHandler
?只需添加一个单独的EventHandler
实现不会突然使root
成为EventHandler
的实例。
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.Tab?>
<?import javafx.scene.control.TabPane?>
<?import javafx.scene.control.TextArea?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.shape.Line?>
<?import javafx.scene.text.Font?>
<AnchorPane id="pane" fx:id="window1" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="806.0" prefWidth="1155.0" stylesheets="@FXMLDocument.css" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="essestulator.FXMLDocumentController">
<children>
<Line endX="215.0" endY="1.0" layoutX="632.0" layoutY="227.0" startX="-608.0" />
<GridPane layoutX="23.0" layoutY="244.0" prefHeight="430.0" prefWidth="823.0">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<Button fx:id="two" contentDisplay="CENTER" mnemonicParsing="false" onAction="#handleButtonAction" onKeyPressed="#KeyAction" prefHeight="109.0" prefWidth="243.0" text="2" textAlignment="CENTER" textFill="WHITE" GridPane.columnIndex="1" GridPane.rowIndex="2">
<font>
<Font name="System Bold" size="50.0" />
</font>
</Button>
<Button fx:id="five" contentDisplay="CENTER" layoutX="216.0" layoutY="115.0" mnemonicParsing="false" onAction="#handleButtonAction" onKeyPressed="#KeyAction" prefHeight="115.0" prefWidth="206.0" text="5" textAlignment="CENTER" textFill="WHITE" GridPane.columnIndex="1" GridPane.rowIndex="3">
<font>
<Font name="System Bold" size="50.0" />
</font>
</Button>
<Button fx:id="four" contentDisplay="CENTER" layoutX="216.0" layoutY="114.0" mnemonicParsing="false" onAction="#handleButtonAction" onKeyPressed="#KeyAction" prefHeight="109.0" prefWidth="243.0" text="4" textAlignment="CENTER" textFill="WHITE" GridPane.rowIndex="3">
<font>
<Font name="System Bold" size="50.0" />
</font>
</Button>
<Button fx:id="three" contentDisplay="CENTER" layoutX="216.0" layoutY="9.0" mnemonicParsing="false" onAction="#handleButtonAction" onKeyPressed="#KeyAction" prefHeight="109.0" prefWidth="210.0" stylesheets="@FXMLDocument.css" text="3" textAlignment="CENTER" textFill="WHITE" GridPane.columnIndex="2" GridPane.rowIndex="2">
<font>
<Font name="System Bold" size="50.0" />
</font>
</Button>
<Button fx:id="one" contentDisplay="CENTER" layoutX="422.0" layoutY="9.0" mnemonicParsing="false" onAction="#handleButtonAction" onKeyPressed="#KeyAction" prefHeight="109.0" prefWidth="243.0" text="1" textAlignment="CENTER" textFill="WHITE" GridPane.rowIndex="2">
<font>
<Font name="System Bold" size="50.0" />
</font>
</Button>
<Button fx:id="six" contentDisplay="CENTER" layoutX="10.0" layoutY="219.0" mnemonicParsing="false" onAction="#handleButtonAction" onKeyPressed="#KeyAction" prefHeight="115.0" prefWidth="206.0" stylesheets="@FXMLDocument.css" text="6" textAlignment="CENTER" textFill="WHITE" GridPane.columnIndex="2" GridPane.rowIndex="3">
<font>
<Font name="System Bold" size="50.0" />
</font>
</Button>
<Button fx:id="seven" contentDisplay="CENTER" layoutX="216.0" layoutY="219.0" mnemonicParsing="false" onAction="#handleButtonAction" onKeyPressed="#KeyAction" prefHeight="115.0" prefWidth="206.0" stylesheets="@FXMLDocument.css" text="7" textAlignment="CENTER" textFill="WHITE" GridPane.columnIndex="3" GridPane.rowIndex="3">
<font>
<Font name="System Bold" size="50.0" />
</font>
</Button>
<Button fx:id="multi" contentDisplay="CENTER" layoutX="628.0" layoutY="9.0" mnemonicParsing="false" onAction="#handleButtonAction" onKeyPressed="#KeyAction" prefHeight="106.0" prefWidth="243.0" text="x" textAlignment="CENTER" textFill="WHITE" GridPane.columnIndex="2" GridPane.rowIndex="1">
<font>
<Font size="50.0" />
</font>
</Button>
<Button fx:id="add" contentDisplay="CENTER" layoutX="10.0" layoutY="429.0" mnemonicParsing="false" onAction="#handleButtonAction" onKeyPressed="#KeyAction" prefHeight="109.0" prefWidth="243.0" text="+" textAlignment="CENTER" textFill="WHITE" GridPane.columnIndex="1" GridPane.rowIndex="1">
<font>
<Font size="50.0" />
</font>
</Button>
<Button fx:id="dot" contentDisplay="CENTER" layoutX="422.0" layoutY="429.0" mnemonicParsing="false" onAction="#handleButtonAction" onKeyPressed="#KeyAction" prefHeight="109.0" prefWidth="243.0" text="." textAlignment="CENTER" textFill="WHITE" GridPane.columnIndex="3" GridPane.rowIndex="2">
<font>
<Font size="50.0" />
</font>
</Button>
<Button fx:id="divide" contentDisplay="CENTER" layoutX="10.0" layoutY="9.0" mnemonicParsing="false" onAction="#handleButtonAction" onKeyPressed="#KeyAction" prefHeight="109.0" prefWidth="243.0" text="÷" textAlignment="CENTER" textFill="WHITE" GridPane.columnIndex="3" GridPane.rowIndex="1">
<font>
<Font size="50.0" />
</font>
</Button>
<Button fx:id="backspace" contentDisplay="CENTER" mnemonicParsing="false" onAction="#handleButtonAction" onKeyPressed="#KeyAction" prefHeight="109.0" prefWidth="243.0" text="→" textAlignment="CENTER" textFill="WHITE" GridPane.columnIndex="2">
<font>
<Font size="50.0" />
</font>
</Button>
<Button fx:id="minus" contentDisplay="CENTER" mnemonicParsing="false" onAction="#handleButtonAction" onKeyPressed="#KeyAction" prefHeight="109.0" prefWidth="243.0" text="-" textAlignment="CENTER" textFill="WHITE" GridPane.rowIndex="1">
<font>
<Font size="50.0" />
</font>
</Button>
<Button fx:id="equals" contentDisplay="CENTER" mnemonicParsing="false" onAction="#handleButtonAction" onKeyPressed="#KeyAction" prefHeight="109.0" prefWidth="243.0" text="=" textAlignment="CENTER" textFill="WHITE" GridPane.columnIndex="3">
<font>
<Font size="50.0" />
</font>
</Button>
<Button fx:id="clearall" contentDisplay="CENTER" mnemonicParsing="false" onAction="#handleButtonAction" onKeyPressed="#KeyAction" prefHeight="109.0" prefWidth="243.0" text="C" textAlignment="CENTER" textFill="AZURE" GridPane.columnIndex="1">
<font>
<Font size="50.0" />
</font>
</Button>
<Button fx:id="clear" contentDisplay="CENTER" mnemonicParsing="false" onAction="#handleButtonAction" onKeyPressed="#KeyAction" prefHeight="109.0" prefWidth="243.0" text="CE" textAlignment="CENTER" textFill="WHITE">
<font>
<Font size="50.0" />
</font>
</Button>
</children>
</GridPane>
<Button fx:id="zero" contentDisplay="CENTER" layoutX="436.0" layoutY="674.0" mnemonicParsing="false" onAction="#handleButtonAction" onKeyPressed="#KeyAction" prefHeight="107.0" prefWidth="410.0" text="0" textAlignment="CENTER" textFill="WHITE">
<font>
<Font name="System Bold" size="50.0" />
</font>
</Button>
<Button fx:id="nine" contentDisplay="CENTER" layoutX="230.0" layoutY="674.0" mnemonicParsing="false" onAction="#handleButtonAction" onKeyPressed="#KeyAction" prefHeight="107.0" prefWidth="206.0" text="9" textAlignment="CENTER" textFill="WHITE">
<font>
<Font name="System Bold" size="50.0" />
</font>
</Button>
<Button fx:id="eight" contentDisplay="CENTER" layoutX="24.0" layoutY="674.0" mnemonicParsing="false" onAction="#handleButtonAction" onKeyPressed="#KeyAction" prefHeight="107.0" prefWidth="206.0" text="8" textAlignment="CENTER" textFill="WHITE">
<font>
<Font name="System Bold" size="50.0" />
</font>
</Button>
<Button cacheShape="false" centerShape="false" focusTraversable="false" layoutX="261.0" layoutY="101.0" mnemonicParsing="false" onAction="#send2sceneconver" prefHeight="39.0" prefWidth="162.0" scaleShape="false" text="Converter" visible="false">
<font>
<Font size="18.0" />
</font>
</Button>
<TabPane layoutX="888.0" layoutY="25.0" prefHeight="757.0" prefWidth="235.0" tabClosingPolicy="UNAVAILABLE">
<tabs>
<Tab text="Memory">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="715.0" prefWidth="241.0">
<children>
<TextArea editable="false" layoutX="-222.0" layoutY="72.0" prefHeight="690.0" prefWidth="235.0" promptText="Memory" AnchorPane.bottomAnchor="38.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<font>
<Font size="20.0" />
</font>
</TextArea>
<Button layoutY="690.0" mnemonicParsing="false" prefHeight="39.0" prefWidth="114.0" text="M+">
<font>
<Font name="System Bold" size="18.0" />
</font>
</Button>
<Button layoutX="120.0" layoutY="690.0" mnemonicParsing="false" prefHeight="39.0" prefWidth="115.0" text="MC">
<font>
<Font name="System Bold" size="18.0" />
</font>
</Button>
</children></AnchorPane>
</content>
</Tab>
<Tab text="Notes">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0">
<children>
<TextArea layoutX="19.0" layoutY="-1.0" prefHeight="715.0" prefWidth="235.0" promptText="Notes" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<font>
<Font size="20.0" />
</font>
</TextArea>
</children></AnchorPane>
</content>
</Tab>
</tabs>
</TabPane>
<Label fx:id="display" alignment="CENTER_RIGHT" layoutX="23.0" layoutY="25.0" prefHeight="202.0" prefWidth="811.0" text="0" textAlignment="RIGHT">
<font>
<Font size="96.0" />
</font>
</Label>
</children>
</AnchorPane>
I was wanting it to do [blank] if [blank] key pressed, but it caused a lot of error messages that I tried to read but did not make it.
public void initKeyActions(Scene scene){
scene.setOnKeyPressed(keyAction ->{
System.out.println(keyAction.getCode());
if(keyAction.getCode()==KeyCode.DIGIT1)
one.fire();//Fires the necessary button
else if(keyAction.getCode()==KeyCode.DIGIT2)
two.fire();
//Continue as I don't want to type these all out
});
}
@Override
public void start(Stage stage) throws Exception{
FXMLLoader loader = new FXMLLoader(getClass().getResource("FXMLDocument.fxml"));
Scene scene = new Scene(loader.load());
FXMLDocumentController controller = loader.getController();
controller.initKeyActions(scene);
stage.setScene(scene);
stage.show();
}