【发布时间】:2017-02-08 00:04:40
【问题描述】:
我有一个关于我用 Java 编写的计算器的问题,正如您将在代码中看到的那样,我创建了一个名为 buttonOnScreen() 的方法,当单击按钮时它会创建一个新的标签实例,并添加文本在按钮上并将其添加到 FlowPane,但我现在的问题是我必须单击任何按钮两次才能在 FlowPane 上获得一个数字。
package calculator;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.*;
import javafx.stage.Stage;
public class Gui extends Application {
//over here all gui initilisation
private Stage Window;
private Scene scene1;
private GridPane operationsgrid;
private BorderPane borderpane;
private FlowPane screen;
private Button add;
private Button subtract;
private Button multiply;
private Button divide;
private Button button1, button2, button3, button4, button5, button6, button7, button8, button9, button0, buttonequals, buttondot;
@Override
public void start(Stage primaryStage) throws Exception {
Window = primaryStage;
Window.setTitle("HackCalc");
//BUTTONS
button0 = new Button("0");
button0.setStyle("-fx-font: 30 arial; -fx-base: #b6e7c9;");
button1 = new Button("1");
button1.setStyle("-fx-font: 30 arial; -fx-base: #b6e7c9;");
button2 = new Button("2");
button2.setStyle("-fx-font: 30 arial; -fx-base: #b6e7c9;");
button3 = new Button("3");
button3.setStyle("-fx-font: 30 arial; -fx-base: #b6e7c9;");
button4 = new Button("4");
button4.setStyle("-fx-font: 30 arial; -fx-base: #b6e7c9;");
button5 = new Button("5");
button5.setStyle("-fx-font: 30 arial; -fx-base: #b6e7c9;");
button6 = new Button("6");
button6.setStyle("-fx-font: 30 arial; -fx-base: #b6e7c9;");
button7 = new Button("7");
button7.setStyle("-fx-font: 30 arial; -fx-base: #b6e7c9;");
button8 = new Button("8");
button8.setStyle("-fx-font: 30 arial; -fx-base: #b6e7c9;");
button9 = new Button("9");
button9.setStyle("-fx-font: 30 arial; -fx-base: #b6e7c9;");
buttonequals = new Button("=");
buttonequals.setStyle("-fx-font: 30 arial; -fx-base: #b6e7c9;");
buttondot = new Button(".");
buttondot.setStyle("-fx-font: 33 arial; -fx-base: #b6e7c9;");
buttondot.setAlignment(Pos.CENTER);
add = new Button("+");
add.setStyle("-fx-font: 30 arial");
subtract = new Button("-");
subtract.setStyle("-fx-font: 33 arial");
multiply = new Button("x");
multiply.setStyle("-fx-font: 30 arial");
divide = new Button("÷");
divide.setStyle("-fx-font: 30 arial");
//OPERATIONS GRID
operationsgrid = new GridPane();
operationsgrid.setPrefSize(300, 300);
operationsgrid.setAlignment(Pos.CENTER);
operationsgrid.setVgap(8);
operationsgrid.setHgap(10);
operationsgrid.setPadding(new Insets(0, 0, 10, 0));
GridPane.setConstraints(button1, 0, 0);
GridPane.setConstraints(button2, 1, 0);
GridPane.setConstraints(button3, 2, 0);
GridPane.setConstraints(button4, 0, 1);
GridPane.setConstraints(button5, 1, 1);
GridPane.setConstraints(button6, 2, 1);
GridPane.setConstraints(button7, 0, 2);
GridPane.setConstraints(button8, 1, 2);
GridPane.setConstraints(button9, 2, 2);
GridPane.setConstraints(button0, 0, 3);
GridPane.setConstraints(buttonequals, 2, 3);
GridPane.setConstraints(buttondot, 1, 3);
GridPane.setConstraints(add, 0, 4);
GridPane.setConstraints(subtract, 1, 4);
GridPane.setConstraints(multiply, 2, 4);
GridPane.setConstraints(divide, 1, 5);
operationsgrid.getChildren().addAll(button0, button1, button2, button3, button4, button5, button6, button7, button8, button9, buttonequals, buttondot, add, subtract, multiply, divide);
//SCREEN FLOWPANE
screen = new FlowPane();
screen.setPadding(new Insets(35, 10, 10, 10));
screen.setAlignment(Pos.TOP_CENTER);
borderpane = new BorderPane();
borderpane.setBottom(operationsgrid);
borderpane.setTop(screen);
scene1 = new Scene(borderpane, 400, 500);
Window.setScene(scene1);
Window.show();
//over here all input handling
add.setOnAction(event -> System.out.println("+"));
subtract.setOnAction(event -> System.out.println("-"));
multiply.setOnAction(event -> System.out.println("x"));
divide.setOnAction(event -> buttonOnScreen(divide));
button0.setOnAction(event -> buttonOnScreen(button0));
}
private void buttonOnScreen(Button button){
Button b;
b = button;
b.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
Label label = new Label(b.getText());
screen.getChildren().add(label);
label.setStyle("-fx-font: 40 arial");
}
});
}
}
在代码中,我使用了 Button0 和除法的方法,但是我必须单击它们两次才能将它们显示在屏幕上,非常感谢帮助。
另外,如果您在我的代码中有 cmets 以使其更清洁或类似的东西,请这样做:)
【问题讨论】:
标签: java user-interface javafx calculator