JAVA实验报告四

利用Swing和GUI的相关知识,设计并编程实现一个GUI简易计算器,要求:
(1)至少实现“+”、“-”、“*”、“/”、“%”的运算;
(2)调用Math类的相关方法,至少实现对数运算、幂运算;
(3)利用菜单条、菜单项、菜单至少实现软件的“退出”的功能,并添加对应的快捷键,设置为“Ctrl+E”;
(4)检查数据的合法性,若输入数据不合法,则调用文本框类的相关方法,弹出窗口提示用户进行正确的输入;
(5)体现出是自己的工作量,界面至少显示作者的班级、姓名、学号。

Computer.java
public class Computer {
	public static void main(String[] args) {
		WindowOperation win=new WindowOperation();
	   	 win.setBounds(700,300,500,400);  //设置窗口在屏幕上的位置及大小
	   	 win.setTitle("GUI简易计算器");      //标题
	}
}

ComputerListener.java
import java.awt.event.*;
import  javax.swing.*;
//import java.awt.*;
public class ComputerListener implements ActionListener {
	JTextField  inputNumberOne,inputNumberTwo;
    JTextArea textShow;
    String fuhao=" ";

    public void setJTextFieldOne(JTextField t){
 	   inputNumberOne =t;
    }
    public void setJTextFieldTwo(JTextField t){
 	   inputNumberTwo =t;
    }
    public void setJTextArea(JTextArea area){
 	   textShow =area;
    }
    public void setFuhao(String s){
 	   fuhao=s;
    }
    //调用Math实现对数运算
    static public double log(double value, double base) {
 	   double a=0;
 	   a=Math.log(value)/Math.log(base);  	   
 	   return a;
 	   }
    public void actionPerformed(ActionEvent e){
     try{
 	       double number1;
 	       double number2;
 		   double result=0;
 		   number1=Double.parseDouble(inputNumberOne.getText());   //获取文本
 		   number2=Double.parseDouble(inputNumberTwo.getText());   //获取文本
 		   if(fuhao.equals("+")){                    //字符串比较
 			   result=number1+number2;
 		   }
 		   else if(fuhao.equals("-")){
 			   result=number1-number2;  
 			   }
 		   else if(fuhao.equals("*")){
 			   result=number1*number2;  
 			   }
 		   else if(fuhao.equals("/")){
 			   result=number1/number2;  
 			   }
 		   else if(fuhao.equals("%")){
 			   result=number1%number2;  
 			   }
 		   else if(fuhao.equals("幂运算")){
 			   result=Math.pow(number1, number2);
 		   }
 		   else if(fuhao.equals("对数运算")){
 			   result=log(number1,number2);
 		   }
            textShow.setText("");    //每次计算前清空之前的信息
             if(fuhao.equals(" ")){        
         	   JOptionPane.showMessageDialog(null,"请输入运算符号","警告对话框",JOptionPane.WARNING_MESSAGE);
            }
            else{
 		   textShow.append(number1+" "+fuhao+" "+number2+"="+result+"\n");
            }
     }
     //检查数据的合法性,若输入数据不合法,则调用文本框类的相关方法,弹出窗口提示用户进行正确的输入
     catch(Exception exp){          
     	JOptionPane.showMessageDialog(null,"请输入数字","警告对话框",JOptionPane.WARNING_MESSAGE);
     }
    }
}

ConcreteMediator.java
import javax.swing.*;
import java.awt.datatransfer.*;
//设置菜单栏
public class ConcreteMediator {
	JMenu menu;
    JMenuItem copyItem,cutItem,pasteItem;
    JTextArea text;
    public void openMenu(){
   	 Clipboard clipboard =text.getToolkit().getSystemClipboard();
   	 String str =text.getSelectedText();
   	 if(str==null){
   		 copyItem.setEnabled(false);
   		 cutItem.setEnabled(false);
   	 }
   	 else{
   		 copyItem.setEnabled(true);
   		 cutItem.setEnabled(true);
   	 }
   	 boolean boo =clipboard.isDataFlavorAvailable(DataFlavor.stringFlavor);
   	 if(boo){
   		 pasteItem.setEnabled(true);
   	 }
    }
    public void paste(){
   	 text.paste();
    }
    public void copy(){
   	 text.copy();
    }
    public void cut(){
   	 text.cut();
    }
    public void registerMenu(JMenu menu){
   	 this.menu=menu;
    }
    public void registerPasteItem(JMenuItem item){
   	 pasteItem=item;
    }
    public void registerCopyItem(JMenuItem item){
   	 copyItem=item;
   	 copyItem.setEnabled(false);
    }
    public void registerCutItem(JMenuItem item){
   	 cutItem =item;
   	 cutItem.setEnabled(false);
    }
    public void registerText(JTextArea text){
   	 this.text=text;
    }
}

