JavaFX,TextFields,EventHandler

时间:2019-02-11 20:39:20

标签: java javafx

我正在学习JavaFX并观看教程。 它需要处理很多信息,所以我从一个简单的开始 BMI计算器应用程序。 我不包括BMI类,但是它具有以下构造函数: BMI(双高,双重,字符串性别)

问题:

  1. 我的EventHandler无法正常工作。我尝试做与教程相同的操作,但是无法正常工作。我尝试使用简单的Print if eventSource = button

  2. 因此,我将有3个TextField,用户可以在其中输入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);



}}

1 个答案:

答案 0 :(得分:1)

似乎您具有处理操作事件的方法,但是处理程序本身从未附加到按钮或文本字段上。为此,您需要提供一个EventHandler接口实现,例如:

minheight

有关更多详细信息,请参见Working with Event Handlers

但是@kleopatra提到的一种更好的做法是使用适当的Sub sheetFormat() Dim sn As Integer, formatRng As Range sn = ThisWorkbook.Sheets.Count 'To format the last worksheet in this workbook Set formatRng = ThisWorkbook.Sheets(sn).Range("B4:H50") Dim p As Integer, q As Integer, lastColStr As String p = formatRng.Row 'first row of the range q = formatRng.Rows.Count + p - 1 'last row of the range lastColStr = Mid(Cells(1, Columns.Count).Address, 2, 3) 'Last column Name (XFD on my machine) ' Making Cells in the range "XFD4:XFD50" have 40pt Arial font With ThisWorkbook.Sheets(sn).Range(lastColStr & p & ":" & lastColStr & q) .Font.Name = "Arial" .Font.Size = 40 End With formatRng.WrapText = True formatRng.VerticalAlignment = xlCenter 'I added this one just to see the whole contents of the cell formatRng.Rows.AutoFit End Sub 方法来提供事件处理程序,例如:

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

  

您是否还知道如何“收集”文本文件中的用户输入(如扫描仪),然后用它们创建新的Bmi,最后在新框中或类似的地方显示该数字。

在这里您需要弄清楚业务模型以便生成一个或多个将保存控件数据的类。一个不错的候选人是setOnXxx() POJO,如下所示:

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

然后,附加到“计算BMI”按钮的事件处理程序是将文本字段中的数据收集到BmiData对象中并最终将结果显示给用户的不错的选择。我建议您研究一下MVC(模型-视图-控制器)设计模式。