用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

界面--计算器

2015-12-18 作者: 永夜极光举报

[java]代码库

1.主程序
package s1125计算器界面;

import java.awt.Dimension;
import java.awt.FlowLayout;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

public class Main1125 extends JFrame {
	public static void main(String[] args) {
		new Main1125().showjiemian(); // 出现验证界面
	}

	// ************************************************************************************//
	// 计算器主界面
	public void showframe() {
		this.setTitle("计算器"); // 设置窗体的标题
		this.setSize(340, 500);// 设置窗体的大小
		this.setDefaultCloseOperation(3);// 设置关闭的方式
		this.setLocationRelativeTo(null);// 设置窗体出现在屏幕中间
		this.setResizable(false);// 设置窗体不可改变大小
		this.setLayout(new FlowLayout());// 设置窗体为空布局

		JTextField jtf1 = new JTextField(); // 创建结果文本框对象
		jtf1.setPreferredSize(new Dimension(300, 50));// 编辑文本框大小
		jtf1.setEditable(false); // 不可调文本框大小
		jtf1.setHorizontalAlignment(JTextField.RIGHT);// 文本框向右排序
		jtf1.setText("");

		JTextField jtf = new JTextField(); // 创建输入的文本框对象
		jtf.setPreferredSize(new Dimension(300, 50)); // 编辑文本框大小
		jtf.setEditable(false); // 不可调文本框大小
		jtf.setHorizontalAlignment(JTextField.RIGHT); // 文本框向右排序
		jtf.setText("0");

		this.add(jtf1);
		this.add(jtf);

		// 建一个事件处理类l
		CalListener l = new CalListener();
		l.setJtf(jtf, jtf1);
		// 界面按钮
		String[] array = { "←", "ANS", "CE", "C", "7", "8", "9", "+", "4", "5",
				"6", "-", "1", "2", "3", "×", "0", ".", "÷", "=" };

		// 设置界面按钮的大小,排列顺序,添加按钮到窗体,给按钮添加事件
		for (int i = 0; i < array.length; i++) {
			JButton jbu = new JButton(array[i]);
			jbu.setPreferredSize(new Dimension(70, 55));
			this.add(jbu);
			jbu.addActionListener(l);
		}

		this.setVisible(true);
	}

	// ************************************************************************************//

	// ************************************************************************************//
	// 添加菜单栏
	public void MyMenu() {
		JMenuBar menubar = new JMenuBar(); // 创建menubar对象
		JMenu file, edit, editSon, about;// 声明JMenu类对象
		JMenuItem open, save, line, exit, copy, paste, cut, put, author, help;// 声明menuitem类对象
		// 初始菜单项
		file = new JMenu("文件(F)"); // 创建JMenu对象
		file.setMnemonic('F');
		edit = new JMenu("编辑"); // 创建JMenu对象
		editSon = new JMenu("二级菜单"); // 创建JMenu对象
		about = new JMenu("帮助"); // 创建JMenu对象
		open = new JMenuItem("打开", new ImageIcon(
				"C:/Users/Administrator/Desktop/images/2.jpg")); // 创建menuItem对象
		save = new JMenuItem("保存"); // 创建menuItem对象
		exit = new JMenuItem("关闭"); // 创建menuItem对象
		copy = new JMenuItem("复制"); // 创建menuItem对象
		paste = new JMenuItem("粘贴"); // 创建menuItem对象
		author = new JMenuItem("作者"); // 创建menuItem对象
		help = new JMenuItem("帮助"); // 创建menuItem对象
		cut = new JMenuItem("cut"); // 创建menuItem对象
		put = new JMenuItem("put"); // 创建menuItem对象
		menubar.add(file); // 将file添加到menubar中
		menubar.add(edit); // 将edit添加到menubar中
		menubar.add(about); // 将about添加到menubar中

		exit.addActionListener(e -> this.dispose());// 关闭按钮

		file.add(open); // 将open添加到file中
		file.add(save); // 将save添加到file中
		file.addSeparator();// 添加菜单栏中的横线 横线位置和添加顺序有关
		file.add(exit); // 将exit添加到file中

		edit.add(copy); // 将copy添加到edit中
		edit.add(paste); // 将paste添加到edit中
		edit.add(editSon); // 将editSon添加到edit中
		editSon.add(cut); // 将cut添加到edit中
		editSon.add(put); // 将put添加到edit中

		about.add(author); // 将author添加到about中
		about.add(help); // 将help添加到about中
		// 设置menuBar
		this.setJMenuBar(menubar);
	}

