首页 > 解决方案 > gui的问题

问题描述

我正在尝试打开一个带有 2 个文本框的窗口和一个带有运算符的下拉菜单。然后在每个文本框中输入一个数字并选择一个运算符,程序就会进行所需的数学运算。需要有 2 个类,响应 0 作为第二个数字,给出一个标签,如果它涉及除法,则不能除以 0(此消息需要是红色和一定的字体大小),当它是数学并将其作为标签输出(这也需要一定的颜色和大小)。在上周,我已经废弃并重做了至少 3 次此代码。我真的迷路了。


// Imports
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JComboBox;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.geometry.Pos;
import javafx.geometry.Insets;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.control.Label;

import javafx.application.Application;
import javafx.scene.control.TextField;

public class Test2Driver extends Application
{
    public static void main(String[] args) 
    {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception 
    {   
        String result = null;
        double num1 = 0;
        double num2 = 0;

        TextField num1TextField = new TextField();
        try
        {
            num1 = Double.parseDouble(num1TextField.getText());
        }
        catch(NumberFormatException e)
        {
            e.printStackTrace();
        }
        HBox num1TextBox = new HBox(150, num1TextField);
        num1TextBox.setAlignment(Pos.CENTER);

        TextField num2TextField = new TextField();
        try
        {
            num2 = Double.parseDouble(num2TextField.getText());
        }
        catch(NumberFormatException e)
        {
            e.printStackTrace();
        }
        HBox num2TextBox = new HBox(150, num2TextField);
        num2TextBox.setAlignment(Pos.CENTER);

        Label answer = new Label(result);
        HBox answerBox = new HBox(150, answer);
        answerBox.setAlignment(Pos.CENTER);
        answer.setTextFill(Color.BLACK);
        answerBox.setStyle("-fx-font-size: 36px;");

        String[] operators = {"", "+", "-", "*", "/", "%"};
        JComboBox<String> control = new JComboBox<>(operators);
        control.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event)
            {
                JComboBox control = (JComboBox)event.getSource();

                Object selected = control.getSelectedItem();

                if(selected.toString().equals(""))
                {
                    Calculator.blank();
                }
                else if(selected.toString().equals("+"))
                {
                    Calculator.add();
                }
                else if(selected.toString().equals("-"))
                {
                    Calculator.subtract();
                }
                else if(selected.toString().equals("*"))
                {
                    Calculator.multiply();
                }
                else if(selected.toString().equals("/"))
                {
                    Calculator.divide();
                }
                else if(selected.toString().equals("%"))
                {
                    Calculator.modulus();
                }
            }
        });

        VBox display = new VBox(num1TextBox, num2TextBox, answer);
        display.setAlignment(Pos.CENTER);
        display.setPadding(new Insets(10));

        Scene scene = new Scene(display);
        primaryStage.setWidth(400);
        primaryStage.setHeight(300);
        primaryStage.setScene(scene);
        primaryStage.setTitle("Calculator");
        primaryStage.show();
    }

    public class Calculator extends Test2Driver
    {
        public String blank(String result) 
        {
            result = "Error, pick an operator.";

            return result;
        }

        public String add(double num1, double num2, String result)
        {
            double sum;

            sum = num1 + num2;

            result = String.valueOf(sum);

            return result;
        }

        public String subtract(double num1, double num2, String result)
        {
            double difference;

            difference = num1 - num2;

            result = String.valueOf(difference);

            return result;
        }

        public String multiply(double num1, double num2, String result)
        {
            double product;

            product = num1 * num2;

            result = String.valueOf(product);

            return result;
        }

        public String divide(double num1, double num2, String result)
        {
            if(num2 == 0)
            {
                result = "Can not divide by 0!";

                return result;
            }
            else
            {
                double quotient;

                quotient = num1 / num2;

                result = String.valueOf(quotient);

                return result;
            }
        }

        public String modulus(double num1, double num2, String result)
        {
            if(num2 == 0)
            {
                result = "Can not divide by 0!";

                return result;
            }
            else
            {
                double modulus;

                modulus = num1 % num2;

                result = String.valueOf(modulus);

                return result;
            }
        }
    }
}

标签: javajavafx

解决方案


