如何将键盘命令添加到预先存在的javafx场景?

时间:2014-05-30 02:14:48

标签: java keyboard javafx scene

我一直试图找出如何将键盘命令添加到预先存在的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(){

}
}

这真的有帮助,谢谢。

4 个答案:

答案 0 :(得分:1)

请仔细阅读文档,其中包含大量示例!

正如马特建议您必须仔细阅读 Handling JavaFX Events 部分。

如果您只是想寻找一个例子,那么您必须尝试 KeyboardExample

N.B。如果您在尝试实施时遇到问题,请发布您尝试过的代码!

答案 1 :(得分:1)

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

@FXML
MenuItem menuItem;

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

我希望这会有所帮助。

答案 2 :(得分:0)

这就是键盘的工作方式。

https://wiki.openjdk.java.net/display/OpenJFX/Keyboard+Navigation

而且我认为你可能意味着一种叫做助记符的东西

http://docs.oracle.com/javase/8/javafx/api/javafx/scene/input/Mnemonic.html

答案 3 :(得分:0)

大约一个星期后我发现了!您需要添加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