求JAVA用Eclipse写个简易的计算器。
做出来是这样的。(布局按钮还有功能。主要是功能部分)用最少的代码写出,跪求高手说下(急需)谢谢了。没分了不好意思。还有不能有BUG的...
做出来是这样的。
(布局 按钮 还有功能。主要是功能部分)用最少的代码写出,
跪求高手说下(急需)谢谢了。 没分了 不好意思 。
还有不能有BUG的 展开
(布局 按钮 还有功能。主要是功能部分)用最少的代码写出,
跪求高手说下(急需)谢谢了。 没分了 不好意思 。
还有不能有BUG的 展开
2个回答
展开全部
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Calculator extends JFrame implements ActionListener {
private final String[] KEYS = { "7", "8", "9", "c", "4", "5", "6",
"+", "1", "2", "3", "-", "0", "*", "/","=" };
//计算器上按键的显示名
private JButton keys[] = new JButton[KEYS.length];
// 计算器上按键的按钮
private JTextField resultText = new JTextField("0");
//计算结果文本框
private boolean firstDigit = true;
//标志用户按的是否是整个表达式的第一个数字,或者是运算符后的第一个数字
private double resultNum = 0.0;
//计算的中间结果
private String operator = "=";
//当前运算的运算符
private boolean operateValidFlag = true; // 操作是否合法
////构造函数
public Calculator ()
{
super();
init(); //初始化计算器
this.setBackground(Color.lightGray); //设置计算器的背景颜色
this.setTitle("计算器");
this.setLocation(100,100);//在屏幕(100,100)坐标处显示计算器
this.setResizable(false);//不许修改计算器的大小
this.setSize(300,250); //使计算器中各组件大小合适
}
////初始化计算器
private void init()
{
resultText.setHorizontalAlignment(JTextField.RIGHT); // 文本框中的内容采用右对齐方式
resultText.setEditable(false); // 不允许修改结果文本框
resultText.setBackground(Color.white); // 设置文本框背景颜色为白色
JPanel calckeysPanel = new JPanel();
//初始化计算器上按键的按钮,将键放在一个画板内
calckeysPanel.setLayout(new GridLayout(4, 4, 10, 15));//用网格布局器,4行,5列的网格,网格之间的水平方向间隔为10个象,垂直方向间隔为15个象素
calckeysPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));//添加画板的边框
for (int i = 0; i < KEYS.length; i++)
{
keys[i] = new JButton(KEYS[i]);
calckeysPanel.add(keys[i]);
}
//整体布局
getContentPane().setLayout(new BorderLayout(3, 5));
getContentPane().add("North", resultText);
getContentPane().add("Center", calckeysPanel);
//为各按钮添加事件侦听器
//都使用同一个事件侦听,即本对象.本类的声明中有implements ActionListener
for (int i = 0; i < KEYS.length; i++)
{
keys[i].addActionListener(this);
}
}
////处理事件
public void actionPerformed(ActionEvent e)
{
String label = e.getActionCommand();//获取事件源的标签
if (e.getSource()==keys[3])
{
handleC(); //用户按了"C"键
}
else if ("0123456789.".indexOf(label) >= 0)
{
handleNumber(label);//用户按了数字键或者小数点键
}
else
{
handleOperator(label); //用户按了运算符键
}
}
////处理数字键被按下的事件
private void handleNumber(String key)
{
if (firstDigit) //输入的第一个数字
{
resultText.setText(key);
}
else if ((key.equals(".")) && (resultText.getText().indexOf(".") < 0))
//输入的是小数点,并且之前没有小数点,则将小数点附在结果文本框的后面
{
resultText.setText(resultText.getText() + ".");
}
else if (!key.equals("."))
//如果输入的不是小数点,则将数字附在结果文本框的后面
{
resultText.setText(resultText.getText() + key);
}
firstDigit = false; //以后输入的肯定不是第一个数字了
}
////处理C键被按下的事件
private void handleC()
{
//初始化计算器的各种值
resultText.setText("0");
firstDigit = true;
operator = "=";
}
////处理运算符键被按下的事件
private void handleOperator(String key)
{
if (operator.equals("/")) //除法运算
{
if (getNumberFromText() == 0.0)
//如果当前结果文本框中的值等于0,操作不合法
{
operateValidFlag = false;
resultText.setText("除数不能为零");
}
else
{
resultNum /= getNumberFromText();
}
}
else if (operator.equals("+"))//加法运算
{
resultNum += getNumberFromText();
}
else if (operator.equals("-"))//减法运算
{
resultNum -= getNumberFromText();
}
else if (operator.equals("*")) //乘法运算
{
resultNum *= getNumberFromText();
}
else if (operator.equals("="))//赋值运算
{
resultNum = getNumberFromText();
}
if (operateValidFlag) //双精度浮点数的运算
{
long t1;
double t2;
t1 = (long) resultNum;
t2 = resultNum - t1;
if (t2 == 0) {
resultText.setText(String.valueOf(t1));
} else {
resultText.setText(String.valueOf(resultNum));
}
}
operator = key;//运算符等于用户按的按钮
firstDigit = true;
operateValidFlag = true;
}
////从结果文本框中获取数字
private double getNumberFromText()
{
double result = 0;
try
{
result = Double.valueOf(resultText.getText()).doubleValue();
}
catch (NumberFormatException e)
{}
return result;
}
public static void main(String args[])
{
Calculator calculator1 = new Calculator ();
calculator1.setVisible(true);
calculator1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
凑合写了一个,不过这计算器功能真是少。
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Calculator extends JFrame implements ActionListener {
private final String[] KEYS = { "7", "8", "9", "c", "4", "5", "6",
"+", "1", "2", "3", "-", "0", "*", "/","=" };
//计算器上按键的显示名
private JButton keys[] = new JButton[KEYS.length];
// 计算器上按键的按钮
private JTextField resultText = new JTextField("0");
//计算结果文本框
private boolean firstDigit = true;
//标志用户按的是否是整个表达式的第一个数字,或者是运算符后的第一个数字
private double resultNum = 0.0;
//计算的中间结果
private String operator = "=";
//当前运算的运算符
private boolean operateValidFlag = true; // 操作是否合法
////构造函数
public Calculator ()
{
super();
init(); //初始化计算器
this.setBackground(Color.lightGray); //设置计算器的背景颜色
this.setTitle("计算器");
this.setLocation(100,100);//在屏幕(100,100)坐标处显示计算器
this.setResizable(false);//不许修改计算器的大小
this.setSize(300,250); //使计算器中各组件大小合适
}
////初始化计算器
private void init()
{
resultText.setHorizontalAlignment(JTextField.RIGHT); // 文本框中的内容采用右对齐方式
resultText.setEditable(false); // 不允许修改结果文本框
resultText.setBackground(Color.white); // 设置文本框背景颜色为白色
JPanel calckeysPanel = new JPanel();
//初始化计算器上按键的按钮,将键放在一个画板内
calckeysPanel.setLayout(new GridLayout(4, 4, 10, 15));//用网格布局器,4行,5列的网格,网格之间的水平方向间隔为10个象,垂直方向间隔为15个象素
calckeysPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));//添加画板的边框
for (int i = 0; i < KEYS.length; i++)
{
keys[i] = new JButton(KEYS[i]);
calckeysPanel.add(keys[i]);
}
//整体布局
getContentPane().setLayout(new BorderLayout(3, 5));
getContentPane().add("North", resultText);
getContentPane().add("Center", calckeysPanel);
//为各按钮添加事件侦听器
//都使用同一个事件侦听,即本对象.本类的声明中有implements ActionListener
for (int i = 0; i < KEYS.length; i++)
{
keys[i].addActionListener(this);
}
}
////处理事件
public void actionPerformed(ActionEvent e)
{
String label = e.getActionCommand();//获取事件源的标签
if (e.getSource()==keys[3])
{
handleC(); //用户按了"C"键
}
else if ("0123456789.".indexOf(label) >= 0)
{
handleNumber(label);//用户按了数字键或者小数点键
}
else
{
handleOperator(label); //用户按了运算符键
}
}
////处理数字键被按下的事件
private void handleNumber(String key)
{
if (firstDigit) //输入的第一个数字
{
resultText.setText(key);
}
else if ((key.equals(".")) && (resultText.getText().indexOf(".") < 0))
//输入的是小数点,并且之前没有小数点,则将小数点附在结果文本框的后面
{
resultText.setText(resultText.getText() + ".");
}
else if (!key.equals("."))
//如果输入的不是小数点,则将数字附在结果文本框的后面
{
resultText.setText(resultText.getText() + key);
}
firstDigit = false; //以后输入的肯定不是第一个数字了
}
////处理C键被按下的事件
private void handleC()
{
//初始化计算器的各种值
resultText.setText("0");
firstDigit = true;
operator = "=";
}
////处理运算符键被按下的事件
private void handleOperator(String key)
{
if (operator.equals("/")) //除法运算
{
if (getNumberFromText() == 0.0)
//如果当前结果文本框中的值等于0,操作不合法
{
operateValidFlag = false;
resultText.setText("除数不能为零");
}
else
{
resultNum /= getNumberFromText();
}
}
else if (operator.equals("+"))//加法运算
{
resultNum += getNumberFromText();
}
else if (operator.equals("-"))//减法运算
{
resultNum -= getNumberFromText();
}
else if (operator.equals("*")) //乘法运算
{
resultNum *= getNumberFromText();
}
else if (operator.equals("="))//赋值运算
{
resultNum = getNumberFromText();
}
if (operateValidFlag) //双精度浮点数的运算
{
long t1;
double t2;
t1 = (long) resultNum;
t2 = resultNum - t1;
if (t2 == 0) {
resultText.setText(String.valueOf(t1));
} else {
resultText.setText(String.valueOf(resultNum));
}
}
operator = key;//运算符等于用户按的按钮
firstDigit = true;
operateValidFlag = true;
}
////从结果文本框中获取数字
private double getNumberFromText()
{
double result = 0;
try
{
result = Double.valueOf(resultText.getText()).doubleValue();
}
catch (NumberFormatException e)
{}
return result;
}
public static void main(String args[])
{
Calculator calculator1 = new Calculator ();
calculator1.setVisible(true);
calculator1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
凑合写了一个,不过这计算器功能真是少。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询