Java学习之路-Thread-银行存取款

利用线程,完成银行存取款的简单操作。
BankUI.java

package cn.antraces.GUI;

import cn.antraces.GUI.Thread.Bank;
import cn.antraces.GUI.Thread.BankThread;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

public class BankUI {
    public JFrame jf;
    public JPanel jp;
    public JTextField jTextField1, jTextField2;
    public JPasswordField jPasswordField;
    public JLabel jLabel1, jLabel2, jLabel3, jLabel4, jLabel5;
    public JButton post, reset;
    private Bank bank = new Bank();

    public BankUI(){
        jf = new JFrame("香草银行");
        jf.setSize(400, 200);
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        jf.setLocationRelativeTo(null);
        jf.setResizable(false);

        jp = new JPanel(null);

        jLabel1 = new JLabel();
        jLabel1.setText("账号: ");
        jLabel1.setFont(new Font(null, Font.PLAIN, 18));
        jLabel1.setBounds(75, 5, 100,20);

        jLabel2 =new JLabel();
        jLabel2.setText("密码: ");
        jLabel2.setFont(new Font(null, Font.PLAIN, 18));
        jLabel2.setBounds(75, 30, 100,20);

        jLabel3 = new JLabel();
        jLabel3.setText("请输入密码");
        jLabel3.setFont(new Font(null, Font.PLAIN, 18));
        jLabel3.setBounds(120, 50, 160, 40 );

        jLabel4 = new JLabel();
        jLabel4.setText("余额: 0 香草");
        jLabel4.setFont(new Font(null, Font.PLAIN, 18));
        jLabel4.setBounds(60, 80, 290, 40 );
        jLabel4.setVisible(false);

        jLabel5 = new JLabel();
        jLabel5.setText("");
        jLabel5.setFont(new Font(null, Font.PLAIN, 18));
        jLabel5.setBounds(60, 110, 290, 40 );
        jLabel5.setVisible(false);

        jTextField1 = new JTextField(16);
        jTextField1.setFont(new Font(null, Font.PLAIN, 18));
        jTextField1.setBounds(125, 5, 180, 20);

        jTextField2 = new JTextField(16);
        jTextField2.setFont(new Font(null, Font.PLAIN, 18));
        jTextField2.setBounds(125, 30, 180, 20);
        jTextField2.setVisible(false);
        jTextField2.addKeyListener(new KeyAdapter() {
            public void keyTyped(KeyEvent e) {  //设置只允许整型数字
                char keyChar = e.getKeyChar();
                if(!(keyChar >= '0' && keyChar <= '9')){
                    e.consume();
                }
            }
        });

        jPasswordField = new JPasswordField(16);
        jPasswordField.setFont(new Font(null, Font.PLAIN, 18));
        jPasswordField.setBounds(125, 30, 180, 20);

        post = new JButton("登陆");
        post.setBounds(60, 60, 60, 25);
        post.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                if (actionEvent.getActionCommand().equals("登陆")) {
                    String account = new String(jTextField1.getText());
                    String psw = new String(jPasswordField.getPassword());
                    if (account.equals("silver") && psw.equals("moon")) {
                        jLabel3.setText("已登陆(。・ω・。)ノ♡");
                        jPasswordField.setVisible(false);
                        jTextField2.setVisible(true);
                        jTextField1.setEditable(false);
                        jLabel2.setText("数量: ");
                        post.setText("存款");
                        reset.setText("取款");
                        jLabel4.setVisible(true);
                        jLabel5.setVisible(true);
                    } else {
                        jLabel3.setText("账号或密码错误");
                    }
                } else if (actionEvent.getActionCommand().equals("存款")) {
                    Thread thread1 = new BankThread(bank, Integer.parseInt(jTextField2.getText()),
                    1, jLabel5, jLabel4);
                    thread1.start();
                }
            }
        });

        reset = new JButton("重置");
        reset.setBounds(260, 60, 60, 25);
        reset.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                if (actionEvent.getActionCommand().equals("重置")) {
                    jTextField1.setText("");
                    jPasswordField.setText("");
                } else if (actionEvent.getActionCommand().equals("取款")) {
                    Thread thread1 = new BankThread(bank, Integer.parseInt(jTextField2.getText()),
                    -1, jLabel5, jLabel4);
                    thread1.start();
                }
            }
        });

        jp.add(jLabel1);
        jp.add(jTextField1);
        jp.add(jTextField2);
        jp.add(jLabel2);
        jp.add(jPasswordField);
        jp.add(post);
        jp.add(reset);
        jp.add(jLabel3);
        jp.add(jLabel4);
        jp.add(jLabel5);

        jf.setContentPane(jp);
        jf.setVisible(true);
    }

    public static void main (String[] args){
        new BankUI();
    }
}

Thread/Bank.java

package cn.antraces.GUI.Thread;

public class Bank {

    private int money;

    public String deposit(int num){
        this.money = this.money + num;
        return "成功存入 " + num + " 香草";
    }

     public String withdraw(int num){
        if(this.money > 0 && num > 0 && this.money - num >= 0){
            this.money = this.money - num;
            return "成功取出 " + num + " 香草";
        }else{
            return "余额不足 " + num + " 香草";
        }
     }

     public int balance(){
        return this.money;
     }

}

Thread/BankThread.java

package cn.antraces.GUI.Thread;

import javax.swing.*;

public class BankThread extends Thread {

    private Bank myBank;
    private int num, mode;
    private JLabel jLabel1, jLabel2;

    public BankThread(Bank bank, int num, int mode, JLabel jLabel1, JLabel jLabel2) {
        this.myBank = bank;
        this.num = num;
        this.mode = mode;
        this.jLabel1 = jLabel1;
        this.jLabel2 = jLabel2;
    }

    @Override
    public void run() {
        synchronized (myBank){
            if (mode == 1) {
                jLabel1.setText(myBank.deposit(this.num));
            } else if (mode == -1) {
                jLabel1.setText(myBank.withdraw(this.num));
            }
            jLabel2.setText("余额: " + myBank.balance() + " 香草");
        }
        try {
            this.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
早知道就不写这UI了, 麻烦还丑
点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注