快速入门三层架构(学习案例)

^首先我们先来看实现的效果图

代码如下

package swming.homework_314.frame;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class LoginFrame {

    JTextField textField;
    JTextField passwordField;
    JButton button;

    public void launchFrame() {
        JFrame frame = new JFrame();

        frame.setLocationRelativeTo(null);
        frame.setLayout(null);
        frame.setSize(600, 300);

        addWidget2Frame(frame);

        frame.setVisible(true);
    }
    void addWidget2Frame(JFrame frame) {
        JLabel usernameLabel = new JLabel("用户名:");
        usernameLabel.setBounds(200, 60, 50, 20);
         textField = new JTextField();
        textField.setBounds(270, 60, 100, 20);

        JLabel passwordLabel = new JLabel("密码:");
        passwordLabel.setBounds(200, 90, 50, 20);
         passwordField = new JTextField();
        passwordField.setBounds(270, 90, 100, 20);

         button = new JButton("登录");
        button.setBounds(280, 130, 60, 30);

        frame.add(usernameLabel);
        frame.add(textField);
        frame.add(passwordLabel);
        frame.add(passwordField);
        frame.add(button);
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                logRight(frame);
            }
        });
    }

    void logRight(Frame frame) {

        String username = textField.getText();
        String password = passwordField.getText();
        if (username.equals("admin") && password.equals("admin")) {
            MainFrame mainFrame = new MainFrame();
            mainFrame.launchFrame();
            frame.dispose(); // 关闭当前登录窗口
        }
    }
}

点击确认后跳转到业务面

代码:

package swming.homework_314.frame;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class MainFrame {

    double balance = 1000;
    JLabel tableBalance;
    JTextField tableDolor;
    JRadioButton getMoney, saveMoney;


    public void launchFrame() {
        JFrame frame = new JFrame();
        frame.setLocationRelativeTo(null);
        frame.setLayout(null);
        frame.setSize(600, 300);

        addWidget2Frame(frame);

        frame.setVisible(true);
    }

    void addWidget2Frame(JFrame frame){
        tableBalance = new JLabel("你的余额为:"+balance);
        tableBalance.setBounds(170, 10, 200, 20);

        JLabel tableMoney = new JLabel("金额:");
        tableMoney.setBounds(100, 60, 100, 20);
        tableDolor = new JTextField();
        tableDolor.setBounds(150, 60, 100, 20);

        getMoney = new JRadioButton("取");
        getMoney.setBounds(100, 100, 100, 20);
        saveMoney = new JRadioButton("存");
        saveMoney.setBounds(200, 100, 100, 20);

        // 单选项
        ButtonGroup group = new ButtonGroup();
        group.add(getMoney);
        group.add(saveMoney);

        /**
         * 添加事件监听
         * 确定按钮
         */
        JButton button = new JButton("确定");
        button.setBounds(170, 130, 60, 20);
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                getAndSetMoney(frame);
            }
        });


        JButton viewBalance = new JButton("查看余额");
        viewBalance.setBounds(240, 130, 100, 20);
        viewBalance.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(frame,"你的余额是:"+balance);
            }
        });
        frame.add(tableBalance);

        frame.add(tableBalance);
        frame.add(tableMoney);
        frame.add(tableDolor);
        frame.add(getMoney);
        frame.add(saveMoney);
        frame.add(button);
        frame.add(viewBalance);
    }

    /**
     * 存取款操作
     */
    void getAndSetMoney(Frame frame){
        double money = Double.parseDouble(tableDolor.getText());

        if(getMoney.isSelected()){
            if (money > balance){
                JOptionPane.showConfirmDialog(frame,"余额不足");
                return;
            }
            balance -= money; //取款
        } else if (saveMoney.isSelected()) {
            balance += money; //存钱
        }
        tableBalance.setText("你的余额为:"+balance);
//        tableDolor.setText("");
    }
}

 一次操作后

那么我们应该如何转变为三层架构呢?

首先应该整理思路,需要有哪些包和类,比如这就是我的包和类名。

 

首先写一个实体类

package zy.pojo;

public class Account {
    public String id; //账号
    public String pwd; //密码
    public double balance;

