import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import atm.Card;
//测试类
public class Exec {
public static void main(String[] args) {
// 创建窗体类变量
DemoWindow dw = new DemoWindow();
// 设置窗体为最大化显示方式
Toolkit theKit = dw.getToolkit();
Dimension wndSize = theKit.getScreenSize();
dw.setBounds(0, 0, wndSize.width, wndSize.height);
// 点击关闭按钮可以退出程序
dw.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 设置窗体为可见
dw.setVisible(true);
}
}
// ATM机窗体
class DemoWindow extends JFrame {
// 显示不同步骤界面的主面板
JPanel jp = new JPanel();
// 卡片布局管理器
CardLayout cl = new CardLayout();
// 欢迎主界面面板
MainPanel mp = new MainPanel(this);
// 选择银行卡类型的面板
TypeChoosingPanel tcp = new TypeChoosingPanel(this);
// 输入密码的面板
PasswordPanel pp = new PasswordPanel(this);
// 选择操作内容的面板
OperationPanel op = new OperationPanel(this);
// 取款面板
WithDrawingPanel wp = new WithDrawingPanel(this);
// 存款面板
DepositPanel dp = new DepositPanel(this);
// 查询余额的面板
QueryPanel qp = new QueryPanel(this);
// 当前银行卡的类变量
private Card card;
// 构造函数
public DemoWindow() {
// 窗体布局,采用卡片布局管理器,在同一个窗体上显示各个不同步骤的界面面板
jp.setLayout(cl);
jp.add("1", mp);
jp.add("2", tcp);
jp.add("3", pp);
jp.add("4", op);
jp.add("4", wp);
jp.add("5", dp);
jp.add("6", qp);
add(jp);
}
// 显示下一步骤的界面面板
public void nextStep() {
cl.next(jp);
}
// 显示第一步骤的界面面板
public void firstStep() {
cl.first(jp);
}
// 显示上一步骤的界面面板
public void previousStep() {
cl.previous(jp);
}
// 当前银行卡类变量的读取函数
public Card getCard() {
return card;
}
// 当前银行卡类变量的设置函数
public void setCard(Card card) {
this.card = card;
}
}
// 欢迎主界面的面板类
class MainPanel extends JPanel implements ActionListener {
// 标题
ImageLabel jl = new ImageLabel("欢迎使用ATM!");
// 输入卡号的文本框
ImageTextField jtf = new ImageTextField(20);
// 布局面板
ImagePanel jp1 = new ImagePanel();
ImagePanel jp2 = new ImagePanel();
ImagePanel jp3 = new ImagePanel();
ImagePanel jp4 = new ImagePanel();
ImagePanel jp5 = new ImagePanel();
// ATM机窗体的引用
DemoWindow dw;
// 构造函数
public MainPanel(DemoWindow dw) {
// 设置ATM机窗体的引用
this.dw = dw;
// 面板布局
setLayout(new GridLayout(5, 1));
jl.setForeground(Color.yellow);
jp2.add(jl);
jp4.add(jtf);
add(jp1);
add(jp2);
add(jp3);
add(jp4);
add(jp5);
// 添加事件监听器
jtf.addActionListener(this);
}
// 响应文本框输入完毕
public void actionPerformed(ActionEvent e) {
// 获取具有对应卡号的银行卡类变量
Card card = Card.getCardByCardID(jtf.getText());
// 如果存在该银行卡
if (card != null) {
// 设置当前银行卡的类变量,以供下面步骤使用
dw.setCard(card);
// 显示下一步骤界面
dw.nextStep();
}
// 如果不存在该银行卡
else {
// 显示错误信息,并允许重新输入
JOptionPane.showMessageDialog(this, "请输入正确的卡号!");
jtf.setText("");
}
}
// 重写的绘图方法,在每次重绘界面时,都自动清空文本框的内容,并设置文本框得到输入焦点
protected void paintComponent(Graphics g) {
super.paintComponent(g);
jtf.setText("");
jtf.requestFocus();
}
}
// 选择银行卡类型的面板类
class TypeChoosingPanel extends JPanel implements ActionListener {
// 标题
ImageLabel jl = new ImageLabel("请选择银行卡类型!");
// 操作按钮
ImageButton jb1 = new ImageButton("借记卡");
ImageButton jb2 = new ImageButton("信用卡");
ImageButton jb3 = new ImageButton("退出");
// 布局面板
ImagePanel jp1 = new ImagePanel();
ImagePanel jp2 = new ImagePanel();
ImagePanel jp3 = new ImagePanel();
ImagePanel jp4 = new ImagePanel();
ImagePanel jp5 = new ImagePanel();
ImagePanel jp31 = new ImagePanel();
ImagePanel jp32 = new ImagePanel();
ImagePanel jp33 = new ImagePanel();
ImagePanel jp41 = new ImagePanel();
ImagePanel jp42 = new ImagePanel();
ImagePanel jp43 = new ImagePanel();
ImagePanel jp44 = new ImagePanel();
// ATM机窗体的引用
DemoWindow dw;
// 构造函数
public TypeChoosingPanel(DemoWindow dw) {
// 设置ATM机窗体的引用
this.dw = dw;
// 面板布局
setLayout(new BorderLayout());
// 添加标题
jl.setForeground(Color.yellow);
jp2.add(jl);
// 添加左面的操作按钮
jp3.setLayout(new GridLayout(5, 1));
jp3.add(jp31);
jp3.add(jb1);
jp3.add(jp32);
jp3.add(jb2);
jp3.add(jp33);
jp3.setPreferredSize(new Dimension(200, 100));
// 添加右面的操作按钮
jp4.setLayout(new GridLayout(5, 1));
jp4.add(jp41);
jp4.add(jb3);
jp4.add(jp42);
jp4.add(jp43);
jp4.add(jp44);
jp4.setPreferredSize(new Dimension(200, 100));
add(jp1, BorderLayout.NORTH);
add(jp2, BorderLayout.CENTER);
add(jp3, BorderLayout.WEST);
add(jp4, BorderLayout.EAST);
add(jp5, BorderLayout.SOUTH);
// 添加事件监听器
jb1.addActionListener(this);
jb2.addActionListener(this);
jb3.addActionListener(this);
}
// 响应单击按钮
public void actionPerformed(ActionEvent e) {
// 处理选择借记卡
if (e.getSource() == jb1) {
// 如果当前银行卡是借记卡,显示下一步骤界面
if (dw.getCard().checkType(Card.CardType.借记卡))
dw.nextStep();
// 如果不是,显示错误信息,并回到欢迎主界面面板
else {
JOptionPane.showMessageDialog(this, "银行卡类型不正确!\n请重新输入卡号!");
dw.setCard(null);
dw.firstStep();
}
}
// 处理选择信用卡
else if (e.getSource() == jb2) {
// 如果当前银行卡是信用卡,显示下一步骤界面
if (dw.getCard().checkType(Card.CardType.信用卡))
dw.nextStep();
// 如果不是,显示错误信息,并回到欢迎主界面面板
else {
JOptionPane.showMessageDialog(this, "银行卡类型不正确!\n请重新输入卡号!");
dw.setCard(null);
dw.firstStep();
}
}
// 处理退出操作
else if (e.getSource() == jb3) {
// 释放当前银行卡类变量,回到欢迎主界面面板
dw.setCard(null);
dw.firstStep();
}
}
}
// 输入密码的面板类
class PasswordPanel extends JPanel implements ActionListener {
// 标题
ImageLabel jl = new ImageLabel("请输入密码!");
// 密码框
JPasswordField jpf = new JPasswordField(10);
// 布局面板
ImagePanel jp1 = new ImagePanel();
ImagePanel jp2 = new ImagePanel();
ImagePanel jp3 = new ImagePanel();
ImagePanel jp4 = new ImagePanel();
ImagePanel jp5 = new ImagePanel();
ImagePanel jp21 = new ImagePanel();
ImagePanel jp22 = new ImagePanel();
ImagePanel jp221 = new ImagePanel();
// 数字操作按钮
ImageButton[] jbs = new ImageButton[12];
// ATM机窗体的引用
DemoWindow dw;
// 构造函数
public PasswordPanel(DemoWindow dw) {
// 设置ATM机窗体的引用
this.dw = dw;
// 面板布局
setLayout(new BorderLayout());
// 添加标题
jl.setForeground(Color.yellow);
jp1.add(jl);
jp2.setLayout(new BorderLayout());
// 添加密码框
jpf.setEchoChar('*');
jpf.setFont(new Font("黑体", Font.BOLD, 72));
jp21.add(jpf);
jp2.add(jp21, BorderLayout.NORTH);
// 添加数字操作按钮
jp221.setLayout(new GridLayout(4, 3));
// 创建0到9十个数字按钮
for (int i = 0; i < jbs.length - 2; i++) {
jbs[i] = new ImageButton(String.valueOf(i));
jbs[i].addActionListener(this);
jp221.add(jbs[i]);
}
// 创建“确认”和“重输”按钮
jbs[jbs.length - 2] = new ImageButton("确认");
jbs[jbs.len
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论








收起资源包目录





































































































共 603 条
- 1
- 2
- 3
- 4
- 5
- 6
- 7
资源评论

liuyanyang1989
- 粉丝: 0
- 资源: 2

上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助

会员权益专享
安全验证
文档复制为VIP权益,开通VIP直接复制