我检查了您的代码并发现了很多错误:为了使用以下行:

 answer.setTextFill(Color.BLACK);

您必须为 javafx 而不是 awt 导入正确的颜色:

//import java.awt.Color; use javafx.scene.paint.Color instead


//Imports
//import java.awt.Color; use javafx.scene.paint.Color instead
import javafx.scene.paint.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JComboBox;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.geometry.Pos;
import javafx.geometry.Insets;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.control.Label;

import javafx.application.Application;
import javafx.scene.control.TextField;    

public class Main extends Application {

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

@Override
public void start(Stage primaryStage) {
    try {
        String result = null;
        double num1 = 0;
        double num2 = 0;

        TextField num1TextField = new TextField();
        try
        {
            num1 = Double.parseDouble(num1TextField.getText());
        }
        catch(NumberFormatException e)
        {
            e.printStackTrace();
        }
        HBox num1TextBox = new HBox(150, num1TextField);
        num1TextBox.setAlignment(Pos.CENTER);

        TextField num2TextField = new TextField();
        try
        {
            num2 = Double.parseDouble(num2TextField.getText());
        }
        catch(NumberFormatException e)
        {
            e.printStackTrace();
        }
        HBox num2TextBox = new HBox(150, num2TextField);
        num2TextBox.setAlignment(Pos.CENTER);

        Label answer = new Label(result);
        HBox answerBox = new HBox(150, answer);
        answerBox.setAlignment(Pos.CENTER);
        answer.setTextFill(Color.BLACK);
        answerBox.setStyle("-fx-font-size: 36px;");

        String[] operators = {"", "+", "-", "*", "/", "%"};
        JComboBox<String> control = new JComboBox<>(operators);

        final double finalNum1 = num1;
        final double finalNum2 = num2;
        control.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event)
            {
                //Create instance of Calculator class
                Calculator calc = new Calculator();

                JComboBox control = (JComboBox)event.getSource();

                Object selected = control.getSelectedItem();

                if(selected.toString().equals(""))
                {
                    calc.blank();
                }
                else if(selected.toString().equals("+"))
                {
                    calc.add(finalNum1, finalNum2, "");
                }
                else if(selected.toString().equals("-"))
                {
                    calc.subtract(finalNum1, finalNum2, "");
                }
                else if(selected.toString().equals("*"))
                {
                    calc.multiply(finalNum1, finalNum2, "");
                }
                else if(selected.toString().equals("/"))
                {
                    calc.divide(finalNum1, finalNum2, "");
                }
                else if(selected.toString().equals("%"))
                {
                    calc.modulus(finalNum1, finalNum2, "");
                }
            }
        });

        VBox display = new VBox(num1TextBox, num2TextBox, answer);
        display.setAlignment(Pos.CENTER);
        display.setPadding(new Insets(10));

        Scene scene = new Scene(display);
        primaryStage.setWidth(400);
        primaryStage.setHeight(300);
        primaryStage.setScene(scene);
        primaryStage.setTitle("Calculator");
        primaryStage.show();
    } catch(Exception e) {
        e.printStackTrace();
    }
   }

    public class Calculator extends Main
    {
        public String blank() 
        {
            String result;
            result = "Error, pick an operator.";

            return result;
        }

        public String add(double num1, double num2, String result)
        {
            double sum;

            sum = num1 + num2;

            result = String.valueOf(sum);

            return result;
        }

        public String subtract(double num1, double num2, String result)
        {
            double difference;

            difference = num1 - num2;

            result = String.valueOf(difference);

            return result;
        }

        public String multiply(double num1, double num2, String result)
        {
            double product;

            product = num1 * num2;

            result = String.valueOf(product);

            return result;
        }

        public String divide(double num1, double num2, String result)
        {
            if(num2 == 0)
            {
                result = "Can not divide by 0!";

                return result;
            }
            else
            {
                double quotient;

                quotient = num1 / num2;

                result = String.valueOf(quotient);

                return result;
            }
        }

        public String modulus(double num1, double num2, String result)
        {
            if(num2 == 0)
            {
                result = "Can not divide by 0!";

                return result;
            }
            else
            {
                double modulus;

                modulus = num1 % num2;

                result = String.valueOf(modulus);

                return result;
            }
        }
    }
}

推荐阅读