四则运算升级

之前写的四则运算中,存在以下问题:

(1)、每个组件的位置是提前设置好的,并且采用的是空布局,导致一次只能看到一条式子。

(2)、没有安全性。

因此,从以下方面进行升级:

(1)、界面布局修改升级。

(2)、增加登录功能

首先,给出PSP2下的标准步骤流程:

.PSP表格:

    预计耗时(分钟) 实际耗时(分钟)
Planning 计划 30 30
Estimate 估计这个任务需要多少时间 5 5
Development 开发 90 90
Analysis 需求分析 10 10
Design Spec 生成设计文档 0 0
Design Review 设计复审(和同事审核设计文档) 0 0
Coding Standerd 代码规范(为目前的开发制定合适的规范) 5 5
Design 具体设计 20 30
Coding 具体编码 90 90
Code Review 代码复审 10 10
Text 测试(自测,修改代码,提交修改) 20 20
Reporting 报告 10 10
Text Report 测试报告 10 10
Size Measurement 计算工作量 5 5
Postmortem & Process Improvement Plan 事后总结,并提出过程改进计划 20 20
Sum 合计 325 335

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

以下是界面升级后的代码:

text1_1.java

复制代码
import javax.swing.*;

import java.awt.*;
import java.awt.event.*;

//设置界面框架
public class text1_1 {
    public static void main(String[] args) {
        Win win = new Win();
        win.setTitle("四则运算");
        win.setBounds(0,0,500,200);
    }
}

//设置界面
class Win extends JFrame{
    Win(){
        //setLayout(null);//空布局
        setLayout(new FlowLayout(FlowLayout.CENTER));//流体布局
        Container con = getContentPane();//设置底层容器
        con.setBackground(Color.blue);
        init();
        setBounds(10,10,460,360);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    void init(){
        JButton button1 = new JButton("加法题目");
        JTextArea textshow1 = new JTextArea();
        JButton button2 = new JButton("减法题目");
        JTextArea textshow2 = new JTextArea();
        JButton button3 = new JButton("乘法题目");
        JTextArea textshow3 = new JTextArea();
        JButton button4 = new JButton("除法题目");
        JTextArea textshow4 = new JTextArea();
        JButton button6 = new JButton("重置");
        textshow1.setFont(new Font("楷体",Font.BOLD,20));//修改字体样式
        textshow2.setFont(new Font("楷体",Font.BOLD,20));
        textshow3.setFont(new Font("楷体",Font.BOLD,20));
        textshow4.setFont(new Font("楷体",Font.BOLD,20));
        Listen listen = new Listen();
        listen.setJTextArea1(textshow1);
        listen.setJTextArea2(textshow2);
        listen.setJTextArea3(textshow3);
        listen.setJTextArea4(textshow4);
        button1.addActionListener(listen);
        button2.addActionListener(listen);
        button3.addActionListener(listen);
        button4.addActionListener(listen);
        button6.addActionListener(listen);
        button1.setBounds(10,10,100,25);
        textshow1.setBounds(110,10,200,25);
        button2.setBounds(10,40,100,25);
        textshow2.setBounds(110,40,200,25);
        button3.setBounds(10,70,100,25);
        textshow3.setBounds(110,70,200,25);
        button4.setBounds(10,100,100,25);
        textshow4.setBounds(110,100,200,25);
        button6.setBounds(350,50,100,25);
        add(button1);
        add(textshow1);
        add(button2);
        add(textshow2);
        add(button3);
        add(textshow3);
        add(button4);
        add(textshow4);
        add(button6);
    }
}

//设置监视器
class Listen implements ActionListener{
    JTextArea textshow1;
    JTextArea textshow2;
    JTextArea textshow3;
    JTextArea textshow4;
    int numberOne;
    int numberTwo;
    public void setJTextArea1(JTextArea textshow1) 
    {
        this.textshow1 = textshow1;
    }
    public void setJTextArea2(JTextArea textshow2) 
    {
        this.textshow2 = textshow2;
    }
    public void setJTextArea3(JTextArea textshow3) 
    {
        this.textshow3 = textshow3;
    }
    public void setJTextArea4(JTextArea textshow4) 
    {
        this.textshow4 = textshow4;
    }
    public void setnumberOne(int numberOne)
    {
        this.numberOne = numberOne;
    }
    public void setnumberTwo(int numberTwo)
    {
        this.numberTwo = numberTwo;
    }
    