OperatorListener.java 
import java.awt.event.*;
import  javax.swing.*;
public class OperatorListener implements ItemListener{
	JComboBox <String>choice;
    ComputerListener workTogether;
    public void setJComboBox(JComboBox<String> box){
  	  choice=box;
    }
    public void setWorkTogether(ComputerListener computer){
  	  workTogether =computer;
  	  
    }
    public void itemStateChanged(ItemEvent e){
  	  String fuhao =choice.getSelectedItem().toString();
  	  workTogether.setFuhao(fuhao);
    }
}

WindowOperation.java
import java.awt.BorderLayout;
//import java.awt.EventQueue;
//import javax.swing.border.EmptyBorder;
import java.awt.FlowLayout;
import javax.swing.*;
//import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
public class WindowOperation extends JFrame{
	private static final long serialVersionUID = 1L;   //定义程序序列化ID,保持不同版本的兼容性
	JTextField inputNumberOne,inputNumberTwo;    //两个文本框
    JComboBox<String>choiceFuhao;    //下拉列表
    JTextArea textShow;   //文本区显示计算结果
    JButton button;     //按钮
    JMenuBar menubar;      //菜单条
    JMenu menu;
    JMenuItem copyItem,cutItem,pasteItem,quitItem;
    OperatorListener operator;
    ComputerListener computer;
    private JTextField textField;
    public WindowOperation(){
    	init();
    	setVisible(true);    //窗口可见
    	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    
    @SuppressWarnings("deprecation")
	void init(){
    	getContentPane().setLayout(new FlowLayout());
    	inputNumberOne =new JTextField(5);
    	inputNumberTwo =new JTextField(5);
    	choiceFuhao =new JComboBox<String>();
    	button = new JButton("计算");
    	choiceFuhao.addItem("JM选择哪一种运算");
    	String []a={"+","-","*","/","%","幂运算","对数运算"};
    	for(int i=0; i<a.length;i++){
    		choiceFuhao.addItem(a[i]);
    	}
    textShow =new JTextArea(9,30);
    operator =new OperatorListener();
    computer =new ComputerListener();
    ConcreteMediator mediator=new ConcreteMediator();
    menubar=new JMenuBar();
    menu=new JMenu("编辑");     //菜单栏
    menu.addMenuListener(new MenuListener(){
    	public void menuSelected(MenuEvent e){mediator.openMenu();}
    	public void menuDeselected(MenuEvent e){}
    	public void menuCanceled(MenuEvent e){}
    	
    });
 //实现软件的复制功能,快捷键为“Ctrl+C”
    copyItem=new JMenuItem("复制");
    copyItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));
    copyItem.addActionListener(new ActionListener(){
    	public void actionPerformed(ActionEvent e){mediator.copy();
    	}
    	});
  //实现软件的剪切功能,快捷键为“Ctrl+X”
    cutItem=new JMenuItem("剪切");
    cutItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK));
    cutItem.addActionListener(new ActionListener(){
    	public void actionPerformed(ActionEvent e){mediator.cut();
    	}
    	});
