我创建了一个简单的计算器,其中我在两个不同的文本字段中接受两个操作数的输入,并且运行良好。但是我需要从同一个文本字段中获取两个输入。我应该做些什么改变?
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class Calculation_ActionEvent extends JFrame implements ActionListener
{
JFrame f;
JLabel l;
JTextField tf1, tf2, tf3;
JButton b1, b2, b3, b4 ,b5, b6;
Calculation_ActionEvent(String s)
{
f = new JFrame("Calculation");
f.setLayout(null);
l = new JLabel("Enter two numbers : ");
tf1 = new JTextField();
tf2 = new JTextField();
tf3 = new JTextField();
b1 = new JButton("+");
b2 = new JButton("-");
b3 = new JButton("*");
b4 = new JButton("/");
b5 = new JButton("equals");
b6 = new JButton("C");
f.add(l);
f.add(tf1);
f.add(tf2);
f.add(tf3);
f.add(b1);
f.add(b2);
f.add(b3);
f.add(b4);
f.add(b5);
f.add(b6);
tf1.setBounds(180,100,50,30);
tf2.setBounds(320,100,50,30);
tf3.setBounds(250,420,50,30);
b1.setBounds(250,180,50,30);
b2.setBounds(350,260,50,30);
b3.setBounds(150,260,50,30);
b4.setBounds(250,340,50,30);
b5.setBounds(230,260,90,30);
b6.setBounds(250,100,50,30);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
//b5.addActionListener(this);
b6.addActionListener(this);
f.setSize(550,550);
f.setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
int num1= Integer.parseInt(tf1.getText());
int num2= Integer.parseInt(tf2.getText());
String s1 = e.getActionCommand();
if(s1.equals("C"))
{
tf1.setText("0");
tf2.setText("0");
tf3.setText("0");
}
else
{
if(s1=="+")
{
tf3.setText(String.valueOf(num1+num2));
}
if(s1=="-")
{
tf3.setText(String.valueOf(num1-num2));
}
if(s1=="*")
{
tf3.setText(String.valueOf(num1*num2));
}
if(s1=="/")
{
tf3.setText(String.valueOf(num1/num2));
}
}
}
public static void main(String... s)
{
new Calculation_ActionEvent("Calculation");
}
}
最佳答案
这会是您想要的东西吗?我为您做了一个快速的版本。
简而言之,我将最后一个运算符(+
,-
,*
,/
)存储在String
变量(lastAction
)中,而total
作为int
。当按下“等于”时,我算出总数并重置total
变量和lastAction
。当按下一个运算符时,我改变总数,但将最后一个值保留在变量中。
package cf.pgmann.calc;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
class Calculation_ActionEvent extends JFrame implements ActionListener {
JFrame f;
JLabel l;
JTextField tf1, tf3;
JButton b1, b2, b3, b4, b5, b6;
Calculation_ActionEvent(String s) {
f = new JFrame(s);
f.setLayout(null);
l = new JLabel("Enter two numbers : ");
tf1 = new JTextField();
// tf2 = new JTextField();
tf3 = new JTextField();
b1 = new JButton("+");
b2 = new JButton("-");
b3 = new JButton("*");
b4 = new JButton("/");
b5 = new JButton("equals");
b6 = new JButton("C");
f.add(l);
f.add(tf1);
f.add(tf3);
f.add(b1);
f.add(b2);
f.add(b3);
f.add(b4);
f.add(b5);
f.add(b6);
tf1.setBounds(160, 100, 250, 30);
// tf2.setBounds(320,100,50,30);
tf3.setBounds(250, 420, 50, 30);
b1.setBounds(250, 180, 50, 30);
b2.setBounds(350, 260, 50, 30);
b3.setBounds(150, 260, 50, 30);
b4.setBounds(250, 340, 50, 30);
b5.setBounds(230, 260, 90, 30);
b6.setBounds(420, 100, 50, 30);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
b5.addActionListener(this);
b6.addActionListener(this);
f.setSize(550, 550);
f.setVisible(true);
}
int total = 0;
String lastAction = "";
public void actionPerformed(ActionEvent e) {
int num = 0;
try {
num = Integer.parseInt(tf1.getText());
} catch(NumberFormatException ex) {}
String s1 = e.getActionCommand();
if (s1.equals("C")) {
tf1.setText("");
tf3.setText("0");
tf1.requestFocus();
total = 0;
} else if (s1.equals("equals")) {
tf3.setText(String.valueOf(calc(total, lastAction, num)));
tf1.setText("");
tf1.requestFocus();
total = 0;
} else {
total = total==0 ? num : calc(total, lastAction, num);
tf3.setText(String.valueOf(total));
tf1.setText("");
tf1.requestFocus();
lastAction = s1;
}
}
private int calc(int num1, String action, int num2) {
switch (action) {
case "+":
return num1 + num2;
case "-":
return num1 - num2;
case "*":
return num1 * num2;
case "/":
return num1 / num2;
default:
return num1;
}
}
public static void main(String... s) {
new Calculation_ActionEvent("Calculator");
}
}
关于java - 如何在AWT/SWING中的同一文本字段中输入两位数字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34768656/