下载:
不知道怎么放文件,按照以下文件名建Java文件到一个包中即可使用
效果:
源代码:
启动.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("计算器");
//文本域,从左及右
JTextArea area1 = new JTextArea(1,13);
JTextArea area2 = new JTextArea(1,2);
JTextArea area3 = new JTextArea(1,13);
JTextArea area4 = new JTextArea(1,50);//右边结果输出小框
JTextArea area5 = new JTextArea(16,50);//右边大框
//水平盒子布局
Box hbox套三area = Box.createHorizontalBox();
Box hbox套三按钮 = Box.createHorizontalBox();
//网格布局,计算器界面
GridLayout gridLayout = new GridLayout(5,5);
//面板1 计算器按钮面板
JPanel jPanel1 = new JPanel();//文本
JPanel jPanel2 = new JPanel();//键盘
JPanel jPanel3 = new JPanel();//左大块
//面板2
JPanel jPanel4 = new JPanel();//右大块
//右边底下按钮
JButton buttona = new JButton("保存");
JButton buttonc = new JButton("复制");
JButton buttonz = new JButton("清除");
//1-9
JButton[] 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("=");
//其他运算符,,,,为了简便
JButton[] button其他 = {button加,button减,button乘,button除,button开方,button分式,button相反值,button小数点,button退格,button清空,button等于};
//监听器
//定义监听器类
button数字listenner button数字listenner1 = new button数字listenner(this);
button其他1 button其他1 = new button其他1(this);
button其他2 button其他2 = new button其他2(this);
button其他3 button其他3 = new button其他3(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其他1);
}
for(int i=4;i<7;i++) {
button其他[i].addActionListener(button其他2);
}
for(int i=8;i<11;i++) {
button其他[i].addActionListener(button其他3);
}
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数字listenner1);
}
for(int i=0;i<button其他.length;i++) {
button其他[i].setPreferredSize(new Dimension(50, 30));
jPanel2.add(button其他[i]);
}
//左上方组装
hbox套三area.add(area1);
hbox套三area.add(hbox套三area.createHorizontalStrut(5));
hbox套三area.add(area2);
hbox套三area.add(hbox套三area.createHorizontalStrut(5));
hbox套三area.add(area3);
jPanel1.add(hbox套三area);
//右下角按钮水平组装
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.计算器 = 计算器;
}
@Override
public 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");
}
}
@Override
public 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.计算器 = 计算器;
}
@Override
public 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+".");}
}
}
}
button数字listenner.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 button数字listenner implements ActionListener {
计算器 计算器;
public button数字listenner(计算器 计算器) {
super();
this.计算器 = 计算器;
}
@Override
public 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其他3.java
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
class button其他3 implements ActionListener{
计算器 计算器;
public button其他3(计算器 计算器) {
super();
this.计算器 = 计算器;
}
@Override
public 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 && 计算器.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其他2.java
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
class button其他2 implements ActionListener{
计算器 计算器;
public button其他2(计算器 计算器) {
super();
this.计算器 = 计算器;
}
@Override
public 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其他1.java
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
class button其他1 implements ActionListener{
计算器 计算器;
public button其他1(计算器 计算器) {
super();
this.计算器 = 计算器;
}
@Override
public 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();
@Override
public 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 block
e1.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();
}
}