//实现软件的粘贴功能,快捷键为“Ctrl+V”
    pasteItem=new JMenuItem("粘贴");
    pasteItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,InputEvent.CTRL_MASK));
    pasteItem.addActionListener(new ActionListener(){
    	public void actionPerformed(ActionEvent e){mediator.paste();
    	}
    	});
 //(3)利用菜单条、菜单项、菜单至少实现软件的“退出”的功能,
 //并添加对应的快捷键,设置为“Ctrl+E”;	
    quitItem = new JMenuItem("退出");
	quitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E,InputEvent.CTRL_MASK));
	quitItem.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent e) {
			System.exit(0);
		}
	});
    
    operator.setJComboBox(choiceFuhao);
    operator.setWorkTogether(computer);
    computer.setJTextFieldOne(inputNumberOne);
    computer.setJTextFieldTwo(inputNumberTwo);
    computer.setJTextArea(textShow);
    choiceFuhao.addItemListener(operator);
    button.addActionListener(computer);
    
    menubar.add(menu);
    menu.add(cutItem);
    menu.add(copyItem);
    menu.add(pasteItem);
    menu.add(quitItem);
    setJMenuBar(menubar);
    add(textShow,BorderLayout.CENTER);

    mediator.registerMenu(menu);
	mediator.registerCopyItem(copyItem);
	mediator.registerCutItem(cutItem);
	mediator.registerPasteItem(pasteItem);
	mediator.registerText(textShow);
    
    getContentPane().add(inputNumberOne);
    getContentPane().add(choiceFuhao);
    getContentPane().add(inputNumberTwo);
    getContentPane().add(button);
    getContentPane().add(new JScrollPane(textShow));
    //(5)体现出是自己的工作量,界面至少显示作者的班级、姓名、学号。
    JLabel biaoqian=new JLabel("软件1111   学号 姓名 ");
    getContentPane().add(biaoqian);        

    }

	public JTextField getTextField() {
		return textField;
	}

	public void setTextField(JTextField textField) {
		this.textField = textField;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验1 Java语言基础 4 一、实验目的 4 二、实验要求 4 三、实验内容 4 (一) 声明不同数据类型的变量 4 (二) 了解变量的使用范围 5 (三) 使用关系运算符和逻辑运算符 5 () 使用表达式语句与复合语句 6 (五) 使用选择语句 6 (六) 使用循环语句 8 实验2 面向对象编程 11 一、实验目的 11 二、实验要求 11 三、实验内容 11 (一)创建 Applet 应用小程序 11 (二)创建对象并使用对象 12 (三)编写显示当前日期和时间的程序 13 ()使用修饰符 14 (五)方法中参数传递 15 (六)类的继承性 16 (七)类的多态性 18 实验3 包、接口与异常处理 22 一、实验目的 22 二、实验要求 22 三、实验内容 22 (一)了解并使用 Java 的系统包 22 (二)创建并使用自定义包 22 (三)使用接口技术 24 ()了解异常处理机制 25 实验4 常用系统类的使用 27 一、实验目的 27 二、实验要求 27 三、实验内容 27 (一)了解 Applet 的生命周期 27 (二)使用数学函数类 28 (三)使用日期类 29 实验5 建立图形用户界面 32 一、实验目的 32 二、实验要求 32 三、实验内容 32 (一)创建图形用户界面 32 (二)了解事件处理机制 34 (三)建立独立运行的窗口界面并使用匿名类 36 ()使用 Swing 组件 39 (五)使用自定义对话框与内部类 41 实验6 图形处理 44 一、实验目的 44 二、实验要求 44 三、实验内容 44 (一)使用图形类 Graphics 44 实验7图形处理(二) 47 一、实验目的 47 二、实验要求 47 三、实验内容 47 (一)幻灯机效果——连续显示多幅图像 47 (二)使用滚动条改变背景颜色 48 (三)Applet 与 Application 合并运行 49 ()创建电闪雷鸣的动画 50 实验8 流与文件 53 一、实验目的 53 二、实验要求 53 三、实验内容 53 (一)使用标准数据流的应用程序 53 (二)使用文件输入输出流的应用程序 54 (三)使用随机文件类的应用程序 54 ()使用数据输入输出流与文件输入输出流类的应用程序 55 (五)使用对象输入输出流的应用程序 56 实验9 线程 58 一、实验目的 58 二、实验要求 58 三、实验内容 58 (一)Thread子类的方法实现多线程 58 (二)实现Runnable接口的方法实现多线程 59 实验10 数据库的连接:JDBC 61 一、实验目的 61 二、实验要求 61 三、实验内容 61 (一)配置ODBC数据源 61 (二)编写程序,按照下表的结构建立"student"表 61 (三)编写程序,完成填写功能 62 ()编写程序,完成查询功能 62

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值