浏览 4632 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-01-21
最后修改:2010-01-21
功能也算完整吧 大家也可以测测 给点意见 import java.awt.*; import java.awt.event.*; import java.math.*; import javax.swing.*; /** * @author wangjun * */ public class JTest extends JFrame { /** * 定义按扭窗口 */ ResultStr resultStr; // 显示框 继承JPanel NumButtons numButtons; // 按钮面板 继承JPanel MopButs mopButs; // JButton butCE = new JButton("CE"); //ce按钮 CEB ceb; // 当点击按钮+、-、*、/ = 时,isE = true boolean isE = false; // 当i=0时说明是我们第一次输入,显示内容为 0 根据输入的情况设置显示内容 int i = 0; // 存放显示的内容 String text = ""; // 存放点击运算符按钮之前的数值 double defbutton = 0; // 运算符 String op = ""; // 上一次的按键 String lastKey = null; private void myInit() { resultStr = new ResultStr(); // 显示框对象 numButtons = new NumButtons();// 按钮面板对象 ceb = new CEB();// 特殊按钮面板对象 CE Backspace mopButs = new MopButs(); JPanel panel = new JPanel(); panel.setLayout(new BorderLayout()); panel.add(mopButs, BorderLayout.WEST); panel.add(resultStr, BorderLayout.NORTH); panel.add(ceb, BorderLayout.SOUTH); panel.add(numButtons, BorderLayout.CENTER); //this.setIconImage( )); //this.setIconImage(image) setBounds(200, 200, 350, 220); // 关闭时 退出程序 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setContentPane(panel); // 按钮 0-9 & . 添加监听器 数字按钮监听器 numButtons.button0.addActionListener(numberLister); numButtons.button1.addActionListener(numberLister); numButtons.button2.addActionListener(numberLister); numButtons.button3.addActionListener(numberLister); numButtons.button4.addActionListener(numberLister); numButtons.button5.addActionListener(numberLister); numButtons.button6.addActionListener(numberLister); numButtons.button7.addActionListener(numberLister); numButtons.button8.addActionListener(numberLister); numButtons.button9.addActionListener(numberLister); numButtons.buttonpoint.addActionListener(numberLister); // 按钮 +-*/= 添加监听器 运算符按钮监听器 numButtons.buttonA.addActionListener(opLister); numButtons.buttonB.addActionListener(opLister); numButtons.buttonC.addActionListener(opLister); numButtons.buttonD.addActionListener(opLister); numButtons.buttonE.addActionListener(opLister); // 按钮 sqrt % 1/x +/- CE 添加特殊按钮监听器 numButtons.butS.addActionListener(teOpLister); numButtons.but5S.addActionListener(teOpLister); numButtons.butDS.addActionListener(teOpLister); numButtons.butFS.addActionListener(teOpLister); ceb.butCE.addActionListener(teOpLister); ceb.butBp.addActionListener(bp); } // 构造器 public JTest(String name) { super(name); myInit(); } // 数字按扭监听器 ActionListener numberLister = new ActionListener() { public void actionPerformed(ActionEvent event) { JButton b = (JButton) event.getSource(); // 按下 1 2 3 4 5 6 7 8 9 时的情况 if (b.getText() != "0" && b.getText() != ".") { if (isE == true || i == 0) { resultStr.rsStr.setText(b.getText()); } else { text = resultStr.rsStr.getText(); if (Float.parseFloat(text) == 0) { if (text.indexOf(".") != -1) { resultStr.rsStr.setText(text + b.getText()); } else { resultStr.rsStr.setText(b.getText()); } } else { resultStr.rsStr.setText(text + b.getText()); } } isE = false; i = 1; } // 0 的情况 if (b.getText() == "0") { if (isE == true || i == 0) { resultStr.rsStr.setText(b.getText()); isE = false; i = 1; } else { /* * 判断条件如果text中的数值=0保持不变 不等于 0 * 判断在这个数值中是否有.存在?如果有那么就在原来数值基础之上添 加0;否则保持原来的数值不变 */ text = resultStr.rsStr.getText(); if (Float.parseFloat(text) != 0) { resultStr.rsStr.setText(text + "0"); } else { if (text.trim().indexOf(".") == -1) { resultStr.rsStr.setText(text); } else { resultStr.rsStr.setText(text + "0"); } } } } // . 的情况 if (b.getText() == ".") { if (isE == true || i == 0) { resultStr.rsStr.setText("0."); isE = false; i = 1; } else { text = resultStr.rsStr.getText(); if (text.trim().indexOf(".") == -1) { resultStr.rsStr.setText(text + "."); } else { resultStr.rsStr.setText(text); } } isE = false; i = 1; } lastKey = b.getText(); } }; // + - * / = 按扭监听器 ActionListener opLister = new ActionListener() { public void actionPerformed(ActionEvent event) { JButton b = (JButton) event.getSource(); if (lastKey != "+" && lastKey != "-" && lastKey != "*" && lastKey != "/") { // 如果lastKey 不是运算符 做相应的运算 否则不变 if (b.getText() != "=") { if (op != "") { getRsStr(true); // 计算结果 true 为不是按 = 计算 } else { defbutton = Double.parseDouble(resultStr.rsStr .getText()); } isE = true; i = 0; } else { getRsStr(false); // 计算结果 false 为按 = 计算 } } // 最后记录相应的信息 op = b.getText(); lastKey = b.getText(); defbutton = Double.parseDouble(resultStr.rsStr.getText()); } }; // 计算结果 当按下+ - * / 计算时参数是true 否则为 false public void getRsStr(boolean bl) { if (op != "") { Double d = Double.parseDouble(resultStr.rsStr.getText()); if (op == "+") { resultStr.rsStr.setText(String.valueOf(defbutton + d)); } if (op == "-") { resultStr.rsStr.setText(String.valueOf(defbutton - d)); } if (op == "*") { resultStr.rsStr.setText(String.valueOf(defbutton * d)); } if (op == "/") { resultStr.rsStr.setText(String.valueOf(defbutton / d)); } if (bl == false) { // 按钮 = 计算后 清空 否则不用清空 i = 0; text = ""; } } } // sqrt % 1/x +/- 按扭监听器 ActionListener teOpLister = new ActionListener() { public void actionPerformed(ActionEvent event) { JButton b = (JButton) event.getSource(); try { defbutton = Double.parseDouble(resultStr.rsStr.getText()); if (b.getText() == "sqrt") { resultStr.rsStr.setText(String .valueOf(Math.sqrt(defbutton))); } if (b.getText() == "%") { // 未计算 // resultStr.rsStr.setText(String.valueOf(defbutton*100)); } if (b.getText() == "1/x") { resultStr.rsStr.setText(String.valueOf(1 / defbutton)); } if (b.getText() == "+/-") { resultStr.rsStr.setText(String.valueOf(-defbutton)); } if (b.getText() == "C") { resultStr.rsStr.setText("0"); } } catch (NumberFormatException e) { // TODO Auto-generated catch block resultStr.rsStr.setText("0"); e.printStackTrace(); } i = 0; text = ""; op = ""; defbutton = 0.0; lastKey = b.getText(); } }; // Backspace 监听器 ActionListener bp = new ActionListener() { public void actionPerformed(ActionEvent event) { // 保存显示内容 String str = resultStr.rsStr.getText(); if (str.length() > 1) { // 显示内容的长度大于1时 去掉最后一位 str = str.substring(0, str.length() - 1); resultStr.rsStr.setText(str); // 去掉后如果 最后一位是 . 也去掉 if (resultStr.rsStr.getText().indexOf(".") == resultStr.rsStr .getText().length() - 1) { resultStr.rsStr.setText(resultStr.rsStr.getText() .substring(0, resultStr.rsStr.getText().length() - 1)); } } // 否则显示为 0 else { str = "0"; resultStr.rsStr.setText(str); } lastKey = "Backspace"; } }; public static void main(String[] args) { // TODO Auto-generated method stub JTest m = new JTest("计算器"); m.setVisible(true); } } class ResultStr extends JPanel { JTextField rsStr = new JTextField("0"); ResultStr() { rsStr.setHorizontalAlignment(SwingConstants.RIGHT); rsStr.enable(false); rsStr.setFont(new Font("宋体",5,24)); setLayout(new BorderLayout()); add(rsStr, BorderLayout.CENTER); } } class NumButtons extends JPanel { JButton button1 = new JButton("1"); JButton button2 = new JButton("2"); JButton button3 = new JButton("3"); JButton button4 = new JButton("4"); JButton button5 = new JButton("5"); JButton button6 = new JButton("6"); JButton button7 = new JButton("7"); JButton button8 = new JButton("8"); JButton button9 = new JButton("9"); JButton button0 = new JButton("0"); JButton buttonpoint = new JButton("."); JButton buttonA = new JButton("+"); JButton buttonB = new JButton("-"); JButton buttonC = new JButton("*"); JButton buttonD = new JButton("/"); JButton buttonE = new JButton("="); JButton butS = new JButton("sqrt"); JButton but5S = new JButton("%"); JButton butDS = new JButton("1/x"); JButton butFS = new JButton("+/-"); NumButtons() { setLayout(new GridLayout(4, 5)); add(button1); add(button2); add(button3); add(buttonA); add(butS); add(button4); add(button5); add(button6); add(buttonB); add(but5S); add(button7); add(button8); add(button9); add(buttonC); add(butDS); add(button0); add(buttonpoint); add(buttonD); add(buttonE); add(butFS); } } class CEB extends JPanel { JButton butCE = new JButton("C"); JButton butBp = new JButton("Backspace"); CEB() { setLayout(new GridLayout(1, 2)); add(butCE); add(butBp); } } class MopButs extends JPanel { JButton mAdd = new JButton("M+"); JButton mC = new JButton("MC"); JButton mR = new JButton("MR"); JButton mS = new JButton("MS"); MopButs() { setLayout(new GridLayout(4, 1)); add(mC); add(mR); add(mS); add(mAdd); } } 同时也压缩了 供大家下载 另外也有 坦克大战和贪吃蛇的代码 http://www.iteye.com/topic/574719 http://www.iteye.com/topic/576422 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-01-27
swing啊,周末没事的时候研究研究
|
|
返回顶楼 | |
发表时间:2010-01-28
我记得我们数据结构的书上说,计算器的实现方式是堆栈。按照堆栈运算才容易实现复杂运算,如:16 + 354 * 5 -(34 + 22*2)...
|
|
返回顶楼 | |
发表时间:2010-03-14
很是可以啊,我也在做计算器就进来观摩一下,比我的强悍多了。
|
|
返回顶楼 | |