用java编写计算器,要求如下:
1)综合使用网格布局和边框布局2)“文件”菜单中含一个子菜单“退出”,单击“退出”菜单关闭本计算器。“帮助”菜单中含一个子菜单“关于”,单击“关于”菜单弹出对此计算器的文...
1)综合使用网格布局和边框布局
2)“文件”菜单中含一个子菜单“退出”,单击“退出”菜单关闭本计算器。“帮助”菜单中含一个子菜单“关于”,单击“关于”菜单弹出对此计算器的文字描述说明。
3)包括0-9 这十个数字
4)具备加、减、乘、除四个运算符按钮以及等号、清除一个数、全部清空等辅助按钮
5)使用一个文本框显示计算结果
不太难 但就是不会,十分感谢! 展开
2)“文件”菜单中含一个子菜单“退出”,单击“退出”菜单关闭本计算器。“帮助”菜单中含一个子菜单“关于”,单击“关于”菜单弹出对此计算器的文字描述说明。
3)包括0-9 这十个数字
4)具备加、减、乘、除四个运算符按钮以及等号、清除一个数、全部清空等辅助按钮
5)使用一个文本框显示计算结果
不太难 但就是不会,十分感谢! 展开
2个回答
展开全部
正好我们做过,给你发个吧。
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import javax.swing.*;
public class Test6_1{
public static void main(String[] args){
MathWindow math=new MathWindow();//启动程序
}
}
class MathWindow extends JFrame implements ActionListener{
GridLayout grid00=new GridLayout();//文本框的窗口布局,一行一列
GridLayout grid01=new GridLayout(1,3,5,5); //BackSpace、CE、C的窗口布局,一行三列
GridLayout grid1=new GridLayout(2,1,5,5); //二行一列,用于嵌套以上两个窗口布局
GridLayout grid2=new GridLayout(4,5,5,5); //数字和运算符的窗口布局
BorderLayout border=new BorderLayout(5,5); //总窗口布局
JPanel j00=new JPanel();
JPanel j01=new JPanel();
JPanel j1=new JPanel(); //JPanel面板,后缀数字对应上述布局
JPanel j2=new JPanel();
JTextField 文本框=new JTextField("0"); //显示框
JMenuBar 菜单条; //菜单条
JMenu 编辑,帮助; //菜单
JMenuItem 复制,粘贴,帮助主题,关于计算器; //菜单项
JButton 退格=new JButton("BackSpace");
JButton 清零=new JButton("CE");
JButton 清空=new JButton("C");
JButton B00=new JButton("7");
JButton B01=new JButton("8");
JButton B02=new JButton("9");
JButton B03=new JButton("/");
JButton B04=new JButton("sqrt"); //定义窗口中所有的按钮
JButton B10=new JButton("4");
JButton B11=new JButton("5");
JButton B12=new JButton("6");
JButton B13=new JButton("*");
JButton B14=new JButton("%");
JButton B20=new JButton("1");
JButton B21=new JButton("2");
JButton B22=new JButton("3");
JButton B23=new JButton("-");
JButton B24=new JButton("1/x");
JButton B30=new JButton("0");
JButton B31=new JButton("+/-");
JButton B32=new JButton(".");
JButton B33=new JButton("+");
JButton B34=new JButton("=");
float num1=0; //运算数
char ch='#'; //运算符
String copy="0"; //存储
boolean can=false;
MathWindow(){
setTitle("计算器");//设置窗口名称
setVisible(true);//设置可见性
setSize(400,300);//设置窗口初始大小
菜单条=new JMenuBar();
编辑=new JMenu("编辑(E)");
编辑.setMnemonic('E');
帮助=new JMenu("帮助(H)");
帮助.setMnemonic('H');
复制=new JMenuItem("复制(C)");
复制.setMnemonic('C');
复制.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));//设置快捷键
复制.addActionListener(this);//获得监视器
粘贴=new JMenuItem("粘贴(P)");
粘贴.setMnemonic('P');
粘贴.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,InputEvent.CTRL_MASK));
粘贴.addActionListener(this);
帮助主题=new JMenuItem("帮助主题(H)");
帮助主题.setMnemonic('H');
帮助主题.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H,InputEvent.CTRL_MASK));
帮助主题.addActionListener(this);
关于计算器=new JMenuItem("关于计算器(A)");
关于计算器.setMnemonic('A');
关于计算器.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,InputEvent.CTRL_MASK));
关于计算器.addActionListener(this);
编辑.add(复制);
编辑.add(粘贴);
帮助.add(帮助主题);
帮助.addSeparator();
帮助.add(关于计算器);
菜单条.add(编辑);
菜单条.add(帮助);
setJMenuBar(菜单条);
setLayout(border);
j00.setLayout(grid00);
j00.add(文本框);
文本框.setEditable(false);
文本框.setHorizontalAlignment(JTextField.RIGHT);
j01.setLayout(grid01);
j01.add(退格);
j01.add(清零);
j01.add(清空);
退格.addActionListener(this);
清零.addActionListener(this);
清空.addActionListener(this);
j1.setLayout(grid1);
j1.add(j00);
j1.add(j01);
add(j1,"North");
j2.setLayout(grid2);
j2.add(B00);
j2.add(B01);
j2.add(B02);
j2.add(B03);
j2.add(B04);
j2.add(B10);
j2.add(B11);
j2.add(B12);
j2.add(B13);
j2.add(B14);
j2.add(B20);
j2.add(B21);
j2.add(B22);
j2.add(B23);
j2.add(B24);
j2.add(B30);
j2.add(B31);
j2.add(B32);
j2.add(B33);
j2.add(B34);
B00.addActionListener(this);
B01.addActionListener(this);
B02.addActionListener(this);
B03.addActionListener(this);
B04.addActionListener(this);
B10.addActionListener(this);
B11.addActionListener(this);
B12.addActionListener(this);
B13.addActionListener(this);
B14.addActionListener(this);
B20.addActionListener(this);
B21.addActionListener(this);
B22.addActionListener(this);
B23.addActionListener(this);
B24.addActionListener(this);
B30.addActionListener(this);
B31.addActionListener(this);
B32.addActionListener(this);
B33.addActionListener(this);
B34.addActionListener(this);
add(j2,"Center");
validate();
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
public void actionPerformed(ActionEvent e){
String act=e.getActionCommand();
if(e.getSource()==复制){
copy=文本框.getText();
}
if(e.getSource()==粘贴){
文本框.setText(copy);
}
if(e.getSource()==帮助主题){
JOptionPane.showMessageDialog(null,"请参阅Windows帮助","帮助主题",JOptionPane.INFORMATION_MESSAGE);
}
if(e.getSource()==关于计算器){
JOptionPane.showMessageDialog(null,"名称:简单计算器\n作者:杨明宇\n学号:20101938\n版权所有,仿冒必究","关于计算器",JOptionPane.INFORMATION_MESSAGE);
}
if(e.getSource()==退格){
if(文本框.getText().length()>1){
文本框.setText(文本框.getText().substring(0,文本框.getText().length()-1));
}
else {
文本框.setText("0");
}
return;
}
if(e.getSource()==清零){
文本框.setText("0");
return;
}
if(e.getSource()==清空){
文本框.setText("0");
ch='#';
return;
}
if(act.equals("+/-")){
if(文本框.getText().charAt(0)!='-'){
文本框.setText("-"+文本框.getText());
}
else{
文本框.setText(文本框.getText().substring(1));return;
}
}
if(act.equals(".")){
文本框.setText(文本框.getText()+act);return;
}
if(act!="1/x"&&act.charAt(0)>='0'&&act.charAt(0)<='9'){
if(can){
文本框.setText(act);
can=false;
}
else{
try{
if(Float.parseFloat(文本框.getText())==0){
if(文本框.getText().equals("0.")){
文本框.setText(文本框.getText()+act);
}
else{
文本框.setText(act);
}
return;
}
else{
文本框.setText(文本框.getText()+act);
return;
}
}catch(NumberFormatException e1){
JOptionPane.showMessageDialog(null,"输入格式错误!","警告!",JOptionPane.ERROR_MESSAGE);
return;
}
}
}
if(act.equals("+")||act.equals("-")||act.equals("*")||act.equals("/")||act.equals("%")){
if(ch!='#'){
try{
num1=计算(num1,ch,Float.parseFloat(文本框.getText()));
文本框.setText(String.valueOf(num1));
ch=act.charAt(0);
can=true;
return;
}catch(NumberFormatException e1){
JOptionPane.showMessageDialog(null,"输入格式错误!","警告!",JOptionPane.ERROR_MESSAGE);
return;
}
}
else{
try{
num1=Float.parseFloat(文本框.getText());
ch=act.charAt(0);
can=true;
return;
}catch(NumberFormatException e1){
JOptionPane.showMessageDialog(null,"输入格式错误!","警告!",JOptionPane.ERROR_MESSAGE);
return;
}
}
}
if(act.equals("sqrt")){
try{
float num=(float)Math.sqrt(Float.parseFloat(文本框.getText()));
文本框.setText(String.valueOf(num));
can=true;
return;
}catch(NumberFormatException e1){
JOptionPane.showMessageDialog(null,"输入格式错误!","警告!",JOptionPane.ERROR_MESSAGE);
return;
}
}
if(act.equals("1/x")){
try{
float num=1/Float.parseFloat(文本框.getText());
文本框.setText(String.valueOf(num));
can=true;
return;
}catch(NumberFormatException e1){
JOptionPane.showMessageDialog(null,"输入格式错误!","警告!",JOptionPane.ERROR_MESSAGE);
return;
}catch(ArithmeticException e1){
JOptionPane.showMessageDialog(null,"除0错误!","警告!",JOptionPane.ERROR_MESSAGE);
return;
}
}
if(act.equals("=")){
can=true;
try{
if(ch=='#'){
return;
}
float num=Float.parseFloat(文本框.getText());
num1=计算(num1,ch,num);
文本框.setText(String.valueOf(num1));
ch='#';
return;
}catch(NumberFormatException e1){
JOptionPane.showMessageDialog(null,"输入格式错误!","警告!",JOptionPane.ERROR_MESSAGE);
return;
}
}
}
public float 计算(float a,char c,float b){
float sum;
switch(c){
case '+':sum=a+b;break;
case '-':sum=a-b;break;
case '*':sum=a*b;break;
case '/':
if(b==0){
JOptionPane.showMessageDialog(null,"除0错误!","警告!", JOptionPane.ERROR_MESSAGE);
return 0;
}
sum=a/b;
break;
case '%':
if(b==0){
JOptionPane.showMessageDialog(null,"除0错误!","警告!",JOptionPane.ERROR_MESSAGE);
return 0;
}
sum=a%b;
break;
default:return 0;
}
return sum;
}
}
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import javax.swing.*;
public class Test6_1{
public static void main(String[] args){
MathWindow math=new MathWindow();//启动程序
}
}
class MathWindow extends JFrame implements ActionListener{
GridLayout grid00=new GridLayout();//文本框的窗口布局,一行一列
GridLayout grid01=new GridLayout(1,3,5,5); //BackSpace、CE、C的窗口布局,一行三列
GridLayout grid1=new GridLayout(2,1,5,5); //二行一列,用于嵌套以上两个窗口布局
GridLayout grid2=new GridLayout(4,5,5,5); //数字和运算符的窗口布局
BorderLayout border=new BorderLayout(5,5); //总窗口布局
JPanel j00=new JPanel();
JPanel j01=new JPanel();
JPanel j1=new JPanel(); //JPanel面板,后缀数字对应上述布局
JPanel j2=new JPanel();
JTextField 文本框=new JTextField("0"); //显示框
JMenuBar 菜单条; //菜单条
JMenu 编辑,帮助; //菜单
JMenuItem 复制,粘贴,帮助主题,关于计算器; //菜单项
JButton 退格=new JButton("BackSpace");
JButton 清零=new JButton("CE");
JButton 清空=new JButton("C");
JButton B00=new JButton("7");
JButton B01=new JButton("8");
JButton B02=new JButton("9");
JButton B03=new JButton("/");
JButton B04=new JButton("sqrt"); //定义窗口中所有的按钮
JButton B10=new JButton("4");
JButton B11=new JButton("5");
JButton B12=new JButton("6");
JButton B13=new JButton("*");
JButton B14=new JButton("%");
JButton B20=new JButton("1");
JButton B21=new JButton("2");
JButton B22=new JButton("3");
JButton B23=new JButton("-");
JButton B24=new JButton("1/x");
JButton B30=new JButton("0");
JButton B31=new JButton("+/-");
JButton B32=new JButton(".");
JButton B33=new JButton("+");
JButton B34=new JButton("=");
float num1=0; //运算数
char ch='#'; //运算符
String copy="0"; //存储
boolean can=false;
MathWindow(){
setTitle("计算器");//设置窗口名称
setVisible(true);//设置可见性
setSize(400,300);//设置窗口初始大小
菜单条=new JMenuBar();
编辑=new JMenu("编辑(E)");
编辑.setMnemonic('E');
帮助=new JMenu("帮助(H)");
帮助.setMnemonic('H');
复制=new JMenuItem("复制(C)");
复制.setMnemonic('C');
复制.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));//设置快捷键
复制.addActionListener(this);//获得监视器
粘贴=new JMenuItem("粘贴(P)");
粘贴.setMnemonic('P');
粘贴.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,InputEvent.CTRL_MASK));
粘贴.addActionListener(this);
帮助主题=new JMenuItem("帮助主题(H)");
帮助主题.setMnemonic('H');
帮助主题.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H,InputEvent.CTRL_MASK));
帮助主题.addActionListener(this);
关于计算器=new JMenuItem("关于计算器(A)");
关于计算器.setMnemonic('A');
关于计算器.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,InputEvent.CTRL_MASK));
关于计算器.addActionListener(this);
编辑.add(复制);
编辑.add(粘贴);
帮助.add(帮助主题);
帮助.addSeparator();
帮助.add(关于计算器);
菜单条.add(编辑);
菜单条.add(帮助);
setJMenuBar(菜单条);
setLayout(border);
j00.setLayout(grid00);
j00.add(文本框);
文本框.setEditable(false);
文本框.setHorizontalAlignment(JTextField.RIGHT);
j01.setLayout(grid01);
j01.add(退格);
j01.add(清零);
j01.add(清空);
退格.addActionListener(this);
清零.addActionListener(this);
清空.addActionListener(this);
j1.setLayout(grid1);
j1.add(j00);
j1.add(j01);
add(j1,"North");
j2.setLayout(grid2);
j2.add(B00);
j2.add(B01);
j2.add(B02);
j2.add(B03);
j2.add(B04);
j2.add(B10);
j2.add(B11);
j2.add(B12);
j2.add(B13);
j2.add(B14);
j2.add(B20);
j2.add(B21);
j2.add(B22);
j2.add(B23);
j2.add(B24);
j2.add(B30);
j2.add(B31);
j2.add(B32);
j2.add(B33);
j2.add(B34);
B00.addActionListener(this);
B01.addActionListener(this);
B02.addActionListener(this);
B03.addActionListener(this);
B04.addActionListener(this);
B10.addActionListener(this);
B11.addActionListener(this);
B12.addActionListener(this);
B13.addActionListener(this);
B14.addActionListener(this);
B20.addActionListener(this);
B21.addActionListener(this);
B22.addActionListener(this);
B23.addActionListener(this);
B24.addActionListener(this);
B30.addActionListener(this);
B31.addActionListener(this);
B32.addActionListener(this);
B33.addActionListener(this);
B34.addActionListener(this);
add(j2,"Center");
validate();
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
public void actionPerformed(ActionEvent e){
String act=e.getActionCommand();
if(e.getSource()==复制){
copy=文本框.getText();
}
if(e.getSource()==粘贴){
文本框.setText(copy);
}
if(e.getSource()==帮助主题){
JOptionPane.showMessageDialog(null,"请参阅Windows帮助","帮助主题",JOptionPane.INFORMATION_MESSAGE);
}
if(e.getSource()==关于计算器){
JOptionPane.showMessageDialog(null,"名称:简单计算器\n作者:杨明宇\n学号:20101938\n版权所有,仿冒必究","关于计算器",JOptionPane.INFORMATION_MESSAGE);
}
if(e.getSource()==退格){
if(文本框.getText().length()>1){
文本框.setText(文本框.getText().substring(0,文本框.getText().length()-1));
}
else {
文本框.setText("0");
}
return;
}
if(e.getSource()==清零){
文本框.setText("0");
return;
}
if(e.getSource()==清空){
文本框.setText("0");
ch='#';
return;
}
if(act.equals("+/-")){
if(文本框.getText().charAt(0)!='-'){
文本框.setText("-"+文本框.getText());
}
else{
文本框.setText(文本框.getText().substring(1));return;
}
}
if(act.equals(".")){
文本框.setText(文本框.getText()+act);return;
}
if(act!="1/x"&&act.charAt(0)>='0'&&act.charAt(0)<='9'){
if(can){
文本框.setText(act);
can=false;
}
else{
try{
if(Float.parseFloat(文本框.getText())==0){
if(文本框.getText().equals("0.")){
文本框.setText(文本框.getText()+act);
}
else{
文本框.setText(act);
}
return;
}
else{
文本框.setText(文本框.getText()+act);
return;
}
}catch(NumberFormatException e1){
JOptionPane.showMessageDialog(null,"输入格式错误!","警告!",JOptionPane.ERROR_MESSAGE);
return;
}
}
}
if(act.equals("+")||act.equals("-")||act.equals("*")||act.equals("/")||act.equals("%")){
if(ch!='#'){
try{
num1=计算(num1,ch,Float.parseFloat(文本框.getText()));
文本框.setText(String.valueOf(num1));
ch=act.charAt(0);
can=true;
return;
}catch(NumberFormatException e1){
JOptionPane.showMessageDialog(null,"输入格式错误!","警告!",JOptionPane.ERROR_MESSAGE);
return;
}
}
else{
try{
num1=Float.parseFloat(文本框.getText());
ch=act.charAt(0);
can=true;
return;
}catch(NumberFormatException e1){
JOptionPane.showMessageDialog(null,"输入格式错误!","警告!",JOptionPane.ERROR_MESSAGE);
return;
}
}
}
if(act.equals("sqrt")){
try{
float num=(float)Math.sqrt(Float.parseFloat(文本框.getText()));
文本框.setText(String.valueOf(num));
can=true;
return;
}catch(NumberFormatException e1){
JOptionPane.showMessageDialog(null,"输入格式错误!","警告!",JOptionPane.ERROR_MESSAGE);
return;
}
}
if(act.equals("1/x")){
try{
float num=1/Float.parseFloat(文本框.getText());
文本框.setText(String.valueOf(num));
can=true;
return;
}catch(NumberFormatException e1){
JOptionPane.showMessageDialog(null,"输入格式错误!","警告!",JOptionPane.ERROR_MESSAGE);
return;
}catch(ArithmeticException e1){
JOptionPane.showMessageDialog(null,"除0错误!","警告!",JOptionPane.ERROR_MESSAGE);
return;
}
}
if(act.equals("=")){
can=true;
try{
if(ch=='#'){
return;
}
float num=Float.parseFloat(文本框.getText());
num1=计算(num1,ch,num);
文本框.setText(String.valueOf(num1));
ch='#';
return;
}catch(NumberFormatException e1){
JOptionPane.showMessageDialog(null,"输入格式错误!","警告!",JOptionPane.ERROR_MESSAGE);
return;
}
}
}
public float 计算(float a,char c,float b){
float sum;
switch(c){
case '+':sum=a+b;break;
case '-':sum=a-b;break;
case '*':sum=a*b;break;
case '/':
if(b==0){
JOptionPane.showMessageDialog(null,"除0错误!","警告!", JOptionPane.ERROR_MESSAGE);
return 0;
}
sum=a/b;
break;
case '%':
if(b==0){
JOptionPane.showMessageDialog(null,"除0错误!","警告!",JOptionPane.ERROR_MESSAGE);
return 0;
}
sum=a%b;
break;
default:return 0;
}
return sum;
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询