Controller类中的按钮EventHandler无法正常工作

时间:2018-12-16 02:22:56

标签: java javafx fxml

你好,我有两个问题。

第一个:
启动我的应用程序时,可以使用空格键按下ToggleButton

第二个:
(即使没有ToggleButton,我在按钮上的EventHandler也无法正常工作,按下空格键也无济于事。

主类:

public class Main extends Application {
    @Override
    public void start(Stage stage) throws IOException {

        Parent parent = (Parent) FXMLLoader.load(getClass().getResource("/application/MainView.fxml"));
        Scene scene = new Scene(parent);
        scene.getRoot().setFocusTraversable(true);
        stage.setScene(scene);
        stage.setTitle("Login Page");
        stage.show();
    }

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

Fxml文件:

<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="501.0" prefWidth="597.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.MainController">
   <children>
      <Button fx:id="button" layoutX="136.0" layoutY="184.0" mnemonicParsing="false"  prefHeight="133.0" prefWidth="127.0" text="Button" />
      <Label fx:id="label" layoutX="199.0" layoutY="106.0" prefHeight="61.0" prefWidth="198.0" text="Label" />
      <ToggleButton fx:id="toggleButton" layoutX="318.0" layoutY="186.0" mnemonicParsing="false" prefHeight="133.0" prefWidth="127.0" text="ToggleButton" />
   </children>
</AnchorPane> 

控制器类:

public class MainController implements Initializable {
    @FXML
    private Button button;
    @FXML
    private Label label;
    @FXML
    private ToggleButton toggleButton;
    @Override
    public void initialize(URL arg0, ResourceBundle arg1) {
        button.setDisable(true);
        button.addEventFilter(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() {
            @Override
            public void handle(KeyEvent event) {
                if (event.getCode() == KeyCode.SPACE) {
                    System.out.println("space pressed");
                    button.setDisable(false);
                }
            }
        });
        button.addEventFilter(KeyEvent.KEY_RELEASED, new EventHandler<KeyEvent>() {
            @Override
            public void handle(KeyEvent event) {
                if (event.getCode() == KeyCode.SPACE) {
                    System.out.println("space pressed");
                    button.setDisable(true);
                }
            }
        });
    }
}

1 个答案:

答案 0 :(得分:0)

起初如 @ c0der 所述,您尚未被暗杀事件处理程序

由于button已通过button.setDisabled(true)禁用,因此它无法接收任何事件,例如鼠标和按键事件,请参见that javafx doc

通过一些搜索

编辑,我在stackoverflow

中发现了另一个类似的问题