用JavaSwing 实现一个计算器

  • tips:最近因为课程需要,用JavaSwing做了一个简易计算器,代码十分简单,有需要的可以搬走。

过程

  1. 先创建JFrame容器,采用水平布局。作为总的框架。
  2. 然后用 create_button 方法,循环创建按钮,并设置大小。
  3. 创建 add_button 方法,将按钮添加到面板上。
  4. 创建 add_listener 方法,给每个按钮增加按钮监听。
  5. 通过 set_text 方法,设置显示的文本。

最终结果如图

用JavaSwing 实现一个计算器_第1张图片
用JavaSwing 实现一个计算器_第2张图片

代码如下

package Calculator;
import javax.swing.JFrame;
import java.awt.FlowLayout;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.JTextField;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

/**
 * 先设计出整个计算器的框架
 * 在实现功能
 * @author asus
 *
 */
public class Calculator {
	//静态变量,设置输入框文本。
	static String input = "";
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		JFrame f = new JFrame();
		f.setSize(250,230);
		f.setLocationRelativeTo(null);
		//设置界面水平布局
		f.setLayout(new FlowLayout());
		
		String[] name = {"7","8","9","/","4","5","6","*",
						"1","2","3","-","0",".","=","+"};
		
		
		JButton[] bts = new JButton[17];
		JTextField tf = new JTextField();
		tf.setPreferredSize(new Dimension(150,30));
		f.add(tf);

		create_button(name,bts);
		add_button(bts, f);
		add_listener(tf, bts, name);
		
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setVisible(true);
		
	}
	
	//创建按钮,用数组接收。
	public static void create_button(String[] name,JButton[] bts){
		JButton bt = new JButton("clear");
		bts[0] = bt;
		for(int i=0;i<name.length;i++){
			JButton b = new JButton(name[i]);
			//设置按钮大小
			b.setPreferredSize(new Dimension(50,30));
			bts[i+1] = b;
		}
	}
	
	//将按钮添加到面板上。
	public static void add_button(JButton[] bts,JFrame f){
		for(int i=0;i<bts.length;i++){
			f.add(bts[i]);
		}
	}
	
	//增加按钮监听
	public static void add_listener(JTextField tf,JButton[] bts,String[] name){
		for(int i=0;i<bts.length;i++){
			String text = bts[i].getText();
			bts[i].addActionListener(new ActionListener() {
				
				@Override
				public void actionPerformed(ActionEvent e) {
					// TODO Auto-generated method stub
					set_text(tf,text);
				}
			});
		}
	}
	//设置文本框的显示文字以及计算结果
	public static void set_text(JTextField tf,String s){
		if(s.equals("=")){
			//进行字符串表达式的运算
			ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
	        ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("nashorn");
			try{
				input = String.valueOf(scriptEngine.eval(input));
				tf.setText(input);
			}catch(ScriptException e){
				e.printStackTrace();
			}
		}
		else if(s.equals("clear")){
			input = "";
			tf.setText(input);
		}
		else{
			input = input + s;
			tf.setText(input);
		}
	}
}

最后改一下包名就能够直接用了。

你可能感兴趣的:(用JavaSwing 实现一个计算器)