1、首先页面制作
整体的页面布局可设为空布局,上下各一个面板,其中上面面板可放入文本输入域(jtf.setHorizontalAlignment(JTextField.RIGHT);)这句代码是将文本件右边往左边输出
,下面则是放入button,中间有个分隔线,是用画笔画上去的,好了,界面具体实现
2、功能实现
功能主要是实现了基本的加减乘除,至于加减则是则是从文本输入域中获取要操作的数据,其中要注意一点,加减乘除是特殊字符(减法除外),要通过转译才能,例如加法("\\+"),要使用这样的操作才能运行,否则会在控制台输出错误异常信息java.util.regex.PatternSyntaxException具体都介绍完了,代码如下:
package Simple_Calc;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;
/**
* 处理计算器界面
* @author Administrator
*
*/
public class Calc extends JFrame{
private void initFrame() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
e.printStackTrace();
}
this.setSize(300, 400);
this.setTitle("SIMPLE_CALC");
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(null);
// JTextField调用方法时传递
JTextField jtf = this.topSurface();
this.bottomSurface(jtf);
this.setVisible(true);
}
private JTextField topSurface(){
JPanel topPanel = new JPanel();
topPanel.setBounds(-5,10,300,50);
JTextField jtf = new JTextField(16);
// 设置文件右边往左边输出
jtf.setHorizontalAlignment(JTextField.RIGHT);
jtf.setForeground(Color.red);
jtf.setFont(new Font("SansSerif",Font.PLAIN,20));
jtf.setEditable(false);
jtf.setText("0");
topPanel.add(jtf);
this.add(topPanel);
return jtf;
}
private void bottomSurface(JTextField jtf){
JPanel bottomPanel = new JPanel();
bottomPanel.setBounds(8,80,270,250);
bottomPanel.setLayout(new GridLayout(5,4,1,1));
String[] buttonValue = {"1","2","3","C",
"4","5","6","CE",
"7","8","9","←",
"+","-","0",".",
"*","/","%","="};
// 监听器不能重复创建
CalcListener cl = new CalcListener(jtf);
for (int i = 0; i < buttonValue.length; i++) {
JButton button = new JButton(buttonValue[i]);
button.setBorder(BorderFactory.createRaisedBevelBorder());
button.setFont(new Font("宋体", 0, 25));
button.setForeground(Color.blue);
bottomPanel.add(button);
button.addActionListener(cl);
}
this.add(bottomPanel);
}
/**=============================计算器分割线========================================**/
// 定义自己的画笔,把paint方法的Graphics对象强转为自定义画笔
private Graphics2D g;
@Override
public void paint(Graphics g) {
super.paint(g);
this.g = (Graphics2D) g;
this.g.setStroke(new BasicStroke(3));
this.g.setColor(new Color(18,18,9));
this.g.drawLine(0, 95, this.getWidth(), 95);
}
public static void main(String[] args) {
Calc calc = new Calc();
calc.initFrame();
}
}
/** * @author * @vision createtime:2016上午11:42:00 */ package Simple_Calc; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JTextField; /** * 处理计算器逻辑运算 * * @author Administrator * */ public class CalcListener implements ActionListener { private JTextField jtf; // 创建字符缓冲区域 String content = ""; private StringBuffer sb = new StringBuffer(); public CalcListener(JTextField jtf) { this.jtf = jtf; } @Override public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); switch (command) { // case同时写多个条件,数字的基本处理 case "1": case "2": case "3": case "4": case "5": case "6": case "7": case "8": case "9": case "0": case ".": case "+": case "-": case "*": case "/": case "%": sb.append(command); jtf.setText(sb.toString().trim()); break; // 清空输入框中内容 case "C": case "CE": // 清空StringBuffer sb.setLength(0); jtf.setText("0"); break; // 退格 case "←": break; // 四则运算处理 处理两个运算符问题两个点 TODO case "=": String content = jtf.getText(); if (content.contains("+")) { String[] string = content.split("\\+"); String frist = string[0]; String next = string[1]; double result = Double.valueOf(frist)+Double.valueOf(next); jtf.setText(String.valueOf(result)); } else if (content.contains("-")) { String[] string = content.split("-"); String frist = string[0]; String next = string[1]; double result = Double.valueOf(frist)-Double.valueOf(next); jtf.setText(String.valueOf(result)); } else if (content.contains("*")) { String[] string = content.split("\\*"); String frist = string[0]; String next = string[1]; double result = Double.valueOf(frist)*Double.valueOf(next); jtf.setText(String.valueOf(result)); } else if (content.contains("/")) { String[] string = content.split("\\/"); String frist = string[0]; String next = string[1]; double result = Double.valueOf(frist)/Double.valueOf(next); jtf.setText(String.valueOf(result)); } else if (content.contains("%")) { String[] string = content.split("\\%"); String frist = string[0]; String next = string[1]; double result = Double.valueOf(frist)%Double.valueOf(next); jtf.setText(String.valueOf(result)); } break; } } }