JavaFX begginer的简单计算器事件处理 [英] JavaFX begginer's simple calculator event handling

查看:274
本文介绍了JavaFX begginer的简单计算器事件处理的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

嘿,我是java的初学者,我只是在短时间内这样做,无论如何我最后的java基础项目我需要用gui制作一个简单的计算器,我认为它赢了'是那么难,但我有点不对劲:P我已经设法做了最多(我认为),但我坚持与事件处理操作和设置值计算,这是我的代码,你能不能给我有关如何操作的建议或提示:D

Hey I'm a begginer at java and i've only been doing this for a short period of time, anyways for my final project in java basics i need to make a simple calculator with a gui, i thought it won't be that hard but i was kinda wrong :P i have managed to do the most (i think) but am stuck atm with the event handling for the operations and setting the value to calculate, here is my code and could you please give me suggestions or tips on how to do it :D

import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.application.Application;
import javafx.beans.binding.Bindings;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.value.WritableObjectValue;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.FlowPane;
import javafx.stage.Stage;



public class Calculator extends Application {

    private DoubleProperty value = new SimpleDoubleProperty();

    @Override
    public void start(Stage primaryStage) {

        FlowPane pane = new FlowPane();
        pane.setAlignment(Pos.CENTER);
        pane.setPadding(new Insets ( 30 , 20 , 30 , 20));
        pane.setHgap(5);
        pane.setVgap(5);
        pane.setMinWidth(400);
        pane.setPrefWidth(400);
        pane.setMaxWidth(400);

        TextField Rezultat = new TextField();
        Rezultat.setEditable(false);
        Rezultat.setAlignment(Pos.CENTER);
        Rezultat.setMinSize(336, 40);
        Rezultat.textProperty().bind(Bindings.format("%.0f" , value));
        pane.getChildren().add(Rezultat);

        Button sedmica = new Button("7");           
        Button osmica = new Button("8");
        Button devetka = new Button("9");
        Button plus = new Button("+");

            sedmica.setMinSize(80, 80);
            osmica.setMinSize(80, 80);
            devetka.setMinSize(80, 80);
            plus.setMinSize(80, 80);

    pane.getChildren().add(sedmica);
        sedmicaHandler handler7 = new sedmicaHandler();
        sedmica.setOnAction(handler7);
    pane.getChildren().add(osmica);
        osmicaHandler handler8 = new osmicaHandler();
        osmica.setOnAction(handler8);
    pane.getChildren().add(devetka);
        devetkaHandler handler9 = new devetkaHandler();
        devetka.setOnAction(handler9);
    pane.getChildren().add(plus);
        plusHandler handlerplus = new plusHandler();
        plus.setOnAction(handlerplus);

        Button cetvorka = new Button("4");
        Button petica = new Button("5");
        Button sestica = new Button("6");
        Button minus = new Button("-");

            cetvorka.setMinSize(80, 80);
            petica.setMinSize(80, 80);
            sestica.setMinSize(80, 80);
            minus.setMinSize(80, 80);

    pane.getChildren().add(cetvorka);
        cetvorkaHandler handler4 = new cetvorkaHandler();
        cetvorka.setOnAction(handler4);
    pane.getChildren().add(petica);
        peticaHandler handler5 = new peticaHandler();
        petica.setOnAction(handler5);
    pane.getChildren().add(sestica);
        sesticaHandler handler6 = new sesticaHandler();
        sestica.setOnAction(handler6);
    pane.getChildren().add(minus);
        minusHandler handlerminus = new minusHandler();
        minus.setOnAction(handlerminus);

        Button trica = new Button("3");
        Button dvica = new Button("2");
        Button jedinica = new Button("1");
        Button puta = new Button("*");

            trica.setMinSize(80, 80);
            dvica.setMinSize(80, 80);
            jedinica.setMinSize(80, 80);
            puta.setMinSize(80, 80);

    pane.getChildren().add(jedinica);
        jedinicaHandler handler1 = new jedinicaHandler();
        jedinica.setOnAction(handler1);
    pane.getChildren().add(dvica);
        dvicaHandler handler2 = new dvicaHandler();
        dvica.setOnAction(handler2);
    pane.getChildren().add(trica);
        tricaHandler handler3 = new tricaHandler();
        trica.setOnAction(handler3);
    pane.getChildren().add(puta);
        putaHandler handlerputa = new putaHandler();
        puta.setOnAction(handlerputa);

        Button nula = new Button("0");
        Button jednako = new Button("=");
        Button podijeljeno = new Button("/");
        Button EE = new Button ("EE");

            nula.setMinSize(80, 80);
            jednako.setMinSize(80, 80);
            podijeljeno.setMinSize(80, 80);
            EE.setMinSize(80, 80);

    pane.getChildren().add(EE);
        EEHandler handlerEE = new EEHandler();
        EE.setOnAction(handlerEE);
    pane.getChildren().add(nula);
        nulaHandler handler0 = new nulaHandler();
        nula.setOnAction(handler0);
    pane.getChildren().add(jednako);
        jednakoHandler handlerjednako = new jednakoHandler();
        jednako.setOnAction(handlerjednako);
    pane.getChildren().add(podijeljeno);
        podijeljenoHandler handlerpodijeljeno = new podijeljenoHandler();
        podijeljeno.setOnAction(handlerpodijeljeno);



    Scene scene = new Scene(pane);
    primaryStage.setTitle("Calculator");
    primaryStage.setScene(scene);
    primaryStage.show();

    }