    public Account(String id, String pwd, double balance) {
        this.id=id;
        this.pwd=pwd;
        this.balance=balance;
    }
}

这里我们先创一个test类,用于进行登录界面

package zy.test;
import zy.ui.frame.loginFrame;

public class testFrame {
    public static void main(String[] args) {
        loginFrame loginFrame = new loginFrame();
        loginFrame.launchFrame();
    }
}

然后再把登录界面给搭起来

package zy.ui.frame;

import zy.pojo.Account;
import zy.service.AccountService;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class loginFrame {
    public void launchFrame() {
        JFrame frame = new JFrame();
        frame.setLayout(null);
        frame.setSize(600, 300);
        frame.setLocationRelativeTo(null);

        addWidget2Frame(frame);

        frame.setVisible(true);
    }
    void addWidget2Frame(JFrame frame) {
        JLabel username = new JLabel("用户名:");
        username.setBounds(200, 60, 50, 20);
        JTextField usernameField = new JTextField();
        usernameField.setBounds(270, 60, 100, 20);

        JLabel password = new JLabel("密码:");
        password.setBounds(200, 90, 50, 20);
        JTextField passwordField = new JTextField();
        passwordField.setBounds(270, 90, 100, 20);

        JButton button = new JButton("登录");
        button.setBounds(280, 130, 60, 30);
        

        frame.add(username);
        frame.add(usernameField);
        frame.add(password);
        frame.add(passwordField);
        frame.add(button);

    }
}

运行界面 

package zy.ui.frame;

import zy.pojo.Account;
import zy.service.AccountService;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class mainFrame {
    public static void main(String[] args) {
        mainFrame frame = new mainFrame();
//        frame.launchFrame();
    }

    public  Account account;
    public void launchFrame(Account account) {
        this.account = account;
        JFrame frame = new JFrame();

        frame.setLayout(null);
        frame.setSize(600, 300);
        frame.setLocationRelativeTo(null);
        addWidget2Frame(frame);

        frame.setVisible(true);
    }

    void addWidget2Frame(JFrame frame){
        JLabel balanceLabel = new JLabel("你的余额为:"+this.account.balance);
        balanceLabel.setBounds(170, 10, 200, 20);

        JLabel moneyLabel = new JLabel("金额:");
        moneyLabel.setBounds(100, 60, 100, 20);
        JTextField moneyField = new JTextField();
        moneyField.setBounds(150, 60, 100, 20);

        JRadioButton getMoney = new JRadioButton("取");
        getMoney.setBounds(100, 100, 100, 20);
        JRadioButton saveMoney = new JRadioButton("存");
        saveMoney.setBounds(200, 100, 100, 20);
        saveMoney.setSelected(true);
        // 单选项
        ButtonGroup group = new ButtonGroup();
        group.add(getMoney);
        group.add(saveMoney);

        JButton button = new JButton("确定");
        button.setBounds(170, 130, 60, 20);
              
        frame.add(balanceLabel);
        frame.add(moneyLabel);
        frame.add(moneyField);
        frame.add(getMoney);
        frame.add(saveMoney);
        frame.add(button);
        frame.add(viewBalance);

    }
}

 因为还没有学到数据库,所以自己定义一个数组来存放数据

package zy.store;

import zy.pojo.Account;

public class AccountScore {
    public static Account[] accounts = new Account[10];

    static {
        for (int i = 0; i < accounts.length; i++) {
            Account account = new Account("root"+i,"123",1000+i);
            accounts[i] = account;
        }
    }
}

然后再到dao层去拿到score的数据

package zy.dao;

import zy.pojo.Account;
import zy.store.AccountScore;

public class AccountDao {
    /**
     * 根据id拿到对应的账户
     * @param id
     * @return
     */
    public Account selectById(String id){
        Account[] accounts = AccountScore.accounts;
        for (Account account : accounts) {
            if (account.id.equals(id)) {
                return account;
            }
        }
        return null;
    }
}

然后到service层中完成具体的实现方法

package zy.service;

import zy.dao.AccountDao;
import zy.pojo.Account;

public class AccountService {

