效果图:
需要建立的类别
源代码
启动.java
import java.awt.BorderLayout;import java.awt.Button;import java.awt.Dimension;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import javax.swing.Box;import javax.swing.JApplet;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JSplitPane;import javax.swing.JTextArea;import javax.swing.plaf.basic.BasicSplitPaneUI.BasicVerticalLayoutManager; public class 启动 {public static void main(String[] args) {计算器 start = new 计算器(); start.启动();}}
计算器.java
import java.awt.Dimension;import java.awt.*; import javax.swing.*; public class JFrame计算器{//界面 frame = new JFrame(计算器);///文本域,从左到右,JTextarearea area1 = new JTextArea(1,13);JTextArea area2 = new JTextArea(1,2);JTextArea area3 = new JTextArea(1,13);JTextArea area4 = new JTextArea(1,50);//右侧结果输出小框JTextarearea area5 = new JTextArea(16,50);//右边大框//水平盒布局Box hbox套三arear = Box.createHorizontalBox();Box hbox套三按钮 = Box.createHorizontalBox();//网格布局,Gridlayout计算器界面 gridLayout = new GridLayout(5,5);//面板1 JPanell计算器按钮面板 JPanel1 = new JPanel();//JPanell文本 JPanel2 = new JPanel();//JPanel键盘 jpanel3 = new JPanel();/左大块//面板2JPanel jpanel4 = new JPanel();//右大块//右下按钮JButton buttona = new JButton(“保存”);JButton buttonc = new JButton(复制);JButton buttonz = new JButton(“清除”);//1-9JButton[] button数字 = new JButton[10];JButton button加 = new JButton("+");JButton button减少 = new JButton("-");JButton button乘 = new JButton("*");JButton button除 = new JButton("/");JButton button清空 = new JButton("C");JButton button分类 = new JButton("1/x");JButton button相反值 = new JButton(+/-);JButton button小数点 = new JButton(".");JButton button开方 = new JButton("sqrt");JButton button退格 = new JButton(退格);JButton button等于 = new JButton("=");///其它操作符,,,,JButtton[] 其他button = {button加,button减,button乘,button除,button开方,button分类,button相反值,buttton小数点,buttton退格,buttton清空,button等于};////定义监听器类数字listennerbutton/// button数字listener = new 数字listennerbutton(this);其他一个button 其他一个button = new 其他一个button(this);另外两个button 另外两个button = new 另外两个button(this);其他三个button 其他三个button = new 其他三个button(this);button小数点 button小数点a = new button小数点(this);myfocus myfocus1 = new myfocus(this);myfocus myfocus3 = new myfocus(this);buttonaczlistenner buttonaczlistenner = new buttonaczlistenner(this); void 组装监听器() { area1.addFocusListener(myfocus1); area3.addFocusListener(myfocus3); area4.setEditable(false); area5.setEditable(false); buttona.addActionListener(buttonaczlistenner);buttonc.addActionListener(buttonaczlistenner);buttonz.addActionListener(buttonaczlistenner);for(int i=0;i<4;i++) {button别的[i].addActionListener(其他一个button);}for(int i=4;i<7;i++) { 其他button[i].addActionListener(另外两个button);}for(int i=8;i<11;i++) { 其他button[i].addActionListener(其他三个button);}button小数点.addActionListener(button小数点a);} void 命名() {area1.setName("1");area3.setName("3");其他button[7].setName(".");其他button[8].setName(退格);其他button[9].setName("C");其他button[10].setName("=");buttona.setName(“保存”);buttonc.setName(复制);buttonz.setName(“清除”);} void 组装布局() { 命名(); 组装监听器(); ///计算器组装按钮 jpanel2.setLayout(gridLayout);///方格布局 for(int i=0;i<=9;i++) { button数字[i]=new JButton(""+i); button数字[i].setPreferredSize(new Dimension(60, 60)); jpanel2.add(button数字[i]); button数字[i].addActionListener(button数字listener1); } for(int i=0;i<其他button.length;i++) { 其他button[i].setPreferredSize(new Dimension(50, 30)); jpanel2.add(button其他[i]); } //组装在左上方 hbox套三arearrr.add(area1); hbox套三arearrr.add(hbox套三arearrrr.createHorizontalStrut(5)); hbox套三arearrr.add(area2); 三areahbox套三r.add(三areahbox套三rr.createHorizontalStrut(5)); 三areahbox套三r.add(area3); jpanel1.add(三areahbox套三rr); /////右下角按钮水平组装 hbox套三按钮.add(hbox套三按钮.createHorizontalStrut(10)); hbox套三按钮.add(buttona); hbox套三按钮.add(hbox套三按钮.createHorizontalStrut(5)); hbox套三按钮.add(buttonc); hbox套三按钮.add(hbox套三按钮.createHorizontalStrut(5)); hbox套三按钮.add(buttonz); hbox套三按钮.add(hbox套三按钮.createHorizontalStrut(10)); //组装左边的大框 jpanel3.add(jpanel1,BorderLayout.NORTH); jpanel3.add(jpanel2,BorderLayout.CENTER); //组装右边的大框 jpanel4.add(area4,BorderLayout.NORTH); jpanel4.add(area5,BorderLayout.CENTER); jpanel4.add(hbox套三按钮,BorderLayout.SOUTH); } void 启动(){ 组装布局();//组装组件JSplitpane jSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,jpanel3,jpanel4);frame.setResizable(false);frame.add(jSplitPane);///添加最终窗格,他是分裂的frame.setBounds(350,350,832,400);//frame.pack();frame.setVisible(true);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}
myfocus.java
import java.awt.event.FocusEvent;import java.awt.event.FocusListener; class myfocus implements FocusListener{计算器 计算器;public myfocus(计算器 计算器) {super();this.计算器 = 计算器;}@Overridepublic void focusGained(FocusEvent e) {if(计算器.area1.getName().equals(e.getComponent().getName())) {计算器.area1.setName(“框一”;计算器.area3.setName("3");}else if(计算器.area3.getName().equals(e.getComponent().getName())) {计算器.area3.setName(“框三”);计算器.area1.setName("1");}} @Overridepublic void focusLost(FocusEvent e) {}}
button小数点.java
import java.awt.event.ActionEvent;import java.awt.event.ActionListener; public class button小数点 implements ActionListener {计算器 计算器;public button小数点(计算器 计算器) {super();this.计算器 = 计算器;}@Overridepublic void actionPerformed(ActionEvent e) {//String buttonname =e.getActionCommand(); //double n=Double.parseDouble(计算器.area1.getText());//String content =计算器.area1.getText();if(计算器.area1.getName().equals(“框一”){String content = 计算器.area1.getText();if(content.equals(null)); if(content.contains(".")) ;else {计算器.area1.setText(content+".");}}if(计算器.area3.getName().equals(“框三”){String content =计算器.area3.getText();if(content.equals(null)); if(content.contains(".")) ;else {计算器.area3.setText(content+".");}}}}
数字listennerbutton.java
import java.awt.Color;import java.awt.Component;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.FocusEvent;import java.awt.event.FocusListener; import javax.swing.JComponent;import javax.swing.JTextArea; import org.w3c.dom.Text; import com.sun.source.tree.CatchTree; public class 数字listennerbutton implements ActionListener {计算器 计算器;public 数字listennerbutton(计算器 计算器) {super();this.计算器 = 计算器;} @Overridepublic void actionPerformed(ActionEvent e) {if(计算器.area1.getName().equals(“框一”) {String s1 = 计算器.area1.getText();计算器.area1.setText(s1+e.getActionCommand());}if(计算器.area3.getName().equals(“框三”) {String s1 = 计算器.area3.getText();计算器.area3.setText(s1+e.getActionCommand());}}}
其他三个button.java
import java.awt.event.ActionEvent;import java.awt.event.ActionListener; class 其他三个button implements ActionListener{计算器 计算器;public 其他三个button(计算器 计算器) {super();this.计算器 = 计算器;}@Overridepublic void actionPerformed(ActionEvent e) {try {String text5=计算器.area5.getText();String oper0=e.getActionCommand();if(oper0.equals(计算器.button清空.getName())) {计算器.area1.setText("");计算器.area2.setText("");计算器.area3.setText("");}else if(oper0.equals(计算器.button退格.getName())) {if(计算器.area1.getName().equals(“框一”){String s=计算器.area1.getText();if(s!=null) {String ss=s.substring(0, s.length()-1);计算器.area1.setText(ss);}else {}}else if(计算器.area3.getName().equals(“框三”){String s=计算器.area3.getText();if(s!=null) {String ss=s.substring(0, s.length()-1);计算器.area3.setText(ss);}else {}}/等号很多事情else if(oper0.equals(计算器.button等于.getName())){if(计算器.area1!=null && 计算器.area3!=null && 计算器.area3!=null && 计算器.area2!=null) {String oper1=计算器.area2.getText();double sum=0;double n=Double.parseDouble(计算器.area1.getText());double m=Double.parseDouble(计算器.area3.getText());switch(oper1) {case "+" : sum=n+m; break; case "-" : sum=n-m; break; case "*": sum=n*m; break; case "/": sum=n/m; break;}计算器.area4.setText“+”=”+sum);String result=n+“+oper1+”+m+"="+sum;计算器.area5.setText(text5+""+result+"\n");} }}catch (Exception e2) {// TODO: handle exception}}}
另外两个button.java
import java.awt.event.ActionEvent;import java.awt.event.ActionListener; class 另外两个button implements ActionListener{计算器 计算器;public button其他2(计算器 计算器) {super();this.计算器 = 计算器;}@Overridepublic void actionPerformed(ActionEvent e) {try {String buttonname =e.getActionCommand(); if(计算器.area1.getName().equals(“框一”){ if(计算器.area1!=null) { double sum = 0; double n=Double.parseDouble(计算器.area1.getText()); switch(buttonname) { case "1/x" : sum=1/n; break; case "+/-" : sum=-n; break; case "sqrt": sum=Math.sqrt(n); break; } 计算器.area1.setText(""+sum); } }else if(计算器.area3.getName().equals(“框三”){if(计算器.area3!=null) { double sum = 0; double n=Double.parseDouble(计算器.area3.getText()); switch(buttonname) { case "1/x" : sum=1/n; break; case "+/-" : sum=-n; break; case "sqrt": sum=Math.sqrt(n); break; } 计算器.area3.setText(""+sum);}}}catch (Exception ee) {} }}
其他一个button.java
import java.awt.event.ActionEvent;import java.awt.event.ActionListener; class 其他一个button implements ActionListener{计算器 计算器;public 其他一个button(计算器 计算器) {super();this.计算器 = 计算器;}@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stub计算器.area2.setText(e.getActionCommand());}}
buttonaczlistenner.java
import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.BufferedWriter;import java.io.FileInputStream;import java.io.FileWriter;import java.io.IOException; import javax.swing.JOptionPane; public class buttonaczlistenner implements ActionListener {计算器 计算器;public buttonaczlistenner(计算器 计算器) {super();this.计算器 = 计算器;}save save = new save();@Overridepublic void actionPerformed(ActionEvent e) {String name=e.getActionCommand();if(name.equals(保存) {try {save.f(计算器.area5.getText());JOptionPane.showMessageDialog(null, “成功保存”); } catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}else if(name.equals(复制) {计算器.area5.copy();JOptionPane.showMessageDialog(null, “成功复制”);}else if(name.equals(“清除”) {计算器.area4.setText("");计算器.area5.setText("");JOptionPane.showMessageDialog(null, “清除成功”);}}} class save{ void f(String s) throws IOException { FileWriter fw = new FileWriter("data.txt",true); BufferedWriter bfw =new BufferedWriter(fw); bfw.write(s+"\n"); bfw.close(); }}