    public static void main (String[] args) {
    Application.launch(args);  

    }

}

class nulaHandler implements EventHandler<ActionEvent>{
        @Override
    public void handle(ActionEvent e){
        value.set(0);
    }
}
class jedinicaHandler implements EventHandler<ActionEvent>{
        @Override
    public void handle(ActionEvent e){
        System.out.println("1");
    }
}           
class dvicaHandler implements EventHandler<ActionEvent>{
        @Override
    public void handle(ActionEvent e){
        System.out.println("2");
    }   
}
class tricaHandler implements EventHandler<ActionEvent>{
        @Override
    public void handle(ActionEvent e){
        System.out.println("3");
    }
}           
class cetvorkaHandler implements EventHandler<ActionEvent>{
        @Override
    public void handle(ActionEvent e){
        System.out.println("4");
    }
}
class peticaHandler implements EventHandler<ActionEvent>{
        @Override
    public void handle(ActionEvent e){
        System.out.println("5");
    }
}                   
class sesticaHandler implements EventHandler<ActionEvent>{
        @Override
    public void handle(ActionEvent e){
        System.out.println("6");
    }
}                       
class sedmicaHandler implements EventHandler<ActionEvent>{
        @Override
    public void handle(ActionEvent e){
        System.out.println("7");
    }
}                           
class osmicaHandler implements EventHandler<ActionEvent>{
        @Override
    public void handle(ActionEvent e){
        System.out.println("8");
    }
}                               
class devetkaHandler implements EventHandler<ActionEvent>{
        @Override
    public void handle(ActionEvent e){
        System.out.println("9");
    }
}                                   
class plusHandler implements EventHandler<ActionEvent>{
        @Override
    public void handle(ActionEvent e){
        System.out.println("+");
    }
}                                       
class minusHandler implements EventHandler<ActionEvent>{
        @Override
    public void handle(ActionEvent e){
        System.out.println("-");
    }
}                                           
class putaHandler implements EventHandler<ActionEvent>{
        @Override
    public void handle(ActionEvent e){
        System.out.println("*");
    }
}
class podijeljenoHandler implements EventHandler<ActionEvent>{
        @Override
    public void handle(ActionEvent e){
        System.out.println("/");
    }
}                                                   
class jednakoHandler implements EventHandler<ActionEvent>{
        @Override
    public void handle(ActionEvent e){
        System.out.println("=");
    }
}                                                       
class EEHandler implements EventHandler<ActionEvent>{
        @Override
    public void handle(ActionEvent e){
        System.out.println("EE");
    }
}

我的处理程序只是基本的,它们打印的数字进入控制台所以你可以忽略它们,我看到了一些带有value.set命令的例子我应该和它们一起使用还是?请帮助截止日期为2周。非常感谢

My handlers are just basic ones, they print the number into the console so you can disregard them, i saw some examples with the value.set commands should i go with them or ? please help deadline is in 2 weeks. Thanks a lot

推荐答案

我不会为你做功课,只是提示一些:

I will not do the homework for you, but just a few tips:


  • 变量名称应以小写字母开头(TextField rezultat,而不是Rezultat)

想想按下按钮时你预期会发生什么:

think about what exactly you expect to happen when you press the buttons:


  • 如果按5,你的计算器应该做什么' - ''+'55。它应该从5减去或增加55)

  • 你想计算多个操作吗? (5 + 5 + 5 + 5/5)

  • 十进制数怎么样? (根据你目前的设计你不能填写它们)

你为每个按钮做的几乎都是一样的。(或者至少10个按钮你有相同的逻辑)
你可以循环创建你的应用程序:

And you do nearly the same thing for every button.(or at least for 10 buttons you have the same logic) you can create your application in a loop:

 public class Calculator extends Application {

 private TextField textField = new TextField(); 

 @Override
 public void start(Stage primaryStage) {

    List<String> buttons = Arrays.asList("7", "8", "9", "+", "4", "5", "6", "-", "1", "2", "3", "*", "0", "=", "/", "EE");

    FlowPane pane = new FlowPane();
    pane.setAlignment(Pos.CENTER);
    pane.setPadding(new Insets(30, 20, 30, 20));
    pane.setHgap(5);
    pane.setVgap(5);
    pane.setMinWidth(400);
    pane.setPrefWidth(400);
    pane.setMaxWidth(400);

    textField.setEditable(false);
    textField.setAlignment(Pos.CENTER);
    textField.setMinSize(336, 40);
    // Rezultat.textProperty().bind(Bindings.format("%.0f", value));
    pane.getChildren().add(textField);

    for (String button : buttons) {
        Button b = new Button(button);
        b.setMinSize(80, 80);
        pane.getChildren().add(b);
        b.setOnAction((e) -> doSomething(b.getText()));
    }

    Scene scene = new Scene(pane);
    primaryStage.setTitle("Calculator");
    primaryStage.setScene(scene);
    primaryStage.show();

}

private void doSomething(String text) {

    if (text.equalsIgnoreCase("=")) {
        // Calc
    }

    else if (text.equalsIgnoreCase("EE")) {
        // EE
    } else if (text.equalsIgnoreCase("+") || text.equalsIgnoreCase("-") || text.equalsIgnoreCase("*") || text.equalsIgnoreCase("/")) {
        // + - * /
    }
    // ....
    else {
        // numeric
        textField.appendText(text);
    }
}

public static void main(String[] args) {
    Application.launch(args);

}

}

这篇关于JavaFX begginer的简单计算器事件处理的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