    public Account loginRight(String id, String password) {
        AccountDao accountDao = new AccountDao();
        Account account = accountDao.selectById(id);
        if (account != null && password.equals(account.pwd)) {
            return account;
        }
        return null;
    }

    public void saveMoney(Account account,double money) {
        account.balance +=money;
    }

    public void getMoney(Account account,double money) {
        account.balance -=money;
    }

}

然后再回到最开始的登录界面添加方法即之前没添加的事件监听方法实现点击事件(类似html)

package zy.ui.frame;

import zy.pojo.Account;
import zy.service.AccountService;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class loginFrame {
    public void launchFrame() {
        JFrame frame = new JFrame();
        frame.setLayout(null);
        frame.setSize(600, 300);
        frame.setLocationRelativeTo(null);

        addWidget2Frame(frame);

        frame.setVisible(true);
    }
    void addWidget2Frame(JFrame frame) {
        JLabel username = new JLabel("用户名:");
        username.setBounds(200, 60, 50, 20);
        JTextField usernameField = new JTextField();
        usernameField.setBounds(270, 60, 100, 20);

        JLabel password = new JLabel("密码:");
        password.setBounds(200, 90, 50, 20);
        JTextField passwordField = new JTextField();
        passwordField.setBounds(270, 90, 100, 20);

        JButton button = new JButton("登录");
        button.setBounds(280, 130, 60, 30);
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String passwords = passwordField.getText();
                String usernames = usernameField.getText();

                AccountService accountService = new AccountService();
                Account account = accountService.loginRight(usernames, passwords);
                if (account != null) {
                    new mainFrame().launchFrame(account);
                }else {
                    JOptionPane.showMessageDialog(null,"账户或密码错误");
                }
            }
        });

        frame.add(username);
        frame.add(usernameField);
        frame.add(password);
        frame.add(passwordField);
        frame.add(button);

    }
}

然后就是主方法这里也是一样的操作

package zy.ui.frame;

import zy.pojo.Account;
import zy.service.AccountService;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class mainFrame {
    public static void main(String[] args) {
        mainFrame frame = new mainFrame();
//        frame.launchFrame();
    }

    public  Account account;
    public void launchFrame(Account account) {
        this.account = account;
        JFrame frame = new JFrame();

        frame.setLayout(null);
        frame.setSize(600, 300);
        frame.setLocationRelativeTo(null);
        addWidget2Frame(frame);

        frame.setVisible(true);
    }

    void addWidget2Frame(JFrame frame){
        JLabel balanceLabel = new JLabel("你的余额为:"+this.account.balance);
        balanceLabel.setBounds(170, 10, 200, 20);

        JLabel moneyLabel = new JLabel("金额:");
        moneyLabel.setBounds(100, 60, 100, 20);
        JTextField moneyField = new JTextField();
        moneyField.setBounds(150, 60, 100, 20);

        JRadioButton getMoney = new JRadioButton("取");
        getMoney.setBounds(100, 100, 100, 20);
        JRadioButton saveMoney = new JRadioButton("存");
        saveMoney.setBounds(200, 100, 100, 20);
        saveMoney.setSelected(true);
        // 单选项
        ButtonGroup group = new ButtonGroup();
        group.add(getMoney);
        group.add(saveMoney);


        JButton button = new JButton("确定");
        button.setBounds(170, 130, 60, 20);
        button.addActionListener(new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String money = moneyField.getText();
                AccountService accountService = new AccountService();
                if(saveMoney.isSelected()){
                    accountService.saveMoney(account, Double.parseDouble(money));
                }else {
                    accountService.getMoney(account, Double.parseDouble(money));
                }
                balanceLabel.setText("你的余额为:"+ account.balance);
            }
        });


        JButton viewBalance = new JButton("查看余额");
        viewBalance.setBounds(240, 130, 100, 20);
        viewBalance.addActionListener(new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {

            }
        });

        frame.add(balanceLabel);
        frame.add(moneyLabel);
        frame.add(moneyField);
        frame.add(getMoney);
        frame.add(saveMoney);
        frame.add(button);
        frame.add(viewBalance);

    }
}

那么到这里就算完成了

接触三层架构当天就练习了这个项目(修改成三层架构) 难度还是有点太大,今天继续练,后续继续更新,痛,太痛了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值