java - 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;
}
}
}
}
解决方案
我检查了您的代码并发现了很多错误:为了使用以下行:
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;
}
}
}
}
推荐阅读
- css - CSS 每日计划布局上的粘性顶栏和侧栏
- jinja2 - Jinja2 - 如何根据 if else 条件为变量赋值?
- python - 如何在 Python 列表中的特定元素之后删除列表中的元素(切片不适用)
- php - 使用 google drive api v3 复制文件返回“提供的文件 ID 不可用。”
- java - 为什么强迫人们编译/构建 JAR 文件而不是仅仅托管 JAR 文件本身?
- iis - ASP.NET CORE 5.0 Web API 在 IIS Express 上工作,但在 IIS 10 上托管时提供 404
- apache-spark - 通过从另一列解析字符串来创建列
- python-3.x - 将 selenium 与 2captcha 集成以解决 Recapv2
- go - 方法执行期间内存消耗高
- wordpress - 是否可以使用 Go 将现有的 CRD 添加到自定义 Kubernetes 运算符中?