簡體   English   中英

JavaFX、文本字段、事件處理程序

[英]JavaFX, TextFields, EventHandler

我只是在學習 JavaFX 和看教程。 它有很多信息需要處理,所以我從一個簡單的 BMI 計算器應用程序開始。 我不包括 BMI 類,但它有一個構造函數:BMI(雙倍身高,雙倍體重,字符串性別)

問題:

  1. 我的 EventHandler 不工作。 我試圖做與教程相同的事情,但我無法讓它工作。 我嘗試了一個簡單的 Print if eventSource = button

  2. 所以我將有 3 個文本字段,用戶可以在其中輸入 3 個指定的值,身高,體重性別。 當用戶這樣做時,我想使用我的 BMI 類並使用這 3 個值創建一個新的 BMI。 我找到了一個方法:“textfield.getAccesibleText(); 也許這可以工作,但我無法找到,因為我的事件處理程序不工作。

總而言之,用戶應該在輸入 3 個值后按下“計算”按鈕,然后我將使用我的 Bmi 類創建一個 Bmi,並在一個新框中顯示該 Bmi 的值。 (我將不得不添加 Bmi)稍后顯示的框。

讓 Eventhandler 工作,能夠從文本字段(如掃描儀)中獲取值,創建一個新的 Bmi,創建一個新框,我將在其中顯示該 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);



}}

看起來您有處理動作事件的方法,但處理程序本身從未附加到按鈕和文本字段。 為此,您需要提供一個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(模型-視圖-控制器)設計模式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM