java swing组件实现信计树&计算器 本学期Java老师布置的作业

本文档展示了如何使用Java Swing构建一个计算器应用,包括界面设计、事件监听以及运算处理。同时,还介绍了如何设计一个树形结构展示信计学院不同班级的信息,当选择特定班级时,能从对应文本文件中读取并显示详细信息。
摘要由CSDN通过智能技术生成

安农大18电子1班

Java实现计算器信计树,学生管理系统

2020-12-30

基于Idea2019的计算器设计

  1. 使用环境
    Idea 2019,jdk1.8
  2. 计算机界面开发
  3. 创建计算机工程
  4. 使用的包
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.Arrays;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
  5. 使用的swing组件
    使用Jpanel的BorderLayout
  6. 创建”java软件实战”工程
    File->New->Project…

首先写一个简单的界面包含以下27个符号
{“7”,“8”,“9”,"/",“sqrt”,“4”,“5”,“6”,"*","%",“1”,“2”,“3”,"-",“1/x”,“0”,"+/-",".","+","=",“MC”,“MR”,“MS”,“M+”,“Back”,“CE”,“C”};

界面使用BorderLayout布局,需要调用java.awt.BorderLayout分为north,left和center,center使用网格布局
5. 增加监听事件
使用JButton中的addActionListener对按钮实现监听

  1. 创建监听事件的外部处理函数和类
    使用到的类:actionListener
    实现功能:对键盘的结果的运算,将各种运算结果返回到text文本框内。

  2. 数字处理事件(±*/四则运算)
    定义MyMath类,对BigDecimal对象进行计算

使用callMethod方法实现用if else语句实现对复杂按钮的处理判断

  1. 代码段:

package calframe;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class CalFrame extends JFrame {
/**
* 计算器的外观设计
*/
private static final long serialVersionUID = 1L;
private final static int PRE_WIDTH = 500;
private final static int PRE_HEIGHT = 400;

private JTextField text = null;
private JButton button = null; //存储标记

private String[] nOp = {"7","8","9","/","sqrt","4","5","6","*","%","1","2","3","-","1/x","0","+/-",".","+","="};
private String[] mOp = {"MC","MR","MS","M+"};
private String[] rOp = {"Back","CE","C"};
private CalService service = new CalService();

public CalFrame(){
    this.setTitle("计算器");
    this.setSize(PRE_WIDTH, PRE_HEIGHT);
    this.setLocationRelativeTo(null);
    this.setResizable(false);

    //添加底层
    JPanel panel = new JPanel();
    panel.setLayout(new BorderLayout(10,1));
    panel.add(getTextField(), BorderLayout.NORTH);
    panel.setPreferredSize(new Dimension(PRE_WIDTH, PRE_HEIGHT));

    //WEST
    JButton[] mButton = getMButton();
    JPanel panel1 = new JPanel();
    panel1.setLayout(new GridLayout(5,1,0,5));
    for(JButton b : mButton ){
        panel1.add(b);
    }
    panel.add(panel1,BorderLayout.WEST);
    //
    JButton[] rButton = getRButton();
    JPanel panel2 = new JPanel();
    panel2.setLayout(new BorderLayout(1,5));
    JPanel panel21 = new JPanel();
    panel21.setLayout(new GridLayout(1,3,3,3));
    for(JButton b : rButton){
        panel21.add(b);
    }
    panel2.add(panel21,BorderLayout.NORTH);

    JButton[] nButton = getNButton();
    JPanel panel22 = new JPanel();
    panel22.setLayout(new GridLayout(4,5,3,5));
    for(JButton b : nButton){
        panel22.add(b);
    }
    panel2.add(panel22,BorderLayout.CENTER);
    panel.add(panel2,BorderLayout.CENTER);

    this.add(panel);
    this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    this.setVisible(true);


}
//返回显示框
private JTextField getTextField(){
    text = new JTextField("0",10);
    //text.setSize(480, 50);
    return text;
}
//返回数字键
private JButton[] getNButton(){
    String[] redButton = {"/","*","-","+","="};
    JButton[] nbutton = new JButton[nOp.length];
    for(int i = 0; i < this.nOp.length; i++){
        JButton b = new JButton(this.nOp[i]);
        b.addActionListener(getActionListener());

        Arrays.sort(redButton);
        if(Arrays.binarySearch(redButton, nOp[i]) >= 0){
            b.setForeground(Color.red);
        }else{
            b.setForeground(Color.blue);
        }
        nbutton[i] = b;
    }
    return nbutton;
}
//返回操作健
private JButton[] getMButton(){
    JButton[] mbutton = new JButton[mOp.length + 1];
    mbutton[0] = getButton();
    for(int i = 0; i < this.mOp.length; i++){
        JButton b = new JButton(this.mOp[i]);
        b.addActionListener(getActionListener());
        b.setForeground(Color.red);
        mbutton[i+1] = b;
    }
    return mbutton;
}
private JButton[] getRButton(){
    JButton[] rbutton = new JButton[rOp.length];
    for(int i = 0; i < this.rOp.length; i++){
        JButton b = new JButton(this.rOp[i]);
        b.addActionListener(getActionListener());
        b.setForeground(Color.red);
        rbutton[i] = b;
    }
    return rbutton;
}
private JButton getButton(){
    button = new JButton();
    return button;
}
private ActionListener getActionListener(){
    ActionListener actionListener = new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            String cmd = e.getActionCommand();
            String result = null;
            try {
                result = service.callMethod(cmd, text.getText());
            } catch (Exception e2) {
                System.out.println(e2.getMessage());
            }
            if(cmd.indexOf("MC") == 0){
                button.setText("");
            }else if(cmd.indexOf("M") == 0){
                button.setText("M");
            }
            //显示计算结果
            if(result != null){
                text.setText(result);
            }

        }
    };
    return actionListener;
}
public static void main(String[] args) {
    new CalFrame();
}

}

