Java 两个文本字段中的setText(),具体取决于用户单击的位置
我有一个作业,我必须使用JavaFX创建一个函数计算器。 我们需要创建3个文本字段,一个用于第一个num,一个用于第二个num,一个用于结果。 我快做完了。但是如何让程序将PI粘贴到用户正在编辑的文本字段上呢?这是我的代码: 请帮忙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
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;
}
}