标签:event gui and closed ack lag 监听 open ttext
前几天刚刚自学完JavaGUI基础知识,就想着做一个简单的计算器。 写代码就是这样,想到了就要去尝试。于是经过了漫长的,,,,代码渐渐完善。但是还是有一两个bug没有完善(智商不够用啊) ,因为输入的情况有点多,连续if嵌套,最后懵了。
1 package cn.bjxt.test1; 2 3 import java.awt.BorderLayout; 4 import java.awt.FlowLayout; 5 import java.awt.GridLayout; 6 import java.awt.event.ActionEvent; 7 import java.awt.event.ActionListener; 8 9 import javax.swing.JButton; 10 import javax.swing.JFrame; 11 import javax.swing.JPanel; 12 import javax.swing.JTextField; 13 14 public class test05 extends JFrame{ 15 16 private String lastCommand;//保存每次输入的运算符,然后进行判断 17 private double result; 18 private boolean start; 19 private boolean flag; 20 JTextField jt=null; 21 JPanel jp=null; 22 JButton jb1,jb2,jb3,jb4,jb5,jb6,jb7,jb8,jb9,jb10,jb11,jb12,jb13,jb14,jb15,jb16,jb17; 23 public static void main(String[] args) { 24 new test05(); 25 } 26 //构建函数 27 public test05(){ 28 //变量初始化 29 result=0; 30 start=true; 31 flag=false; 32 lastCommand="="; 33 //添加文本框 34 jt=new JTextField(10); 35 this.add(jt,BorderLayout.NORTH); 36 37 //设置布局格式 38 jp=new JPanel(); 39 GridLayout g=new GridLayout(4, 4,3,3); 40 jp.setLayout(g); 41 42 jb1=new JButton("7"); 43 jb2=new JButton("8"); 44 jb3=new JButton("9"); 45 jb4=new JButton("+"); 46 jb5=new JButton("4"); 47 jb6=new JButton("5"); 48 jb7=new JButton("6"); 49 jb8=new JButton("/"); 50 jb9=new JButton("1"); 51 jb10=new JButton("2"); 52 jb11=new JButton("3"); 53 jb12=new JButton("0"); 54 jb13=new JButton("*"); 55 jb14=new JButton("."); 56 57 jb16=new JButton("-"); 58 //重置 59 //没有完善,只要稍加改动就行 60 jb17=new JButton("0.0"); 61 this.add(jb17,BorderLayout.SOUTH); 62 jb17.addActionListener(new ActionListener() { 63 64 @Override 65 public void actionPerformed(ActionEvent e) { 66 67 start=true; 68 69 jt.setText(""); 70 71 } 72 }); 73 74 jb15=new JButton("="); 75 76 jp.add(jb1); 77 jp.add(jb2); 78 jp.add(jb3); 79 jp.add(jb4); 80 jp.add(jb5); 81 jp.add(jb6); 82 jp.add(jb7); 83 jp.add(jb8); 84 jp.add(jb9); 85 jp.add(jb10); 86 jp.add(jb11); 87 jp.add(jb12); 88 jp.add(jb13); 89 jp.add(jb14); 90 jp.add(jb15); 91 jp.add(jb16); 92 93 nActoinListen(jb1); 94 nActoinListen(jb2); 95 nActoinListen(jb3); 96 cActoinListen(jb4); 97 nActoinListen(jb5); 98 nActoinListen(jb6); 99 nActoinListen(jb7); 100 cActoinListen(jb8); 101 nActoinListen(jb9); 102 nActoinListen(jb10); 103 nActoinListen(jb11); 104 nActoinListen(jb12); 105 cActoinListen(jb13); 106 nActoinListen(jb14); 107 cActoinListen(jb16); 108 cActoinListen(jb15); 109 110 111 112 113 this.add(jp,BorderLayout.CENTER); 114 this.setTitle("简易计算器"); 115 this.setSize(300,300); 116 this.setVisible(true); 117 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 118 119 } 120 //数字监听器 121 public void nActoinListen(JButton jb) 122 { 123 jb.addActionListener(new ActionListener() { 124 125 public void actionPerformed(ActionEvent e) { 126 127 String input=jb.getText(); 128 129 if(start) 130 { 131 if(input.equals(".")) 132 { 133 jt.setText("."); 134 return; 135 } 136 start=false; 137 } 138 139 else 140 { 141 if(jt.getText().indexOf(".")!=-1) 142 { 143 if(input.equals(".")) 144 { 145 return; 146 } 147 } 148 149 if(jt.getText().equals("-")) 150 { 151 if(input.equals(".")) 152 { 153 return; 154 } 155 } 156 157 158 if(jt.getText().equals("0")) 159 { 160 if(input.equals(".")) 161 { 162 return; 163 } 164 } 165 } 166 167 if(flag){//当第二次输入数字时,就清空原先的 168 jt.setText(""); 169 flag=false; 170 } 171 172 173 jt.setText(jt.getText()+input); 174 } 175 176 }); 177 } 178 179 //运算监听器 180 public void cActoinListen(JButton jb) 181 { 182 jb.addActionListener(new ActionListener() { 183 184 public void actionPerformed(ActionEvent e) { 185 String input=jb.getText(); 186 187 if(start){//判断首次输入的是不是“-” 188 if(input.equals("-")) 189 { 190 jt.setText("-"); 191 start=false; 192 } 193 } 194 else 195 { 196 if(!flag) 197 { 198 cal(Double.parseDouble(jt.getText())); 199 } 200 lastCommand=input; 201 flag=true; 202 start=true; 203 } 204 205 } 206 }); 207 } 208 209 public void cal(double x) 210 { 211 if(lastCommand.equals("+")) 212 { 213 result +=x; 214 } 215 else if(lastCommand.equals("-")) 216 { 217 result -=x; 218 } 219 else if(lastCommand.equals("*")) 220 { 221 result *=x; 222 } 223 else if(lastCommand.equals("/")) 224 { 225 result /=x; 226 } 227 else if(lastCommand.equals("=")) 228 { 229 result =x; 230 } 231 jt.setText(""+result); 232 } 233 }
就这样吧,以后能力强大了,再完善。
标签:event gui and closed ack lag 监听 open ttext
原文地址:https://www.cnblogs.com/yilxq/p/10054045.html