JavaFX (с FXML) Добавление событий Action для кнопок - PullRequest
0 голосов
/ 04 января 2019

У меня есть сборка FXML-файла с Scene-Builder с необходимыми идентификаторами fx: ids и следующим контроллером:

public class LaunchLogin extends Application{

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

@Override
public void start (Stage primaryStage) throws Exception {
    //ResourceLoader rl = ResourceLoader.getInstance();
    FXMLLoader loader = new FXMLLoader();
    loader.setLocation(getClass().getResource("/gfx/gui/LoginScreenUI.fxml"));
    Parent root = loader.load();
    Scene scene = new Scene(root);
    scene.getStylesheets().add("/gfx/gui/cogfitStyle.css");
    primaryStage.setScene(scene);
    primaryStage.setTitle ("CogFit");
    primaryStage.show();
}
@FXML
Button btn_newUser;


@FXML
Button btn_changePW;

@FXML
Button btn_send;

@FXML
private void test(ActionEvent event)
{
    System.out.println("success");
}
}

Теперь я хочу добавить действия к кнопкам.Как я могу это сделать?Я не могу найти то, что связано с FXML-файлами.

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Синтаксис для добавления обработчиков событий через FXML описывается Введение в FXML .Он использует символ # вместе с соответствующим атрибутом onXXX.Например, если у вас есть следующий контроллер:

package example;

import javafx.event.ActionEvent;  
import javafx.fxml.FXML;

public class Controller {

    @FXML
    private void printHelloWorld(ActionEvent event) {
        event.consume();
        System.out.println("Hello, World!");
    }

}

Тогда файл FXML может выглядеть примерно так:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.layout.StackPane?>

<StackPane xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1"
           fx:controller="example.Controller" prefWidth="500" prefHeight="300">

    <Button text="Click me!" onAction="#printHelloWorld"/>

</StackPane>

Это можно настроить с помощью Scene Builder, щелкнув нужный узели перейдем к панели «Код» с правой стороны.Будут поля для различных свойств onXXX, а также поле для fx:id.

enter image description here

0 голосов
/ 04 января 2019

В Scene Builder в разделе «Код» есть поле onAction. Вы должны поместить имя метода в ваш класс контроллера там. Или добавьте следующий код в свойства кнопки в файле FXML:

onAction="#method"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...