[英]Java FX Scene Builder How to make event key pressed
我是Java和Java FX的新手,我正在尝试使用场景生成器制作一个带有按钮的面板。 我希望我的应用程序仅在按下箭头键时做出响应。 我在Controller
类中做了以下方法:
public void keyPressed(KeyEvent key) {
switch(key.getCode()) {
...some code here
}
}
之后,我在场景生成器中选择了此方法,但是当我运行我的应用程序时,按箭头键没有任何反应。 有人可以帮我吗?
没有看到其余的代码和FXML,很难说,这里是完整的示例
您错过的可能事情
码
public class Main extends Application {
private class Controller {
@FXML // <== perhaps you had this missing??
void keyPressed(KeyEvent event) {
switch (event.getCode()) {
case LEFT:
case KP_LEFT:
System.out.println("to the left");
break;
case RIGHT:
case KP_RIGHT:
System.out.println("to the right");
break;
default:
break;
}
}
}
@Override
public void start(Stage primaryStage) throws Exception {
FXMLLoader loader = new FXMLLoader(getClass().getResource("/foo.fxml"));
loader.setController(new Controller());
primaryStage.setScene(new Scene(loader.load()));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
XML文件
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.RowConstraints?>
<GridPane onKeyPressed="#keyPressed" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<Button mnemonicParsing="false" text="Button" />
</children>
</GridPane>
KeyCode还允许与特定键进行比较
@FXML
private void keyPressed(KeyEvent keyEvent)
if (keyEvent.getCode() == KeyCode.ENTER) {
// do some actions
}
}
您可以从此处获取所有关键代码。 不使用开关是一种好方法。
KeyCode
具有isArrowKey()
方法,因此,如果您从事件处理程序中调用keyPressed
方法,则可以执行以下操作:
public void keyPressed(KeyEvent key){
if(key.getCode().isArrowKey()){
...some code here
}
}
如果需要根据按下的箭头键做不同的事情,请确保将开关盒与KeyCode.UP
/ DOWN
/ LEFT
/ RIGHT
进行比较。 如果是这样,则可能是由于线程问题导致您未正确设置事件处理程序或GUI挂起。 如果需要更多帮助,请张贴您在哪里处理活动。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.