Кнопка EventHandler в классе Controller не работает
Здравствуйте, у меня есть две проблемы.
Первый:
Когда я запускаю свое приложение, я могу нажать 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 ответ
Сначала, как заметил @c0der, вы еще не получили обработчик событий
как button
отключен через button.setDisabled(true)
поэтому он не может принимать какие-либо события, такие как события мыши и клавиши, видят, что документ javafx
Редактировать с помощью поиска я нашел другой похожий вопрос в stackru