import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
//import Counter.J_ActionListener;
public class Calculator extends JFrame{
/**
* @param args
*/
//声明三个面板的布局
GridLayout gl1,gl2;
JPanel [] p=new JPanel[7];//七个面板
JTextField tf1;
JTextField tf2;
JButton [] b=new JButton[28];
JButton b1=new JButton("sin");
JButton b2=new JButton("cos");
JButton b3=new JButton("tan");
double c;
StringBuffer str;//显示屏所显示的字符串 ,c是复制粘贴用的
double x,y;//x和y都是运算数
int z;//Z表示单击了那一个运算符.0表示"+",1表示"-",2表示"*",3表示"/"
static double m;//记忆的数字
JMenuItem [] []mI=
{
{new JMenuItem("标准型(O)"),new JMenuItem("科学型(S)")},
{new JMenuItem("复制(C)"),new JMenuItem("粘贴(V)")},
{new JMenuItem("查看帮助(V)"),new JMenuItem("关于计算器(A)")}
};
public Calculator()
{
super("计算器");
gl1=new GridLayout(1,4,10,0);//实例化三个面板的布局
gl2=new GridLayout(4,1,10,15);
tf1=new JTextField(20);//显示屏
tf1.setHorizontalAlignment(JTextField.RIGHT);
tf1.setEnabled(false);
tf1.setText("0");
//tf2=new JTextField(10);//显示记忆的索引值
//tf2.setEditable(false);
//tf2.setHorizontalAlignment(JTextField.RIGHT);
tf2=new JTextField(4);//显示屏
tf2.setHorizontalAlignment(JTextField.RIGHT);
tf2.setEnabled(false);
tf2.setForeground(Color.red);
// //实例化所有按钮、设置其前景色并注册监听器
String [] s={"MC","MR","MS","M+","M-",
"<--","CE","C","±","√",
"7","8","9","/","%",
"4","5","6","*","1/x",
"1","2","3","-",
"0",".","+","="};
for(int i=0;i<b.length;i++)
{
b[i]=new JButton(s[i]);
b[i].setForeground(Color.red);
b[i].addActionListener(new J_ActionListener());
}
//
//
// //实例化四个面板
for(int i=0;i<p.length;i++)
{
p[i]=new JPanel();
}
// //创建一个空字符串缓冲区
str=new StringBuffer();
//
// //添加面板p0中的组件和设置其在框架中的位置和大小
p[6].add(tf2);
p[6].setBounds(20,25,50,40);
p[0].add(tf1);
p[0].setBounds(80,25,250,40);
// //添加面板p1中的组件和设置其在框架中的位置和大小
p[1].setLayout(gl2);
for(int i=0;i<20;i++)
{
p[1].add(b[i]);
}
p[1].setBounds(20,65,300,150);
// //添加面板p2中的组件并设置其的框架中的位置和大小
p[2].setLayout(gl1);
for(int i=20;i<24;i++)
{
p[2].add(b[i]);
}
p[2].setBounds(20,230,240,25);
// //添加面板p3中的组件并设置其在框架中的位置和大小
p[3].setLayout(gl1);//设置p3的布局
p[3].add(b[24]);
p[3].setBounds(20, 270, 115,25);
p[4].setLayout(gl1);
p[4].add(b[25]);
p[4].add(b[26]);
p[4].setBounds(145, 270, 115, 25);
p[5].setLayout(gl1);
p[5].add(b[27]);
p[5].setBounds(270,230,50,65);
// //设置框架中的布局为空布局并添加4个面板
setLayout(null);
for(int i=0;i<p.length;i++)
add(p[i]);
// setResizable(false);//禁止调整框架的大小
// //匿名类关闭窗口
// addWindowListener(new WindowAdapter()
// {
// public void windowClosing(WindowEvent e1)
// {
// System.exit(0);
// }
// });
JMenuBar mBar = new JMenuBar();
setJMenuBar(mBar);
JMenu [] m={ new JMenu("查看(V)"),new JMenu("编辑(E)"),new JMenu("帮助(H)")};
char [][]mC={{'V','E','H'},{'O','S'},{'C','V'},{'V','A'}};
// JMenuItem [] []mI=
// {
// {new JMenuItem("打开(O)"),new JMenuItem("保存(S)")},
// {new JMenuItem("复制(C)"),new JMenuItem("粘贴(V)")},
// {new JMenuItem("查看帮助(V)"),new JMenuItem("关于计算器(A)")}
// };
int i,j;
for(i=0;i<m.length;i++)
{
mBar.add(m[i]);//添加下拉式菜单
m[i].setMnemonic(mC[0][i]);//设置助记符
for(j=0;j<mI[i].length;j++)
{
m[i].add(mI[i][j]);
mI[i][j].setMnemonic(mC[i+1][j]);
mI[i][j].setAccelerator(//设置快捷键
KeyStroke.getKeyStroke("ctrl "+mC[i+1][j]));
mI[i][j].addActionListener(new J_ActionListener());
mI[i][j].addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
JMenuItem mItem =(JMenuItem)e.getSource();
System.out.println("运行菜单项:"+mItem.getText());
if(mItem.getText()=="关于计算器(A)")
{
JDialog d=new JDialog(new JFrame(),"关于计算机",false);
Container c=d.getContentPane();
c.setLayout(new FlowLayout(FlowLayout.LEFT));
c.add(new JLabel("yao氏计算机3.0"));
JLabel j=new JLabel("2013—1—4");
c.add(j);
j.setHorizontalAlignment(JLabel.RIGHT);
d.setSize(150,150);
d.setVisible(true);
}
// if(mItem.getText()=="复制(C)")
// {
// c=str;
// }
// if(mItem.getText()=="粘贴(V)")
// {
// str=c;
// }
}
}
);
}
}
m[0].insertSeparator(1);
setBackground(Color.DARK_GRAY);
setBounds(500,100,350,380);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setResizable(false);//禁止调整窗口大小
}
class J_ActionListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
try
{
if(e.getSource()==b[6])//选择"CE"清零
{
tf1.setText("0");//把显示屏清零
str.setLength(0);//清空字符串缓冲区以准备接收新的输入运算数
}
else if(e.getSource()==b[7])//选择"C"清零
{
tf1.setText("0");//把显示屏清零
x=0;
str.setLength(0);
}
else if(e.getSource()==b[8])//单击"+/-"选择输入的运算数是正数还是负数
{
x=Double.parseDouble(tf1.getText().trim());
tf1.setText(""+(-x));
}
else if(e.getSource()==b[26])//单击加号按钮获得x的值和z的值并清空y的值
{
x=Double.parseDouble(tf1.getText().trim());
str.setLength(0);//清空缓冲区以便接收新的另一个运算数
y=0;
z=0;
}
else if(e.getSource()==b[23])//单击减号按钮获得x的值和z的值并清空y的值
{
x=Double.parseDouble(tf1.getText().trim());
str.setLength(0);
y=0;
z=1;
}
else if(e.getSource()==b[18])//单击乘号按钮获得x的值和z的值并清空y的值
{
x=Double.parseDouble(tf1.getText().trim());
str.setLength(0);
y=0;
z=2;
}
else if(e.getSource()==b[13])//单击除号按钮获得x的值和z的值并空y的值
{
x=Double.parseDouble(tf1.getText().trim());
if(x==0)
{
tf1.setText("除数不能为零");
JDialog d=new JDialog(new JFrame(),"对话框",false);
Container cd=d.getContentPane();
cd.setLayout(new FlowLayout(FlowLayout.LEFT));
d.add(new JLabel("除数不能为0"));
d.setSize(80,80);
d.setVisible(true);
}
else{
str.setLength(0);
y=0;
z=3; }
}
else if(e.getSource()==b[27])//单击等号按钮输出计算结果
{
str.setLength(0);
switch(z)
{
case 0 : tf1.setText(""+(x+y));break;
case 1 : tf1.setText(""+(x-y));break;
case 2 : tf1.setText(""+(x*y));break;
case 3 :{
if(y==0)
{
tf1.setText("除数不能为零");
JDialog d=new JDialog(new JFrame(),"对话框",false);
Container cd=d.getContentPane();
cd.setLayout(new FlowLayout(FlowLayout.LEFT));
d.add(new JLabel("除数不能为0"));
//d.setSize(80,80);
d.setBounds(550, 180, 80, 80);
d.setVisible(true);
}
else
tf1.setText(""+(x/y));break;
}
}
}
else if(e.getSource()==b[25])//单击"."按钮输入小数
{
if(tf1.getText().trim().indexOf('.')!=-1)//判断字符串中是否已经包含了小数点
{
}
else//如果没有小数点
{
if(tf1.getText().trim().equals("0"))//如果初时显示为0
{
str.setLength(0);
tf1.setText((str.append("0"+e.getActionCommand())).toString());
}
else if(tf1.getText().trim().equals(""))//如果初时显示为空则不做任何操作
{
}
else
{
tf1.setText(str.append(e.getActionCommand()).toString()); //append 方法始终将这些字符�
yaovirus
- 粉丝: 4
- 资源: 3
最新资源
- 白色大气风格的上线倒计时模板下载.zip
- 白色大气风格的商业合作公司模板下载.zip
- 白色大气风格的商业模板下载.zip
- 白色大气风格的设计公司网页模板下载.zip
- 白色大气风格的设计公司CSS3单页模板.zip
- 白色大气风格的设计公司整站网站模板下载.zip
- matlab实现并行计算在无线传感器网络中的应用与实现-并行计算-无线传感器网络-WSN-matlab-分布式算法
- 白色大气风格的摄影照片展示网页模板下载.zip
- 白色大气风格的摄影主题网页模板下载.zip
- 白色大气风格的设计师作品模板下载.zip
- 白色大气风格的生活商品网上销售商城模板.zip
- 白色大气风格的生活工具网店网页模板下载.zip
- 白色大气风格的施工建设企业网站模板.zip
- 白色干净大气的企业网站模板下载.zip
- 白色干净简单的app软件网站模板下载.zip
- 白色风景的人物相册整站网站模板下载.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