    public void actionPerformed(ActionEvent e) {
        String str = e.getActionCommand();
        if(str.equals("加法题目"))
        {
            numberOne = (int)(Math.random()*100);
            numberTwo = (int)(Math.random()*100);
            setnumberOne(numberOne);
            setnumberTwo(numberTwo);
            int sum1 = numberOne + numberTwo;
            textshow1.append(numberOne+"+"+numberTwo+"="+sum1+"\r\n");
        }
        if(str.equals("减法题目"))
        {
            numberOne = (int)(Math.random()*100);
            numberTwo = (int)(Math.random()*100);
            setnumberOne(numberOne);
            setnumberTwo(numberTwo);
            int sum2 = numberOne - numberTwo;
            textshow2.append(numberOne+"-"+numberTwo+"="+sum2+"\r\n");
        }
        if(str.equals("乘法题目"))
        {
            numberOne = (int)(Math.random()*100);
            numberTwo = (int)(Math.random()*100);
            setnumberOne(numberOne);
            setnumberTwo(numberTwo);
            int sum3 = numberOne * numberTwo;
            textshow3.append(numberOne+"*"+numberTwo+"="+sum3+"\r\n");
        }
        if(str.equals("除法题目"))
        {
            numberOne = (int)(Math.random()*100);
            numberTwo = (int)(Math.random()*100);
            setnumberOne(numberOne);
            setnumberTwo(numberTwo);
            float sum4 =(float) numberOne / numberTwo;
            textshow4.append(numberOne+"/"+numberTwo+"="+sum4+"\r\n");
        }
          if(str.equals("重置")){
             textshow1.setText("");
             textshow2.setText("");
             textshow3.setText("");
             textshow4.setText("");
          }
    }
}
复制代码

界面Login.java

复制代码
import java.awt.Dimension;  //封装了一个构件的高度和宽度
import java.awt.FlowLayout;
import java.awt.Font;
 
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JPasswordField;
import javax.swing.JButton;
 
public class Login {
 
    //在类中定义主函数
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //在主函数中,实例化Login类的对象,调用初始化界面的方法
        Login login = new Login();
        login.initUI();
 
    }
    
    //在类中定义初始化界面的方法
    public void initUI() {
        //在initUI中实例化JFrame类的对象
        JFrame frame = new JFrame();
        //设置窗体对象的属性值
        frame.setTitle("Login");//设置窗体标题
        frame.setSize(400, 250);//设置窗体大小,只对顶层容器生效
        frame.setDefaultCloseOperation(3);//设置窗体关闭操作,3表示关闭窗体退出程序
        frame.setLocationRelativeTo(null);//设置窗体相对于另一组间的居中位置,参数null表示窗体相对于屏幕的中央位置
        frame.setResizable(false);//禁止调整窗体大小
        frame.setFont(new Font("宋体",Font.PLAIN,14));//设置字体,显示格式正常,大小
        
        //实例化FlowLayout流式布局类的对象,指定对齐方式为居中对齐组件之间的间隔为10个像素
        FlowLayout fl = new FlowLayout(FlowLayout.CENTER,10,10);
        //实例化流式布局类的对象
        frame.setLayout(fl);
        
        //实例化JLabel标签对象,该对象显示“账号”
        JLabel labname = new JLabel("账号:");
        labname.setFont(new Font("宋体",Font.PLAIN,14));
        //将labname标签添加到窗体上
        frame.add(labname);
        
        //实例化JTextField标签对象化
        JTextField text_name = new JTextField();
        Dimension dim1 = new Dimension(300,30);
        text_name.setPreferredSize(dim1);//设置除顶级容器组件以外其他组件的大小
        //将textName标签添加到窗体上
        frame.add(text_name);
        
        //实例化JLabel标签对象,该对象显示“密码”
        JLabel labpass = new JLabel("密码:");
        labpass.setFont(new Font("宋体",Font.PLAIN,14));
        //将labpass添加到窗体上
        frame.add(labpass);
        
        //实例化JPasswordField
        JPasswordField text_password = new JPasswordField();
        //设置大小
        text_password.setPreferredSize(dim1);
        //添加到窗体
        frame.add(text_password);
        
        //实例化JButton组件
        JButton button1 = new JButton();
        //设置按键的显示内容
        Dimension dim2 = new Dimension(100,30);
        button1.setText("登录");
        button1.setFont(new Font("宋体",Font.PLAIN,14));
        //设置按键大小
        button1.setSize(dim2);
        frame.add(button1);
        
        frame.setVisible(true);//窗体可见,一定要放在所有组件加入窗体后
        
        LoginListener ll = new LoginListener(frame,text_name,text_password);
        button1.addActionListener(ll);
    }
}
复制代码

 

