首页 > 解决方案 > 控制器类中的按钮事件处理程序不起作用

问题描述

你好我有两个问题。

第一个:
当我启动我的应用程序时,我可以按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);
                }
            }
        });
    }
}

标签: javajavafxfxml

解决方案


起初@c0der提到你还没有被事件处理程序

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

通过一些搜索进行编辑我在stackoverflow中发现了另一个类似的问题


推荐阅读