Java 两个文本字段中的setText(),具体取决于用户单击的位置

Java 两个文本字段中的setText(),具体取决于用户单击的位置,java,javafx,Java,Javafx,我有一个作业,我必须使用JavaFX创建一个函数计算器。 我们需要创建3个文本字段,一个用于第一个num,一个用于第二个num,一个用于结果。 我快做完了。但是如何让程序将PI粘贴到用户正在编辑的文本字段上呢?这是我的代码: 请帮忙 public class Calculator extends Application{ double ans; int t=6; @Override public void start(Stage primaryStage){ GridPan

我有一个作业,我必须使用JavaFX创建一个函数计算器。 我们需要创建3个文本字段,一个用于第一个num,一个用于第二个num,一个用于结果。 我快做完了。但是如何让程序将PI粘贴到用户正在编辑的文本字段上呢?这是我的代码: 请帮忙

public class Calculator extends Application{
    double ans;
    int t=6;
 @Override
 public void start(Stage primaryStage){
 GridPane pane = new GridPane();
 pane.setHgap(10);
 pane.setVgap(10);
 pane.setAlignment(Pos.CENTER);
 pane.setPadding(new Insets(10, 10, 10, 10));

 HBox hbox = new HBox();
 TextField t1 = new TextField();
 TextField t2 = new TextField();
 TextField t3 = new TextField();
 
 if(t1.getText().length() > 5){
     t1.setText(t1.getText().substring(0, t));
     t3.setText("Error! maximum 5 digits");
 }
 
 hbox.setAlignment(Pos.TOP_CENTER);

 
 Button b1 = new Button("AC"); b1.setAlignment(Pos.CENTER); pane.add(b1,0,3);
 Button b2 = new Button("PI");b2.setAlignment(Pos.CENTER); pane.add(b2,1,3);
 Button b3 = new Button("Sqrt");b3.setAlignment(Pos.CENTER);pane.add(b3,2,3);
 Button b4 = new Button("DEL");b4.setAlignment(Pos.CENTER);pane.add(b4,3,3);
 Button b5 = new Button("7");b4.setAlignment(Pos.CENTER);pane.add(b5,0,4);
 Button b6 = new Button("8");b6.setAlignment(Pos.CENTER);pane.add(b6,1,4);
 Button b7 = new Button("9");b7.setAlignment(Pos.CENTER);pane.add(b7,2,4);
 Button b8 = new Button("/");b8.setAlignment(Pos.CENTER);pane.add(b8,3,4);
 Button b9 = new Button("4");b9.setAlignment(Pos.CENTER);pane.add(b9,0,5);
 Button b10 = new Button("5");b10.setAlignment(Pos.CENTER);pane.add(b10,1,5);
 Button b11 = new Button("6");b11.setAlignment(Pos.CENTER);pane.add(b11,2,5);
 Button b12 = new Button("*");b12.setAlignment(Pos.CENTER);pane.add(b12,3,5);
 Button b13 = new Button("1");b13.setAlignment(Pos.CENTER);pane.add(b13,0,6);
 Button b14 = new Button("2");b14.setAlignment(Pos.CENTER);pane.add(b14,1,6);
 Button b15 = new Button("3");b15.setAlignment(Pos.CENTER);pane.add(b15,2,6);
 Button b16= new Button("-");b16.setAlignment(Pos.CENTER);pane.add(b16,3,6);
 Button b17 = new Button("=");b17.setAlignment(Pos.CENTER);pane.add(b17,0,7);
 Button b18 = new Button("0");b18.setAlignment(Pos.CENTER); pane.add(b18,1,7);
 Button b19 = new Button(".");b19.setAlignment(Pos.CENTER);pane.add(b19,2,7);
 Button b20 = new Button("+");b20.setAlignment(Pos.CENTER);pane.add(b20,3,7);
 
 
 b1.setOnAction((ActionEvent e) -> {
     t1.setText("");
     t2.setText("");
     t3.setText("");
 }); 
 b4.setOnAction((ActionEvent e) -> {
     t3.setText("");
 }); 
 b3.setOnAction((ActionEvent e) -> {
     ans=(Math.sqrt(Double.parseDouble(t1.getText())));
     t3.setText(ans + "");
 }); 
   b20.setOnAction((ActionEvent e) -> {
       ans=Double.parseDouble(t1.getText()) +Double.parseDouble(t2.getText());
       t3.setText(ans + "");
 }); 
    b16.setOnAction((ActionEvent event) -> {
        ans=Double.parseDouble(t1.getText()) - Double.parseDouble(t2.getText());
        t3.setText(ans + "");
 }); 
b12.setOnAction((ActionEvent event) -> { 
    ans=Double.parseDouble(t1.getText()) * Double.parseDouble(t2.getText());
    t3.setText(ans + "");
 }); 
b8.setOnAction((ActionEvent event) -> { 
    ans=Double.parseDouble(t1.getText()) /Double.parseDouble(t2.getText());
    t3.setText(ans + "");
 }); 


b2.setOnAction((ActionEvent event) -> {
    ans= (Math.PI);
   
    if(t1.isFocused()){
    t1.setText(String.valueOf(ans));}
    else if(t2.isFocused()){
        t2.setText(String.valueOf(ans));
    }
 }); 

/*
t1.setOnMouseClicked((event) -> {
    if(b2.isPressed()){
    ans= (Math.PI);
    t1.setText(String.valueOf(ans));}
 }); 
t2.setOnMouseClicked((event) -> {
    if(b2.isPressed()){
    ans= (Math.PI);
    t2.setText(String.valueOf(ans));}
 }); 
*/
 

 hbox.getChildren().addAll(t1,t2,t3);
 BorderPane bp = new  BorderPane();
 bp.setTop(hbox);
 bp.setCenter(pane);
 Scene scene = new Scene(bp);
 primaryStage.setTitle("Nora's Functional Calculator");
 primaryStage.setScene(scene);
 primaryStage.show();
 }
 
 public static void main(String[] args) {
launch (args);
 }
}

添加一些内容来跟踪哪个字段最后有焦点。字段:

    private TextField lastFocused;
还有一些听众:

        t1.focusedProperty().addListener((ObservableValue<? extends Boolean> observable, Boolean lost, Boolean gained) -> {
            if (gained) {
                lastFocused = t1;
            }
        });
        t2.focusedProperty().addListener((ObservableValue<? extends Boolean> observable, Boolean lost, Boolean gained) -> {
            if (gained) {
                lastFocused = t2;
            }
        });
您可能还希望将lastFocused初始化为t1,并在设置该值时自动在t1和t2之间切换。将文本字段设为成员变量,并使用方法注入正确的字段:

    private void setTextOfLastFocusedField(String val) {
        if (lastFocused != null) {
            lastFocused.setText(val);
        }
        if (lastFocused == t1) {
            lastFocused = t2;
        } else {
            lastFocused = t1;
        }
    }

嗨@swpalmer请给你推特id。
    private void setTextOfLastFocusedField(String val) {
        if (lastFocused != null) {
            lastFocused.setText(val);
        }
        if (lastFocused == t1) {
            lastFocused = t2;
        } else {
            lastFocused = t1;
        }
    }