监视器LoginListener.java

复制代码
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.Font;
 
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
 
public class LoginListener implements ActionListener{
    private javax.swing.JTextField text_name;
    private javax.swing.JPasswordField text_password;
    private javax.swing.JFrame login;
    
    public LoginListener(javax.swing.JFrame login,javax.swing.JTextField text_name,javax.swing.JPasswordField text_password)
    {//获取登录界面、账号密码输入框对象
        this.login=login;
        this.text_name=text_name;
        this.text_password=text_password;
    }
    
    int i=3;//3次登录机会
    
    public void actionPerformed(ActionEvent e)
    {
        Dimension dim2 = new Dimension(100,30);
        Dimension dim3 = new Dimension(300,30);
        
        //生成新界面
        javax.swing.JFrame login2 = new javax.swing.JFrame();
        login2.setSize(400,200);
        login2.setDefaultCloseOperation(3);
        login2.setLocationRelativeTo(null);
        login2.setFont(new Font("宋体",Font.PLAIN,14));  //宋体,正常风格,14号字体
        //创建组件
        javax.swing.JPanel jp1 = new JPanel();
        javax.swing.JPanel jp2 = new JPanel();
 
            if(text_name.getText().equals("ya") && text_password.getText().equals("123456"))
            {    
                login2.setResizable(false);
                new Win();
                login.dispose();
            }
            
            else if(i>=2)
            {
                JLabel message = new JLabel("账号或密码错误,您今天还有"+(i-1)+"次机会");
                message.setFont(new Font("宋体",Font.PLAIN,14));  //宋体,正常风格,14号字体
                message.setPreferredSize(dim3);
                //将textName标签添加到窗体上
                jp1.add(message);
                login2.add(jp1,BorderLayout.CENTER);
                
                JButton close = new JButton("确定");
                close.setFont(new Font("宋体",Font.PLAIN,14));
                //设置按键大小
                close.setSize(dim3);
                jp2.add(close);
                login2.add(jp2,BorderLayout.SOUTH);
                
                i--;//次数减少
                close.addActionListener(new ActionListener()
                {
                    public void actionPerformed(ActionEvent e)
                    {
                        login2.dispose();
                    }
                });
                
                login2.setResizable(false);
                login2.setVisible(true);
            }
            
            else if(i == 1)
            {
                JLabel message = new JLabel("账号已锁定,请明天再试");
                message.setFont(new Font("宋体",Font.PLAIN,14));  //宋体,正常风格,14号字体
                message.setPreferredSize(dim3);
                //将textName标签添加到窗体上
                jp1.add(message);
                login2.add(jp1,BorderLayout.CENTER);
                
                JButton close = new JButton("确定");
                close.setFont(new Font("宋体",Font.PLAIN,14));
                //设置按键大小
                close.setSize(dim3);
                jp2.add(close);
                login2.add(jp2,BorderLayout.SOUTH);
                
                close.addActionListener(new ActionListener()
                {
                    public void actionPerformed(ActionEvent e)
                    {
                        login2.dispose();
                    }
                });
                
                login2.setResizable(false);
                login2.setVisible(true);
                
                //通过我们获取的登录界面对象,用dispose方法关闭它
                login.dispose();
            }
    }

    private void setVisible(boolean b) {
        // TODO Auto-generated method stub
        
    }
}
复制代码

 

 

 

 

 

posted @   邓雅灵  阅读(44)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示