package calframe;

import java.math.BigDecimal;

public class MyMath {
/**
* 为一个double类型创建BigDecimal对象
*/
private static BigDecimal getBigDecimal(double number){
return new BigDecimal(number);
}
public static double add(double num1, double num2) {
BigDecimal first = getBigDecimal(num1);
BigDecimal second = getBigDecimal(num2);
return first.add(second).doubleValue();
}
public static double subtract(double num1, double num2) {
BigDecimal first = getBigDecimal(num1);
BigDecimal second = getBigDecimal(num2);
return first.subtract(second).doubleValue();
}
public static double multiply(double num1, double num2) {
BigDecimal first = getBigDecimal(num1);
BigDecimal second = getBigDecimal(num2);
return first.multiply(second).doubleValue();
}
public static double divide(double num1, double num2) {
BigDecimal first = getBigDecimal(num1);
BigDecimal second = getBigDecimal(num2);
return first.divide(second,3,BigDecimal.ROUND_HALF_UP).doubleValue();
}
}

package calframe;

public class CalService {
private boolean isSecondNum = false;
private String lastOp;
private String firstNum = “0”;
private String secondNum = “null”;
private double store;
private String numString = “0123456789.”;
private String opString = “±*/”;

public String catNum(String cmd, String text) {
    String result = cmd;
    // 如果text不等于0
    if (!"0".equals(text)) {
        if (isSecondNum) {
            isSecondNum = false;
        } else {
            result = text + cmd;
        }
    }
    if (result.indexOf(".") == 0) {
        result = "0" + result;
    }
    return result;
}

public String setOp(String cmd, String text) {
    this.lastOp = cmd;
    this.firstNum = text;
    this.secondNum = null;

    this.isSecondNum = true;
    return null;
}

public String cal(String text, boolean isPercent) {
    double secondResult = secondNum == null ? Double.valueOf(text)
            .doubleValue() : Double.valueOf(secondNum).doubleValue();

    //除数为0
    if(secondResult == 0 && this.lastOp.equals("/")){
        return "0";
    }

    //有%
    if(isPercent){
        secondResult = MyMath.multiply(Double.valueOf(firstNum), MyMath.divide(secondResult, 100));
    }
    if(this.lastOp.equals("+")){
        firstNum = String.valueOf(MyMath.add(Double.valueOf(firstNum),secondResult));
    }else if (this.lastOp.equals("-")) {
        firstNum = String.valueOf(MyMath.subtract(Double.valueOf(firstNum),secondResult));
    }else if (this.lastOp.equals("*")) {
        firstNum = String.valueOf(MyMath.multiply(Double.valueOf(firstNum),secondResult));
    }else if (this.lastOp.equals("/")) {
        firstNum = String.valueOf(MyMath.divide(Double.valueOf(firstNum),secondResult));
    }

    secondNum = secondNum == null ? text :secondNum;
    this.isSecondNum = true;
    return firstNum;
}
//求开方
public String sqrt(String text){
    this.isSecondNum = true;
    return String.valueOf(Math.sqrt(Double.valueOf(text)));
}
//求倒数
public String setReciprocal(String text){
    if (text.equals("0")){
        return text;
    }else{
        this.isSecondNum = true;
        return String.valueOf(MyMath.divide(1, Double.valueOf(text)));
    }
}
//存储
public String mCmd(String cmd,String text){
    if(cmd.equals("M+")){
        store = MyMath.add(store, Double.valueOf(text));
    }else if (cmd.equals("MC")) {
        store = 0;
    }else if (cmd.equals("MR")) {
        isSecondNum = true;
        return String.valueOf(store);
    }else if (cmd.equals("MS")) {
        store = Double.valueOf(text).doubleValue();
    }
    return null;
}

public String backSpace(String text){
    return text.equals("0") || text.equals("") ? "0" :text.substring(0,text.length()-1);
}

public String setNegative(String text){
    if(text.indexOf("-") == 0){
        return text.substring(1,text.length());
    }else{
        return "-" + text;
    }
}
public String clearAll(){
    this.firstNum = "0";
    this.secondNum = null;
    return this.firstNum;
}
public String clear(String text){
    return "0";
}

public String callMethod(String cmd, String text){
    if(cmd.equals("C")){
        return clearAll();
    }else if(cmd.equals("CE")){
        return clear(text);
    }else if (cmd.equals("Back")) {
        return backSpace(text);
    }else if (numString.indexOf(cmd) != -1) {
        return catNum(cmd, text);
    }else if (opString.indexOf(cmd) != -1) {
        return setOp(cmd, text);
    }else if (cmd.equals("+/-")) {
        return setNegative(text);  //设置正负号
    }else if(cmd.equals("1/x")){
        return setReciprocal(text);
    }else if (cmd.equals("sqrt")) {
        return sqrt(text);
    }else if(cmd.equals("%")){
        return cal(text, true);
    }else if(cmd.equals("=")){
        return cal(text, false);
    }else {
        return mCmd(cmd, text);
    }
}

}

