gpt4 book ai didi

java - 用java制作一个计算器,如何只允许数字输入

转载 作者:太空宇宙 更新时间:2023-11-04 07:43:00 24 4
gpt4 key购买 nike

IM 尝试使用 Java/eclipse 制作计算器。如何使文本区域只能输入数值?因此,当我运行该应用程序时,它运行得很好。所有按钮都运行良好。但我想让它只允许在文本区域输入数字。

    import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.LayoutManager;
import java.awt.TextField;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.text.ParseException;
import java.util.Scanner;

public class calculator_gui<reutrn> implements ActionListener {

JFrame frame = new JFrame("Calculator");
JPanel Panel = new JPanel (new java.awt.FlowLayout());

JTextArea text = new JTextArea(1,20);
JButton but1= new JButton("1");
JButton but2= new JButton("2");
JButton but3= new JButton("3");
JButton but4= new JButton("4");
JButton but5= new JButton("5");
JButton but6= new JButton("6");
JButton but7= new JButton("7");
JButton but8= new JButton("8");
JButton but9= new JButton("9");
JButton but0= new JButton("0");


JButton butadd= new JButton("+");
JButton butsub= new JButton("-");
JButton butmulti= new JButton("*");
JButton butdiv= new JButton("/");
JButton buteq= new JButton("=");
JButton butclear= new JButton("C");

Double number1,number2,result;
int addc=0,subc=0,multic=0,divc=0;



public void gui(){

Panel.setLayout(FlowLayout());
frame.setVisible(true);
frame.setBounds(100, 100, 450, 285);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// frame.setResizable(false);

frame.add(Panel);
Panel.setBackground(Color.green);

Panel.add(text);
text.setBounds(10, 32, 361, 29);



Panel.add(but1);
but1.setBackground(Color.red);
but1.setBounds(10, 81, 89, 23);

Panel.add(but2);
but2.setBounds(126, 81, 89, 23);

Panel.add(but3);
but3.setBounds(225, 81, 89, 23);

Panel.add(but4);
but4.setBounds(10, 115, 89, 23);

Panel.add(but5);
but5.setBounds(126, 115, 89, 23);

Panel.add(but6);
but6.setBounds(225, 115, 89, 23);

Panel.add(but7);
but7.setBounds(10, 149, 89, 23);

Panel.add(but8);
but8.setBounds(126, 149, 89, 23);

Panel.add(but9);
but9.setBounds(225, 149, 89, 23);

Panel.add(but0);
but0.setBounds(126, 183, 89, 23);

Panel.add(butadd);
butadd.setBounds(324, 81, 89, 23);

Panel.add(butsub);
butsub.setBounds(324, 115, 89, 23);

Panel.add(butmulti);
butmulti.setBounds(324, 183, 89, 23);

Panel.add(butdiv);
butdiv.setBounds(324, 149, 89, 23);

Panel.add(buteq);
buteq.setBounds(225, 183, 89, 23);

Panel.add(butclear);
butclear.setBounds(10, 183, 89, 23);





but1.addActionListener(this);
but2.addActionListener(this);
but3.addActionListener(this);
but4.addActionListener(this);
but5.addActionListener(this);
but6.addActionListener(this);
but7.addActionListener(this);
but8.addActionListener(this);
but9.addActionListener(this);
but0.addActionListener(this);
butadd.addActionListener(this);
butsub.addActionListener(this);
butmulti.addActionListener(this);
butdiv.addActionListener(this);
buteq.addActionListener(this);
butclear.addActionListener(this);






}

private LayoutManager FlowLayout() {
// TODO Auto-generated method stub
return null;
}

@Override
public void actionPerformed(ActionEvent e){

Object source = e.getSource();

if(source==butclear){

number1=0.0;
number2=0.0;
text.setText(null);

}


if(source==but1){
text.append("1");

}


if(source==but2){
text.append("2");

}

if(source==but3){
text.append("3");

}

if(source==but4){
text.append("4");

}

if(source==but5){
text.append("5");

}

if(source==but6){
text.append("6");

}

if(source==but7){
text.append("7");

}

if(source==but8){
text.append("8");

}

if(source==but9){
text.append("9");

}

if(source==but0){
text.append("0");

}
if(source==butadd){
number1=number_reader();
text.setText("");
addc=1;
subc=0;
multic=0;
divc=0;


}

if(source==butsub){
number1=number_reader();
text.setText("");
addc=0;
subc=1;
multic=0;
divc=0;


}
if(source==butmulti){
number1=number_reader();
text.setText("");
addc=0;
subc=0;
multic=1;
divc=0;


}
if(source==butdiv){
number1=number_reader();
text.setText("");
addc=0;
subc=0;
multic=0;
divc=1;


}



if(source==buteq){

number2=number_reader();
if(addc>0){
result=number1+number2;
text.setText(Double.toString(result));

}

if(subc>0){
result=number1-number2;
text.setText(Double.toString(result));
}

if(multic>0){
result=number1*number2;
text.setText(Double.toString(result));

}




}







if(divc>0){
result=number1/number2;
text.setText(Double.toString(result));

}


}




public double number_reader(){
Double num1;
String s;
s=text.getText();
num1=Double.valueOf(s);

return num1;


}




}

