Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.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
Java KeyEvent未运行_Java_Javafx_Key - Fatal编程技术网

Java KeyEvent未运行

Java KeyEvent未运行,java,javafx,key,Java,Javafx,Key,我做了一个新的计算器项目JavaFX和Java,但是当我试图添加一些东西,以便在按下这个键或那个键时可以完成一些事情,但是它不起作用,反而阻止了程序运行。如果有人有这方面的经验,这将是非常有帮助的,这样我就可以继续前进 我的操作系统是Windows10。我已经导入了KeyCode和KeyEvent,并尝试了“JavaFX KeyEvent not firing”的答案,但失败了。我也在没有按下scene1.setOnKeyPressed((EventHandlerOk)的情况下尝试过它,因此首先

我做了一个新的计算器项目JavaFX和Java,但是当我试图添加一些东西,以便在按下这个键或那个键时可以完成一些事情,但是它不起作用,反而阻止了程序运行。如果有人有这方面的经验,这将是非常有帮助的,这样我就可以继续前进


我的操作系统是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();
}