JavaFX, TextFields, EventHandler - PullRequest
       0

JavaFX, TextFields, EventHandler

0 голосов
/ 11 февраля 2019

Я просто изучаю JavaFX и смотрю учебники.Это много информации для обработки, поэтому я начинаю с простого приложения BMI Calculator.Я не включаю класс BMI, но у него есть конструктор: BMI (двойной рост, двойной вес, пол строки)

Проблемы:

  1. Мой EventHandler не работает.Я пытался сделать то же самое, что и учебник, но я не могу заставить его работать.Я попытался с простой печать, если eventSource = кнопка

  2. Таким образом, у меня будет 3 TextFields, где пользователь вводит 3 указанных значения, рост, вес пола.Когда пользователь делает это, я хочу использовать свой класс BMI и создать новый BMI, используя эти 3 значения.Я нашел метод: "textfield.getAccesibleText (); Возможно, это могло бы сработать, но я не могу узнать, так как мой обработчик событий не работает.

В общем, пользователь должен нажатьКнопка «Рассчитать» после ввода 3 значений, затем я создам Bmi, используя мой класс Bmi, и отобразю значение этого Bmi в новом окне (мне нужно будет добавить поле, в котором Bmi) отобразится позже.

Получите Eventhandler, работающий с возможностью получения значений из текстовых полей (например, сканера), создайте новый Bmi, создайте новое поле, в котором я буду отображать значение этого Bmi (у меня есть метод в моем BMIкласс, который вычисляет ИМТ

public class Main extends Application  {
Button b1;
Button b2;
Text g;
Text w; 
Text h; 

TextField g1; 
TextField w1;
TextField h1; 
@Override


public void start(Stage stage) throws Exception{

 g = new Text("Gender:");
 w = new Text("Weight:");
 h = new Text("Height");
 g1 = new TextField();
 w1 = new TextField();
 h1 = new TextField();



b1 = new Button("Calculate BMI!");
b2 = new Button("Reset BMI");

GridPane grid = new GridPane();

grid.setMinSize(400, 200);

grid.setPadding(new Insets(10, 10, 10, 10));
  grid.setVgap(5); 
  grid.setHgap(5);

  grid.setAlignment(Pos.CENTER); 

  grid.add(g, 0, 0);
  grid.add(g1, 1, 0);
  grid.add(w, 0, 1);
  grid.add(w1, 1, 1);
  grid.add(h, 0, 2);
  grid.add(h1, 1, 2);
  grid.add(b1, 0, 3);
  grid.add(b2, 1, 3);

  b1.setStyle("-fx-background-color: purple; -fx-text-fill: white;"); 
  b2.setStyle("-fx-background-color: purple; -fx-text-fill: white;");
  grid.setStyle("-fx-background-color: GREEN;"); 

  Scene scene = new Scene(grid);

  stage.setScene(scene);

  stage.show();


}


public void handle(ActionEvent event){
    if(event.getSource() == b1){
    //do something
}
}



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



}}

1 Ответ

0 голосов
/ 11 февраля 2019

Кажется, у вас есть метод для обработки события action, но сам обработчик никогда не присоединяется ни к кнопкам, ни к текстовым полям.Для этого вам необходимо предоставить реализацию интерфейса EventHandler , например:

button.addEventHandler(ActionEvent.ACTION, (ActionEvent event) -> {
    // your code here
});

Подробнее см. Работа с обработчиками событий .

Однако, как упомянул @kleopatra, лучшей практикой является предоставление обработчика событий, используя соответствующий метод setOnXxx(), например:

button.setOnAction((ActionEvent event) -> {
    // your code here
});

Знаете ли вы, как "собрать "пользовательский ввод в текстовые файлы, как сканер, затем создать новый Bmi с ними и, наконец, отобразить это число в новом поле или что-то подобное.

Здесь вы должны выяснить бизнес-модель, чтобы сгенерировать класс или классы, которые будут хранить данные из элементов управления.Хорошим кандидатом является BmiData POJO следующим образом:

public class BmiData {

    private String gender;
    private Double height;
    private Double weight;

    // Constructor, getters and setters

    public Double calculateBmi() {
        // perform the calculation here
    }
}

Тогда обработчик событий, прикрепленный к кнопке «Рассчитать BMI», является хорошим кандидатом для сбора данных из текстовых полей в BmiDataобъект и, наконец, отобразить результат для пользователя.Я бы посоветовал вам взглянуть на шаблон проектирования MVC (Model-View-Controller).

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