	// ************************************************************************************//

	// ************************************************************************************//
	// 验证界面(登陆界面)
	public void showjiemian() {
		this.setTitle("用户登陆"); // 设置窗体的标题
		this.setSize(200, 150); // 设置窗体的大小
		this.setDefaultCloseOperation(3); // 设置关闭的方式
		this.setLocationRelativeTo(null); // 设置窗体出现在屏幕中间
		this.setResizable(false); // 设置窗体不可改变大小

		FlowLayout c = new FlowLayout(); // 创建流式布局对象
		JLabel a = new JLabel("账号"); // 创建标签对象
		JLabel b = new JLabel("密码"); // 创建标签对象
		JTextField username = new JTextField(12); // 创建文本框对象
		JPasswordField password = new JPasswordField(12);// 创建密码框对象
		JButton b12 = new JButton("登陆"); // 创建按钮对象
		this.setLayout(c); // 设置布局为流式布局

		this.add(a); // 将标签对象添加到窗体
		this.add(username); // 将文本框对象添加到窗体
		this.add(b); // 将标签对象添加到窗体
		this.add(password); // 将密码框对象添加到窗体
		this.add(b12); // 将按钮对象添加到窗体
		b12.addActionListener(e -> {

			this.dispose(); // 关闭验证界面

			if (username.getText().equals("1")
					&& new String(password.getPassword()).equals("1")) // 验证用户名和密码如果都是1,那么就通过
																		
			{
				new Main1125() {
					{
						showframe();
						MyMenu();
					}
				};
			}

			else {
				new Main1125().showfault(); // 显示错误提示框
			}

		});

		this.setVisible(true);// 设置窗体属性为可见

	}

	// ************************************************************************************//

	// ************************************************************************************//
	// 错误提示框
	public void showfault() {
		this.setTitle("错误"); // 设置窗体的标题
		this.setSize(200, 150);// 设置窗体的大小
		this.setDefaultCloseOperation(3);// 设置关闭的方式
		this.setLocationRelativeTo(null);// 设置窗体出现在屏幕中间
		this.setResizable(false);// 设置窗体不可改变大小
		this.setLocationRelativeTo(null); // 设置窗体出现位置居中
		JPanel j1 = new JPanel(); // 创建面板对象
		j1.setPreferredSize(new Dimension(0, 100)); // 设置面板大小
		JLabel a = new JLabel("账号或者密码错误,请重新输入"); // 创建错误标签对象
		JButton b = new JButton("返回登陆界面"); // 创建按钮对象
		this.add(j1); // 添加面板到窗体
		j1.add(a); // 添加标签组件到窗体
		j1.add(b); // 添加按钮组件到窗体

		b.addActionListener((e) -> {
			this.dispose();
			new Main1125().showjiemian();
		}); // 关掉错误界面,显示验证界面

		this.setVisible(true);// 设置窗体属性为可见

	}
	// ************************************************************************************//

}


2.ActionListener类
package s1125计算器界面;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JTextField;

public class CalListener implements ActionListener{	
	String text  ;              //接受使用者按下的按钮内容
	String str = "";            //str是存储运算符
	String lastnumber;          //存储上一个处理数
	String nextnumber;          //存储下一个处理数
	String result;              //存储结果
	JTextField jtf,jtf1;        //jtf显示输入框,jtf1结果框
	double d;                   //存储运算结果
	int n;                              
	 