基于Idea2019的信计院树设计
3. 使用环境
Idea 2019,jdk1.8
4. 计算机界面开发
9. 创建计算机工程

10. 使用的包
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import javax.swing.;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.
;
11. 使用的swing组件
使用Jpanel的BorderLayout
12. 创建”java软件实战”工程

  1. 创建项目文件xinjishu,创建包xinjitree,创建class文件setup登录界面,创建gettxtfile通过io流实现数据的缓存,创建treetu实现树型界面设计。
    File->New->Project…

    2.首先写一个简单的界面包含一个按钮Button,JButton button = new JButton(“welcome setup computer science colleage system!”);在这里注意需要声明可视化setVisible为true
    如下图所示

实现对当前button的关闭和打开下一个box的步骤
使用dispose函数实现对当前button的关闭
创建一个close函数
public static void close() {
frame.dispose();}
在监听器中添加关闭界面功能以及打开下一个树界面功能

  1. 对文件的读取的设计
    import java.io.FileInputStream;
    import java.io.InputStreamReader;
    import java.io.BufferedReader;
    使用while循环实现对txt文件中每一行的读取。

  2. 树的设计
    使用到的类:addition
    实现功能:对键盘的结果的运算,将各种运算结果返回到text文本框内。
    如图所示:

  3. 代码段
    package xinjitree;
    import java.io.FileInputStream;
    import java.io.InputStreamReader;
    import java.io.BufferedReader;

public class gettxtfile{

public static String readFiles(String path) throws Exception {

  BufferedReader read = new BufferedReader(new InputStreamReader(new FileInputStream(path), "UTF-8"));

  StringBuffer s = new StringBuffer();
  
  String hang = read.readLine();
  
  while (hang != null) {
  
     s.append(hang);
  
     s.append("\n");
  
     hang = read.readLine();
  
  }
  
  read.close();
  
  return s.toString();

}

}

package xinjitree;

import javax.swing.;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.
;

