本文内容列表:
让我给你一个。
导入java.awt.BorderLayout;
导入java.awt.Color;
导入java.awt.GridLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.JTextField;
/**
* 与 Windows 附件附带的标准版计算器具有类似功能和界面的计算器。
* 但尚不支持键盘操作。
*/
公共类计算器扩展了 JFrame 实现了 ActionListener {
/** 显示计算器按键名称 */
私有最终字符串[] KEYS = { "7", "8", "9", "/", "sqrt", "4", "5", "6",
"*"、"%"、"1"、"2"、"3"、"-"、"1/x"、"0"、"+/-"、"."、"+" , "= };
/** 显示计算器功能键名称 */
private Final String[] COMMAND = { "Backspace", "CE", "C" };
/**计算器左侧M的显示名称*/
private Final String[] M = { " ", "MC", "MR", "MS", "M+" };
/** 计算器上的按钮 */
私有 JButton 密钥[] = new JButton[KEYS.length];
/** 计算器上的功能键按钮 */
私有 JButton 命令[] = new JButton[COMMAND.length];
/** 计算器左侧的 M 按钮 */
私有 JButton m[] = new JButton[M.length];
/**计算结果文本框*/
私有 JTextField resultText = new JTextField("0");
//表示用户按下的是整个表达式的第一个数字还是运算符后的第一个数字
私有布尔值firstDigit = true;
//计算的中间结果。
私有双结果Num = 0.0;
//当前操作的运算符
私有字符串运算符 = "=;
//操作合法吗?
私有布尔操作ValidFlag = true;
/**
* 构造函数
*/
公共计算器(){
超级();
//初始化计算器
init();
//设置计算器背景颜色
this.setBackground(Color.LIGHT_GRAY);
this.setTitle("计算器");
//在屏幕(500, 300)坐标处显示计算器
this.setLocation(500, 300);
//不要修改计算器的大小
this.setResizable(false);
//使计算器中的元件大小合适
this.pack();
}
/**
* 初始化计算器
*/
private void init() {
//文本框内容右对齐
resultText.setHorizontalAlignment(JTextField.RIGHT);
//不允许修改结果文本框
resultText.setEditable(false);
//设置文本框背景色为白色
resultText.setBackground(Color.white);
//初始化计算器上的按钮,并将按键放在画板中
JPanel calckeysPanel = new JPanel();
//使用网格布局,4行5列的网格,网格之间水平间隔为3像素,垂直间隔为3像素
calckeysPanel.setLayout(new GridLayout(4, 5, 3, 3));
for (int i = 0; i KEYS.length; i++) {
keys[i] = new JButton(KEYS[i]);
calckeysPanel.add(keys[i]);
keys[i].setForeground(www.sychzs.cn);
}
//操作键标为红色,其他键标为蓝色
keys[3].setForeground(www.sychzs.cn);
keys[8].setForeground(www.sychzs.cn);
keys[13].setForeground(www.sychzs.cn);
keys[18].setForeground(www.sychzs.cn);
keys[19].setForeground(www.sychzs.cn);
//初始化功能键全部用红色标记。将功能键放置在画板中
JPanel 命令面板 = new JPanel();
//使用网格布局器,1行3列的网格,网格之间水平间隔为3像素,垂直间隔为3像素
commandsPanel.setLayout(new GridLayout(1, 3, 3, 3));
for (int i = 0; i COMMAND.length; i++) {
commands[i] = new JButton(COMMAND[i]);
commandsPanel.add(commands[i]);
commands[i].setForeground(www.sychzs.cn);
}
//初始化M键,标记为红色,将M键放在画板中
JPanel calmsPanel = new JPanel();
//使用网格布局管理器,5行1列的网格,网格之间的水平间隔为3像素,垂直间隔为3像素
calmsPanel.setLayout(new GridLayout(5, 1, 3, 3));
for (int i = 0; i M.length; i++) {
m[i] = new JButton(M[i]);
calmsPanel.add(m[i]);
m[i].setForeground(www.sychzs.cn);
}
//以下是计算器的整体布局,将计算器和命令画板放在计算器的中间,
//将文本框放在计算器的北边,平静画板放在计算器的西边。
//新建一个大画板,将上面创建的命令和计算器画板放在画板中
JPanel panel1 = new JPanel();
//画板使用边框布局管理器,画板中组件之间的水平和垂直间隔均为3像素
panel1.setLayout(new BorderLayout(3, 3));
panel1.add("北",commandPanel);
panel1.add("西", calckeysPanel);
//创建画板放置文本框
JPanel 顶部 = new JPanel();
top.setLayout(new BorderLayout());
top.add("中心", resultText);
//整体布局
getContentPane().setLayout(new BorderLayout(3, 5));
getContentPane().add("北", 顶部);
getContentPane().add("中心", panel1);
getContentPane().add("西", calmsPanel);
//为每个按钮添加事件监听
//都使用同一个事件监听器,就是this对象。该类的声明包括实现 ActionListener
for (int i = 0; i KEYS.length; i++) {
keys[i].addActionListener(this);
}
for (int i = 0; i COMMAND.length; i++) {
commands[i].addActionListener(this);
}
for (int i = 0; i M.length; i++) {
m[i].addActionListener(this);
}
}
/**
* 处理事件
*/
public void actionPerformed(ActionEvent e) {
//获取事件源的标签
字符串标签 = e.getActionCommand();
if (label.equals(COMMAND[0])){
//用户按下了“退格”键
handleBackspace();
} else if (label.equals(COMMAND[1])) {
//用户按下了“CE”键
resultText.setText("0");
} else if (label.equals(COMMAND[2])){
//用户按下了“C”键
handleC();
} else if ("0123456789.".indexOf(label) = 0) {
//用户按下了数字键或小数点键
handleNumber(标签);
//处理零(零);
} 其他 {
//用户按下操作键
handleOperator(标签);
}
}
/**
* 处理按下 Backspace 键时的事件
*/
私有无效handleBackspace(){
字符串文本 = resultText.getText();
int i = text.length();
if (i 0) {
//退格键,删除文本最后一个字符
text = text.substring(0, i - 1);
if (text.length() == 0) {
//如果文字没有内容,则初始化计算器的各个值
resultText.setText("0");
第一个数字 = true;
运算符=“=”;
} 其他 {
//显示新文本
resultText.setText(文本);
}
}
}
/**
* 处理按下数字键时的事件
* @参数键
*/
private void handleNumber(String key) {
if(第一个数字){
//输入的第一个数字
resultText.setText(key);
} else if ((key.equals(".")) (resultText.getText().indexOf(".") 0)){
//如果输入的是小数点,并且前面没有小数点,则小数点会追加到结果文本框的末尾
resultText.setText(resultText.getText() + ".");
} else if (!key.equals(".")) {
//如果输入不是小数点,则将数字追加到结果文本框末尾
resultText.setText(resultText.getText() + key);
}
//你输入的下一个数字肯定不是第一个数字
第一个数字 = false;
}
/**
* 处理按下 C 键时的事件
*/
私有无效handleC(){
//初始化计算器的各种值
resultText.setText("0");
第一个数字 = true;
运算符=“=”;
}
/**
* 处理按下操作键时的事件
* @参数键
*/
private void handleOperator(String key) {
if (operator.equals("/")) {
//除法运算
//如果当前结果文本框中的值等于0
if (getNumberFromText() == 0.0){
//操作非法
operateValidFlag = false;
resultText.setText("除数不能为零");
} 其他 {
resultNum /= getNumberFromText();
}
} else if (operator.equals("1/x")) {
//倒数运算
if (resultNum == 0.0){
//操作非法
operateValidFlag = false;
resultText.setText("零没有倒数");
} 其他 {
结果数 = 1 / 结果数;
}
} else if (operator.equals("+")){
//加法运算
resultNum += getNumberFromText();
} else if (operator.equals("-")){
//减法运算
resultNum -= getNumberFromText();
} else if (operator.equals("*")){
//乘法运算
resultNum *= getNumberFromText();
} else if (operator.equals("sqrt")) {
//平方根运算
resultNum = Math.sqrt(resultNum);
} else if (operator.equals("%")){
//百分号运算,除以100
结果数=结果数/100;
} else if (operator.equals("+/-")){
//正负数的运算
结果数 = 结果数 * (-1);
} else if (operator.equals("=")){
//赋值操作
resultNum = getNumberFromText();
}
if(操作有效标志){
//双精度浮点数的运算
长t1;
双t2;
t1 = (长) resultNum;
t2 = 结果数 - t1;
if (t2 == 0) {
resultText.setText(String.valueOf(t1));
} 其他 {
resultText.setText(String.valueOf(resultNum));
}
}
//操作符等于用户按下的按钮
操作符 = 键;
第一个数字 = true;
operateValidFlag = true;
}
/**
* 从结果文本框中获取数字
* @return
*/
私有双 getNumberFromText() {
双结果 = 0;
尝试{
result = Double.valueOf(resultText.getText()).doubleValue();
} catch (NumberFormatException e){
}
返回结果;
}
public static void main(String args[]) {
计算器calculator1 = new Calculator();
calculator1.setVisible(true);
calculator1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
导入java.awt.*;
导入java.awt.event.*;
import javax.swing.*;//引导包
类 MyClass 扩展了 JFrame
//创建MyClass类,继承JFrame框架的窗口类,
//也就是说JFrame中MyClass的所有功能都可以实现
{
JLabel a1=new JLabel("第一个数字");
//创建一个显示“第一个数字”的标签
JLabel a2=new JLabel("第二个数字");
JLabel a3=new JLabel("操作结果");
JTextField b1=new JTextField(5);
//创建一个文本框,默认长度为5,用于输入算术数字。当然也可以默认为空
JTextField b2=new JTextField(5);
JTextField b3=new JTextField(5);
//创建标签,用于显示操作结果。您还可以创建标签来显示
JButton a=new JButton("添加");
//创建加法计算按钮,点击时进行加法操作
JButton b=new JButton("减号");
JButton c=new JButton("多个");
JButton d=new JButton("除了");
JPanel jp1=new JPanel();//创建面板放置控件
JPanel jp2=new JPanel();
JPanel jp3=new JPanel();
MyClass()//构造函数,用于初始化
{
setLayout(new GridLayout(3,1));//添加四行四列的布局管理器
jp1.setLayout(new FlowLayout());//设置JP1面板为流程布局管理器
jp1.setLayout(new FlowLayout());
//将四个控件a1、b1、a2、b2添加到jp1面板
jp1.add(a1);
jp1.add(b1);
jp1.add(a2);
jp1.add(b2);
jp1.add(a3);
//在jp2面板中添加a、b、c、d四个控件
jp2.add(a);
jp2.add(b);
jp2.add(c);
jp2.add(d);
jp3.add(a3);
jp3.add(b3);
//在窗口中添加三个面板jp1、jp2、jp3
添加(jp1);
添加(jp3);
添加(jp2);
对象 e;
a.addActionListener(new ActionListener()
//创建匿名事件监听器
{
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
double x=Double.valueOf(b1.getText().toString());
//获取第一个输入的数字,并将其从String类型转换为double类型
double y=Double.valueOf(b2.getText().toString());
//获取第二个输入数字,并将其从String类型转换为double类型
b3.setText(""+(x+y));
//将运算结果显示在文本框中b3
}
});
b.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
double x=Double.valueOf(b1.getText().toString());
double y=Double.valueOf(b2.getText().toString());
b3.setText(""+(x-y));
}
});
c.addActionListener(new ActionListener()//创建匿名事件监听器
{
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
double x=Double.valueOf(b1.getText().toString());
double y=Double.valueOf(b2.getText().toString());
b3.setText(""+(x*y));
}
});
d.addActionListener(new ActionListener()//创建匿名事件监听器
{
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
double x=Double.valueOf(b1.getText().toString());
double y=Double.valueOf(b2.getText().toString());
//因为0不能作为除数,所以这里需要进行判断
if(y==0)
{
b3.setText("错误");
}
其他
{
b3.setText(""+(x/y));
}
}
});
//下面是设置窗口的属性
this.setTitle("Calculator");//设置窗口标题
//this.setSize(400,400);//设置窗口大小,也可以改为this.pack()
this.pack();
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);//设置关闭属性
this.setVisible(true);//设置窗口的可见性
}
public static void main(String[] args)//主函数
{
new MyClass();
}
}
导入java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
公共类计算器扩展了 JFrame 实现了 ActionListener {
private Final String[] KEYS = { "7", "8", "9", "÷", "sqrt", "4", "5", "6",
"×"、"%"、"1"、"2"、"3"、"-"、"1/x"、"0"、"+/-"、"."、"+" , "= };
private Final String[] COMMAND = { "Backspace", "CE", "C" };
private Final String[] M = { " ", "MC", "MR", "MS", "M+" };
私有 JButton 密钥[] = new JButton[KEYS.length];
私有JButton命令[] = new JButton[COMMAND.length];
private JButton m[] = new JButton[M.length];
私有 JTextField resultText = new JTextField();
私有布尔值firstDigit = true;
私有双结果Num = 0.0;
私有字符串运算符 = "=;
static double mr;//记忆的数字
私有布尔操作ValidFlag = true;
JPanel面板[]=新JPanel[4];
公共外汇(){
super("外汇");
init();
setBackground(Color.LIGHT_GRAY);
设置可调整大小(假);
setLocation(588, 250);
setSize(378,214);
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); //窗口不能直接关闭
setVisible(true);
addWindowListener( new WindowAdapter() {
public void windowClosing(WindowEvent e){
if (JOptionPane.showConfirmDialog(null,"确定退出? ", "提示",2)==0){
System.exit(0);
}}});
}
private void init() {
setLayout(null);
for (int i = 0; i 4; i++) {
面板[i]=new JPanel();
添加(面板[i]);
}
面板[0].setLayout(new GridLayout(1,1,3,3));
面板[1].setLayout(new GridLayout(1,3,3,3));
面板[2].setLayout(new GridLayout(5,1,3,3));
面板[3].setLayout(new GridLayout(4,5,3,3));
resultText.setHorizontalAlignment(JTextField.RIGHT);
resultText.setAlignmentX(50);
resultText.setEditable(true);
resultText.setFont(new Font("宋体",Font.PLAIN,19));//设置字体
resultText.setBackground(Color.white);
面板[0].add(resultText);
for (int i = 0; i KEYS.length; i++) {
键[i] = new JButton(KEYS[i]);
面板[3].add(keys[i]);
if (i%5-3==0){keys[i].setForeground(www.sychzs.cn); }
else{keys[i].setForeground(www.sychzs.cn);}
keys[i].setVisible(true);
keys[i].setFont(new Font(null,Font.PLAIN,17));//设置字体
keys[i].addActionListener(this);
keys[i].setHorizontalAlignment(keys[i].CENTER);
keys[i].setBackground(new Color(255,236,233));
}
keys[4].setFont(new Font(null,Font.PLAIN,13));//设置字体
键[19].setForeground(www.sychzs.cn);
for (int i = 0; i COMMAND.length; i++) {
命令[i] = new JButton(COMMAND[i]);
面板[1].add(commands[i]);
commands[i].setForeground(www.sychzs.cn);
commands[i].addActionListener(this);
}
commands[0].setFont(new Font(null,Font.PLAIN,12));//设置字体
for (int i = 0; i M.length; i++) {
m[i] = new JButton(M[i]);
panel[2].add(m[i]);
m[i].setForeground(www.sychzs.cn);
m[i].addActionListener(this);
}
panel[0].setBounds(2, 0, 370, 30);
panel[1].setBounds(74, 30, 298, 29);
panel[2].setBounds(2,30, 70, 150);
panel[3].setBounds(74,60, 300, 120);
validate();
}
public void actionPerformed(ActionEvent e) {
String label = e.getActionCommand();
if (label.equals(COMMAND[0])){ //用户按了"Backspace"键
handleBackspace();
} else if (label.equals(COMMAND[1])) { //用户按了"CE"键
resultText.setText("0");
} else if (label.equals(COMMAND[2])){ //用户按了"C"键
handleC();
} else if (label.equals(M[4])){ //用户按了"M+"键
mr=mr+Double.valueOf(resultText.getText()).doubleValue();
if (mr==0.0){m[0].setText("");}
else {m[0].setText("M");}
} else if (label.equals(M[3])){ //用户按了"MS"键
mr=Double.valueOf(resultText.getText()).doubleValue();
if (mr==0.0){m[0].setText("");}
} else if (label.equals(M[2])){ //用户按了"MR"键
resultText.setText(""+mr);
} else if (label.equals(M[1])){ //用户按了"MC"键
mr=0.0;
m[0].setText("");
} else if (label.equals("sqrt")) { //平方根运算
resultNum = Math.sqrt(Double.valueOf(resultText.getText()).doubleValue());
resultText.setText(String.valueOf(resultNum));
} else if (label.equals("%")){ //百分号运算,除以100
resultNum = Double.valueOf(resultText.getText()).doubleValue() / 100;
resultText.setText(String.valueOf(resultNum));
} else if (label.equals("+/-")){ //正数负数运算
resultNum = Double.valueOf(resultText.getText()).doubleValue() * (-1);
resultText.setText(String.valueOf(resultNum));
} else if (label.equals("1/x")) { //倒数运算
resultNum=Double.valueOf(resultText.getText()).doubleValue();
if (resultNum == 0.0){ //操作不合法
operateValidFlag = false;
resultText.setText("零没有倒数");
} else {
resultNum = 1 / resultNum;
}
resultText.setText(String.valueOf(resultNum));
} else if ("0123456789.".indexOf(label) = 0) { //用户按了数字键或者小数点键
handleNumber(label);
} else { //用户按了运算符键
handleOperator(label);
}
}
private void handleBackspace() { // 处理Backspace键被按下的事件
String text = resultText.getText();
int i = text.length();
if (i 0) { //退格,将文本最后一个字符去掉
text = text.substring(0, i - 1);
if (text.length() == 0) { //如果文本没有了内容,则初始化计算器的各种值
resultText.setText("0");
firstDigit = true;
operator = "=";
} else { //显示新的文本
resultText.setText(text);
}
}
}
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; //以后输入的肯定不是第一个数字了
}
private void handleC() { //处理C键被按下的事件, 初始化计算器的各种值
resultText.setText("0");
firstDigit = true;
operator = "=";
}
private void handleOperator(String key) { //处理运算符键被按下的事件
if (operator.equals("÷")) { //除法运算 ,如果当前结果文本框中的值等于0
if (getNumberFromText() == 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[]) {
new 计算器();
}
}