	public void setJtf(JTextField jtf,JTextField jtf1)    
	{this.jtf = jtf;                                            //传入输入文本框对象
	this.jtf1 = jtf1;}                                          //传入结果文本框对象
	
	
	public void actionPerformed(ActionEvent e){
		text = e.getActionCommand();//   e.getActionCommand()得到按钮上的字符串
		System.out.println(text);  
		
		if(text.equals("←"))
		{//如果文本框字符串长度大于1 减掉最后一位 如果长度等于1 文本框置0
			String temp = jtf.getText();
			if(temp.length()>1) 
			{   String temp1;                                        
			    temp1=temp.substring(temp.length()-1,temp.length());//得到最后一位字符传给temp
				if(temp1.equals("+")||temp1.equals("-")||temp1.equals("×")||temp1.equals("÷"))
				str="";            //如果最后一位字符是符号,那么"←"表示将符号清空,那么str=""
			   jtf.setText(temp.substring(0,temp.length()-1));//删去最后一位substring用法是得到从0到temp.length()-1位数据	   
			}
			
			else jtf.setText("0");
		}
		
		else if(text.equals("ANS"))                  //ans 调用上次的结果
		{  String k=jtf1.getText();
			
			if(k.equals(""))  jtf.setText("0");            //调用结果数据,如果开始没有,则文本框显示0
		    else 
		      {  if(jtf.getText().equals("0"))  
		    	       jtf.setText(k);        //调用结果数据,如果有上次的结果,则文本框显示已经存在的数据和上次的结果
			     else  jtf.setText(jtf.getText()+k);}	
		}
		
		else if(text.equals("C"))
     	       {jtf.setText("0");
     	        jtf1.setText("");
     	         lastnumber ="";
     	         nextnumber ="";
		         str = "";}
		
		else if(text.equals("CE"))
	       {jtf.setText("0");
	         lastnumber ="";
	         nextnumber ="";
	         str = "";}
		

		//如果输入的是运算符
		else if(text.equals("+")||text.equals("-")||text.equals("×")||text.equals("÷")||text.equals("="))
		{    
			
			if(str.equals(""))                          //如果是第一次输入运算符
		        { if(text.equals("=")) {}
		          else
		          {str=text;
				   result=jtf.getText();
				   jtf.setText(jtf.getText()+text);}
		        }
			
			else                                        //如果之前已经输入过运算符
			{ String temp1,temp2;   
			  temp1 = jtf.getText();
			  temp2=temp1.substring(temp1.length()-1,temp1.length());//得到文本输入框最后一位字符传给temp2
	  
		   //比较这次输入的符号和上次输入的符号是否相同
			   if(temp2.equals("+")||temp2.equals("-")||temp2.equals("×")||temp2.equals("÷"))
			       {if   (text.equals("="))  {}         //如果重复输入=,那么不做任何处理	  
			        else {str=text;                     //如果文本输入框最后一位是运算符号,那么重新传入运算符号(解决运算符重复输入问题)
			             String text2=temp1.substring(0, temp1.length()-1);   
			             jtf.setText(text2+str);}                            //重复输入运算符,以最后一次的为准	  
			       }   
				
				else
				  {
				nextnumber=temp1.substring(result.length()+1, temp1.length());  //得到第二个运算数给nextnumber
				double d1 = Double.parseDouble(result);               //定义一个双精度数
				double d2 = Double.parseDouble(nextnumber);           //定义一个双精度数
				
				if(str.equals("+"))  {d = d1 + d2;}			//加法运算
				if(str.equals("-"))  {d = d1 - d2;}			//减法运算
				if(str.equals("×"))  {d = d1 * d2;}			//乘法运算
				if(str.equals("÷"))  {d = d1 / d2;}			//除法运算
				result=d+"";                             	//运算结果放入result中,用了自动转换格式
				str = text;                              	//将本次运算符放入str中
				if(text.equals("=")) {str="";}            	//如果这次按下的是"="键,那么清空str中存储的运算符
				jtf1.setText(result);   //在结果显示框显示结果
				     if(text.equals("="))                	//如果这次按下了"="键
				            {jtf.setText("0");}         	//输入文本框变成初始"0"状态
				     else
					        {jtf.setText(result+str);}  	//输入文本框变成   结果加上符号 
				}	
			}
		}
		
			else                                                //数字键和.键的事件响应
			{  if(jtf.getText().equals("0"))                    //如果输入文本框显示"0",那么直接置换
				   jtf.setText(text);
			   else                                             //如果输入文本框已经有数据,那么添加新数据
				   jtf.setText(jtf.getText()+text);		
			}	
		}
	}


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...