public class treetu{
JFrame frame1 = new JFrame(“javatree”);
JTree shu;
DefaultMutableTreeNode root = new DefaultMutableTreeNode(“信息与计算机学院”);
DefaultMutableTreeNode node1 = new DefaultMutableTreeNode(“电子信息”);
DefaultMutableTreeNode node2 = new DefaultMutableTreeNode(“计算机工程”);
DefaultMutableTreeNode node3 = new DefaultMutableTreeNode(“网络工程”);
DefaultMutableTreeNode node4 = new DefaultMutableTreeNode(“通信工程”);
DefaultMutableTreeNode node5 = new DefaultMutableTreeNode(“18电子1班”);
DefaultMutableTreeNode node6 = new DefaultMutableTreeNode(“18电子2班”);
DefaultMutableTreeNode node7 = new DefaultMutableTreeNode(“18电子3班”);
DefaultMutableTreeNode node8 = new DefaultMutableTreeNode(“18计算机1班”);
DefaultMutableTreeNode node9 = new DefaultMutableTreeNode(“18计算机2班”);
DefaultMutableTreeNode node10 = new DefaultMutableTreeNode(“18计算机3班”);
DefaultMutableTreeNode node11 = new DefaultMutableTreeNode(“18网络1班”);
DefaultMutableTreeNode node12 = new DefaultMutableTreeNode(“18网络2班”);
DefaultMutableTreeNode node13 = new DefaultMutableTreeNode(“18通信1班”);
DefaultMutableTreeNode node14 = new DefaultMutableTreeNode(“18通信2班”);
JTextArea eventTxt = new JTextArea(5, 20);

public void addition() {
root.add(node1);
root.add(node2);
root.add(node3);
root.add(node4);
node1.add(node5);
node1.add(node6);
node1.add(node7);
node2.add(node8);
node2.add(node9);
node2.add(node10);
node3.add(node11);
node3.add(node12);
node4.add(node13);
node4.add(node14);
shu = new JTree(root);
TreeSelectionModel selectionModel = shu.getSelectionModel();
selectionModel.setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
eventTxt.setText("");
shu.addTreeSelectionListener(new TreeSelectionListener() {

     public void valueChanged(TreeSelectionEvent e) {

        DefaultMutableTreeNode panelpoint = (DefaultMutableTreeNode) shu.getLastSelectedPathComponent();

        switch (panelpoint.toString()) {

        case "18电子1班": {
           try {
              eventTxt.setText(gettxtfile.readFiles("D:\\txt\\18电子1班.txt"));
           } catch (Exception a) {
              a.printStackTrace();
           }
        }
           break;
        case "18电子2班": {
           try {
              eventTxt.setText(gettxtfile.readFiles("D:\\txt\\18电子2班.txt"));
           } catch (Exception a) {
              a.printStackTrace();
           }
        }
           break;
        case "18电子3班": {
           try {
              eventTxt.setText(gettxtfile.readFiles("D:\\txt\\18电子3班.txt"));
           } catch (Exception a) {
              a.printStackTrace();
           }
        }
           break;
        case "18计算机1班": {
           try {
              eventTxt.setText(gettxtfile.readFiles("D:\\txt\\18计算机1班.txt"));
           } catch (Exception a) {
              a.printStackTrace();
           }
        }
           break;
        case "18计算机2班": {
           try {
              eventTxt.setText(gettxtfile.readFiles("D:\\txt\\18计算机2班.txt"));
           } catch (Exception a) {
              a.printStackTrace();
           }
        }
           break;
        case "18计算机3班": {
           try {
              eventTxt.setText(gettxtfile.readFiles("D:\\txt\\18计算机3班.txt"));
           } catch (Exception a) {
              a.printStackTrace();
           }
        }
           break;
        case "18网络1班": {
           try {     
              eventTxt.setText(gettxtfile.readFiles("D:\\txt\\18网络1班.txt"));
           } catch (Exception a) {
              a.printStackTrace();
           }
        }
           break;
        case "18网络2班": {
           try {
              eventTxt.setText(gettxtfile.readFiles("D:\\txt\\18网络2班.txt"));
           } catch (Exception a) {
              a.printStackTrace();
           }
        }
           break;
        case "18通信1班": {
           try {
              eventTxt.setText(gettxtfile.readFiles("D:\\txt\\18通信1班.txt"));
           } catch (Exception a) {
              a.printStackTrace();
           }
        }
           break;
           case "18通信2班": {
              try {
                 eventTxt.setText(gettxtfile.readFiles("D:\\txt\\18通信2班.txt"));
              } catch (Exception a) {
                 a.printStackTrace();
              }
           }
           break;
        }
     }
  });
  Box box = Box.createHorizontalBox();
  box.add(new JScrollPane(shu));
  box.add(new JScrollPane(eventTxt));
  frame1.add(box);
  frame1.pack();
  frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame1.setVisible(true);

}
}

package xinjitree;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;

class setup {
static JFrame frame = new JFrame();

public static void main(String[] args) {
frame.setSize(600, 600);
JButton button = new JButton(“welcome setup computer science colleage system!”);
frame.add(button);
frame.setVisible(true);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
close();//关闭button
new treetu().addition();//开始打开下一个树界面
}
});
}

public static void close() {
frame.dispose();
}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值