【问题标题】:How do you add keyboard commands to a preexisting javafx scene?如何将键盘命令添加到预先存在的 javafx 场景中?
【发布时间】:2015-07-14 14:23:52
【问题描述】:

我一直在尝试找出如何将键盘命令添加到预先存在的 javafx 场景中,但我似乎无法在任何地方找到答案。想要有一个键盘方法在按下一个键的情况下运行。他是我想添加键盘命令/控件的对象。

    import javafx.application.Application;
    import javafx.fxml.FXMLLoader;
    import javafx.scene.Parent;
    import javafx.scene.Scene;
    import javafx.stage.Stage;


    public class Main extends Application {
public void start(Stage primaryStage) {
    try {
        Parent root =    FXMLLoader.load(getClass().getResource("/fxml/Main.fxml"));
        Scene scene = new Scene(root,600,400);
        scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
        primaryStage.setResizable(false);
        primaryStage.setScene(scene);
        primaryStage.setTitle("Keyboard test app");
        primaryStage.show();
    } catch(Exception e) {
        e.printStackTrace();
    }
}

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

}
}

这真的很有帮助,谢谢。

【问题讨论】:

标签: java keyboard javafx scene


【解决方案1】:

请仔细阅读文档,里面有很多例子!

正如 Matt 所建议的,您必须仔细阅读 Handling JavaFX Events 部分。

如果您只是在寻找示例,则必须尝试 KeyboardExample

注意如果您在尝试实现它时遇到问题,请发布您尝试过的代码!

【讨论】:

    【解决方案2】:

    或者,您可以尝试 JavaFX 中的 KeyCombination。以下是KeyCombination 文档的链接: KeyCombination 简单的例子如下:

    @FXML
    MenuItem menuItem;
    
    menuItem.setAccelerator(new KeyCodeCombination(KeyCode.M, KeyCombination.CONTROL_DOWN));
    

    我希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      【讨论】:

        【解决方案4】:

        大约一周后,我想通了!您需要添加一个 textField 并使用它来收集键盘数据。 代码如下:

        主要:

        package application;
        
        import java.io.IOException;
        
        import javafx.application.Application;
        import javafx.event.EventHandler;
        import javafx.fxml.FXML;
        import javafx.fxml.FXMLLoader;
        import javafx.scene.Group;
        import javafx.scene.Parent;
        import javafx.scene.Scene;
        import javafx.scene.control.Button;
        import javafx.scene.control.TextField;
        import javafx.scene.input.KeyEvent;
        import javafx.stage.Stage;
        
        public class Main extends Application {
        
        @FXML
        TextField textBox;
        public static void main(String[] args) {
            Application.launch(args);
        }
        
        public void start(Stage primaryStage){
                try {
                    Parent root = FXMLLoader.load(getClass().getResource("/fxml/Main.fxml"));
                    Scene scene = new Scene(root,600,400);
                    scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
                    primaryStage.setResizable(false);
                    primaryStage.setScene(scene);
                    primaryStage.setTitle("Keyboard test app");
                    primaryStage.show();
                } catch(Exception e) {
                    e.printStackTrace();
                }
        }
        }
        

        主控:

        package application;
        
        import java.net.URL;
        import java.util.ResourceBundle;
        
        import javafx.event.ActionEvent;
        import javafx.event.EventHandler;
        import javafx.fxml.FXML;
        import javafx.fxml.Initializable;
        import javafx.scene.control.Label;
        import javafx.scene.control.TextField;
        import javafx.scene.input.KeyEvent;
        import javafx.scene.shape.Polygon;
        
            public class MainControl implements Initializable {
        @FXML
        Polygon player_ship;
        @FXML
        TextField textBox;
        public void initialize(URL arg0, ResourceBundle arg1) {
         textBox.setPromptText("Write here");
        
            textBox.setOnKeyPressed(new EventHandler<KeyEvent>() {
                public void handle(KeyEvent ke) {
                    System.out.println("Key Pressed: " + ke.getText());
                }
            });
        
            textBox.setOnKeyReleased(new EventHandler<KeyEvent>() {
                public void handle(KeyEvent ke) {
                    System.out.println("Key Released: " + ke.getText());
            if(ke.getText().equalsIgnoreCase("b")){
                        System.out.println("Yay!");
            //What you want the computer to do goes here!
                    }
                }
            });
        }
        

        } applictation.css 可以是任何东西,而 main.fxml 只是在您想要启用键盘命令的任何地方都没有文本字段。此代码改编自:http://docs.oracle.com/javafx/2/events/convenience_methods.htm

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-08-24
          • 1970-01-01
          • 2023-04-02
          • 1970-01-01
          • 2016-07-17
          • 2016-02-26
          • 1970-01-01
          • 2015-09-19
          相关资源
          最近更新 更多