最佳答案

您可以做很多事情。

  • 设置javax.swing.InputVerifier在您的文本区域。这将防止人们在输入非法内容时退出。这可能还不够。
  • 设置自定义 Document对于JTextArea在它的构造函数中。使用您编写的 PlainDocument 的子类,您可以在其中覆盖其 insertText方法并拒绝非数字。这将处理打字和剪切粘贴。

如果你没有巨人,你下次尝试会做得更好actionPerformed所有数字和操作按钮的方法。相反,为每个按钮指定一个子类 AbstractAction 。数字按钮可以共享一个类的实例。

JComponent s,其中包括JButton s,可以具有客户端属性,因此您可以编写如下代码

JButton but1= new JButton("1");
but1.setClientProperty("digit", "1"); // Why a string?
// Suppose you have a switch to use hexadecimals?

然后可以访问按下的按钮的 Action 监听器可以调用 getClientProperty("digit")来找出用户选择的数字。只需少量投资,您就可以节省大量重复代码。

最后,学习模型- View - Controller 架构,或者MVC 。不要直接在文本区域上进行操作。如果没有 RFC,您在添加更多操作或切换到 RPN 计算器时会遇到很多问题。

  1. 创建模型:其中包含累加器和新操作数的对象。
  2. 创建 View :Swing 设置。
  3. 创建 Controller :执行工作的对象。您的操作应该是 Controller 要求做某事。 Controller 应该对模型执行此操作,然后模型或 Controller 应该刷新 View 。

另外,你的计算器类名有点奇怪。名称calculator_gui<reutrn>没有意义;为什么是通用的?为什么违反 Java 标准?就叫它Calculator .

已添加

发帖者希望我展示如何将按钮创建 coe 变成循环。因此,替换十行:

JButton but1= new JButton("1");
JButton but2= new JButton("2");
JButton but3= new JButton("3");
JButton but4= new JButton("4");
JButton but5= new JButton("5");
JButton but6= new JButton("6");
JButton but7= new JButton("7");
JButton but8= new JButton("8");
JButton but9= new JButton("9");
JButton but0= new JButton("0");

进入:

JButton[] digitButton = new JButton[10];  // digitButton is an arry of JButtons,
// Initialized to nulls.
for(final int i = 0; i < 10; i++) {
digitButton[i] = new JButton(Integer.toString(i)); // Convert 0 to "0", etc.
// Then make a button.
}

现在,为每个按钮提供其自己的操作监听器,而不是让主类为所有按钮提供一个操作监听器。

关于java - 用java制作一个计算器,如何只允许数字输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15756417/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com