当前位置: 首页 > 面试题库 >

JavaFX begginer的简单计算器事件处理

时宾实
2023-03-14
问题内容

嘿,我是Java的初学者,而且我只是做了很短的时间,无论如何,对于我的Java基础项目,我需要用gui做一个简单的计算器,我想不是那样的辛苦但是我有点错:P我已经尽了最大的努力(我认为),但是在操作的事件处理和设置要计算的值上陷入了atm,这是我的代码,请您给我一些建议或技巧关于如何做到这一点: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周。非常感谢


问题答案:

我不会为您做作业,只是一些技巧:

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

考虑一下按下按钮时您期望发生的情况:

  • 如果按5’-‘’+‘55,计算器应该怎么做。应该从5中减去还是加55)
  • 您要计算多个操作吗?(5 + 5 + 5 + 5/5)
  • 十进制数呢?(您无法在当前的设计中填写它们)

您可以为每个按钮执行几乎相同的操作(或者至少有10个按钮具有相同的逻辑),您可以循环创建应用程序:

 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);

}

}


 类似资料:
  • 问题内容: 首先,这不是一个作业问题。我正在练习有关Java的知识。我想一个很好的方法是编写一个没有帮助的简单程序。不幸的是,我的编译器告诉我我不知道如何解决的错误。在不更改大量逻辑和代码的情况下,有人可以指出我的一些错误在哪里吗?谢谢 问题答案: 这会工作

  • 本文向大家介绍JS处理一些简单计算题,包括了JS处理一些简单计算题的使用技巧和注意事项,需要的朋友参考一下 我们先来看下运行后的效果: 接下来我们分享给大家全部代码: 其中的JS代码以及样式大家可以在需要用到的时候灵活变换,感谢你对呐喊教程的支持。

  • 本文向大家介绍JavaScript编写简单的计算器,包括了JavaScript编写简单的计算器的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript编写简单计算器的代码。分享给大家供大家参考。具体如下: 运行效果截图如下: 具体代码如下 js代码: 关于计算器的精彩文章请查看《计算器专题》 ,更多精彩等你来发现! 一个简单的计算器就是这样实现的,大家也可以利用javascri

  • 这个挑战是创建一个简单的代数计算器,使用你所学到的关于解析的一切。你将需要设计一种语言,用于使用变量进行基本数学运算,为该语言创建 ABNF,并为其编写扫描器,解析器,分析器和解释器。这实际上对于简单的计算器语言可能是小题大做,因为不会有任何嵌套的结构,如函数,但是无论如何都要理解完整的过程。 挑战练习 简单的代数语言对于不同的人来说意思也不同,所以我希望你试试 Unix 命令bc。这是我运行bc

  • 本文向大家介绍JS简单计算器实例,包括了JS简单计算器实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS简单计算器的实现方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的javascript程序设计有所帮助。

  • 本文向大家介绍js实现简单计算器,包括了js实现简单计算器的使用技巧和注意事项,需要的朋友参考一下 参考部分资料,编写一个简单的计算器案例,虽然完成了正常需求,但是也有不满之处,待后续实力提升后再来补充,先把不足之处列出:   1:本来打算只要打开页面,计算器的输入框会显示一个默认为0的状态,但是在输入框加入默认显示为0的时候,选择数据输入时,该0会显示输入数字的前面,例如”0123“,由于能力有