package jsq; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.*; public class calculator { JFrame f=new JFrame("Calculator"); JPanel p1=new JPanel(); JPanel p2=new JPanel(); JTextField tf=new JTextField(20); JButton b0=new JButton("0"); JButton b1=new JButton("1"); JButton b2=new JButton("2"); JButton b3=new JButton("3"); JButton b4=new JButton("4"); JButton b5=new JButton("5"); JButton b6=new JButton("6"); JButton b7=new JButton("7"); JButton b8=new JButton("8"); JButton b9=new JButton("9"); JButton b10=new JButton("0"); JButton b11=new JButton("+"); JButton b12=new JButton("-"); JButton b13=new JButton("*"); JButton b14=new JButton("."); JButton b15=new JButton("="); JButton b16=new JButton("/"); JButton b17=new JButton("Backspace"); JButton b18=new JButton("C"); double output1=0,output2=0; boolean outflag1=false,outflag2=false,opflag=false;//outflag1,outflag2表示output1,output2是否有操作数。opflag表示op是否有运算符。 private int op = 0,add = 1,sub = 2,mul = 3,div = 4; boolean firstpress=false; public static void main(String[] args) { // TODO Auto-generated method stub calculator calc=new calculator(); calc.bevent(); } public calculator(){ p1.setLayout(new FlowLayout(FlowLayout.CENTER)); p1.add(tf); f.add(p1,BorderLayout.NORTH); p2.setLayout(new GridLayout(5,5)); p2.add(b1); p2.add(b2); p2.add(b3); p2.add(b11); p2.add(b4); p2.add(b5); p2.add(b6); p2.add(b12); p2.add(b7); p2.add(b8); p2.add(b9); p2.add(b13); p2.add(b10); p2.add(b14); p2.add(b15); p2.add(b16); p2.add(b17); p2.add(b18); tf.setBackground(Color.PINK); f.add(p2,BorderLayout.CENTER); tf.setText(tf.getText()+"0"); tf.setEditable(false); f.pack(); f.setLocationRelativeTo(null); f.setVisible(true); } public void bevent(){ b10.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent evt) { if(!(tf.getText().length()==1 && tf.getText().contains("0"))) tf.setText(tf.getText()+"0"); } }); b1.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent evt) { addnum("1"); } }); b2.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent evt) { addnum("2"); } }); b3.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent evt) { addnum("3"); } }); b4.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent evt) { addnum("4"); } }); b5.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent evt) { addnum("5"); } }); b6.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent evt) { addnum("6"); } }); b7.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent evt) { addnum("7"); } }); b8.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent evt) { addnum("8"); } }); b9.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent evt) { addnum("9"); } }); b14.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent evt) { if(!tf.getText().contains(".")) tf.setText(tf.getText()+"."); } }); b11.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent evt) { opbutton(add); } }); b12.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent evt) { opbutton(sub); } }); b13.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent evt) { opbutton(mul); } }); b16.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent evt) { opbutton(div); } }); } public void addnum(String x){ if((tf.getText().length()==1 && tf.getText().contains("0"))) tf.setText(x); else tf.setText(tf.getText()+x); if (opflag==true && firstpress==false){ tf.setText(x); firstpress=true; } } private double stringToDouble(String x){ double y = Double.parseDouble(x); return y; } private void operate(){ switch (op){ case 0: output1 = output1+0; break; case 1: output1 = output1+output2; tf.setText(String.valueOf(output1)); break; case 2: output1 = output1-output2; tf.setText(String.valueOf(output1)); break; case 3: output1 = output1*output2; tf.setText(String.valueOf(output1)); break; case 4: if(output2!=0){ output1 = output1/output2; tf.setText(String.valueOf(output1)); }else{ output1=0; tf.setText(String.valueOf(output1)); } break; } } void opbutton(int x){ if (outflag1==false){ output1=stringToDouble(tf.getText()); outflag1=true; } if(opflag==false){ op=x; opflag=true; firstpress=false; } else { output2=stringToDouble(tf.getText()); operate(); outflag1=true; op=x; opflag=true; outflag2=false; firstpress=false; } } }
思路:你的实现都是可以通过事件来控制组件内容显示的,如清除,直接将组件内容清空即给“”
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Calc extends JFrame implements ActionListener,KeyListener{
JTextField txtResult;
JButton btn0,btn1,btn2,btn3,btn4,btn5,btn6,btn7,btn8,btn9;
JButton btnAdd,btnSub,btnTimes,btnDiv,btnEquals,btnDot;
JButton btnClear,btnExit;
JPanel centerPanel,southPanel;
double num1=0,num2=0,result=0;
String opr= "+";
public Calc() {
setTitle("计算器2016");
txtResult = new JTextField("0.0");
//只读
// txtResult.setEditable(false);
centerPanel = new JPanel(new GridLayout(4,4,5,5));
southPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
add(txtResult,BorderLayout.NORTH);
txtResult.addKeyListener(this);
add(centerPanel);
btn0 = new JButton("0");
btn1 = new JButton("1");
btn2 = new JButton("2");
btn3 = new JButton("3");
btn4 = new JButton("4");
btn5 = new JButton("5");
btn6 = new JButton("6");
btn7 = new JButton("7");
btn8 = new JButton("8");
btn9 = new JButton("9");
btnAdd = new JButton("+");
btnSub = new JButton("-");
btnTimes = new JButton("*");
btnDiv = new JButton("/");
btnDot = new JButton(".");
btnEquals = new JButton("=");
centerPanel.add(btn7);
centerPanel.add(btn8);
centerPanel.add(btn9);
centerPanel.add(btnDiv);
centerPanel.add(btn4);
centerPanel.add(btn5);
centerPanel.add(btn6);
centerPanel.add(btnTimes);
centerPanel.add(btn1);
centerPanel.add(btn2);
centerPanel.add(btn3);
centerPanel.add(btnSub);
centerPanel.add(btn0);
centerPanel.add(btnDot);
centerPanel.add(btnEquals);
centerPanel.add(btnAdd);
add(southPanel,BorderLayout.SOUTH);
btnClear = new JButton("清除");
btnExit = new JButton("关闭");
southPanel.add(btnClear);
southPanel.add(btnExit);
//监听
btn0.addActionListener(this);
btn1.addActionListener(this);
btn2.addActionListener(this);
btn3.addActionListener(this);
btn4.addActionListener(this);
btn5.addActionListener(this);
btn6.addActionListener(this);
btn7.addActionListener(this);
btn8.addActionListener(this);
btn9.addActionListener(this);
btnAdd.addActionListener(this);
btnSub.addActionListener(this);
btnTimes.addActionListener(this);
btnDiv.addActionListener(this);
btnDot.addActionListener(this);
btnEquals.addActionListener(this);
btnClear.addActionListener(this);
btnExit.addActionListener(this);
setSize(300, 300);
setVisible(true);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new Calc();
}
public void actionPerformed(ActionEvent e) {
if(e.getSource()==btnClear){
txtResult.setText("0");
}else if(e.getSource()==btnExit){
System.exit(0);
}else if(e.getSource()==btn0){
setText("0");
}else if(e.getSource()==btn1){
setText("1");
}else if(e.getSource()==btn2){
setText("2");
}else if(e.getSource()==btn3){
setText("3");
}else if(e.getSource()==btn4){
setText("4");
}else if(e.getSource()==btn5){
setText("5");
}else if(e.getSource()==btn6){
setText("6");
}else if(e.getSource()==btn7){
setText("7");
}else if(e.getSource()==btn8){
setText("8");
}else if(e.getSource()==btn9){
setText("9");
}else if(e.getSource()==btnDot){
setText(".");
}else if(e.getSource()==btnAdd){
opr = "+";
operator();
//清空内容
txtResult.setText("");
}else if(e.getSource()==btnSub){
opr = "-";
operator();
//清空内容
txtResult.setText("");
}else if(e.getSource()==btnTimes){
opr = "*";
operator();
//清空内容
txtResult.setText("");
}else if(e.getSource()==btnDiv){
opr = "/";
operator();
//清空内容
txtResult.setText("");
}else if(e.getSource()==btnEquals){
operator();
txtResult.setText(result+"");
num1=num2=result=0;
}
}
public void setText(String s){
//获取文本框的值
String str = txtResult.getText().trim();
//如果文本框里面的值是0,那么初始化为空值
if(str.equals("" ) || Double.parseDouble(str)==0){
str = "";
}
str += s;
//设置文本框的值
txtResult.setText(str);
}
public void operator(){
if(txtResult.getText().equals("")){
num1=0;
}else{
num1 = Double.parseDouble(txtResult.getText().trim());
}
System.out.println("num1="+num1+";num2="+num2);
if(opr.equals("+")){
result = num1+num2;
}else if(opr.equals("-")){
result = num2-num1;
}else if(opr.equals("*")){
result = num1*num2;
}else if(opr.equals("/")){
result = num2/num1;
}
num2=num1;
}
String m_temp;
public void keyPressed(KeyEvent e) {
m_temp = txtResult.getText();
}
public void keyReleased(KeyEvent e) {
try{
Double.parseDouble(txtResult.getText());
}catch(Exception ex){
txtResult.setText(m_temp);
}
}
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
}
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632