继《简单Java小程序---无界面ATM机》以后,尝试对有界面ATM机改写,对面向对象的了解又深了一层!
Container pane; //用于标识每一个主面板 CardLayout cc=new CardLayout(); //系统采用盒状的方法布局 JPanel panLogin=new JPanel(); BoxLayout v=new BoxLayout(panLogin,BoxLayout.Y_AXIS); //采用盒状布局 panLogin.setLayout(v); JPanel pt=new JPanel(); panLogin.add(pt);//空出第一行 pt=new JPanel(); JLabel labTop=new JLabel("欢迎进入农业银行自动取款机");//添加标题 labTop.setFont(new Font("宋体",Font.PLAIN,24)); labTop.setForeground(Color.red); pt.add(labTop); panLogin.add(pt); pane.add(panLogin,"登陆");//最终生成布局格式
butOK.addActionListener(new java.awt.event.ActionListener() { //确定按钮的监听事件 @Override public void actionPerformed(ActionEvent e) { butOKActionPerformed(e); //To change body of generated methods, choose Tools | Templates. } }); pt=new JPanel(); pt.add(butOK);具体的实现功能butOKActionPerformed(e)通常为代码的清晰性考虑,在类的结尾一部分统一编写所有要实现的方法,这样提高代码的可读性(利用的是划分模块的思想)。
private void bPutActionPerfromed(java.awt.event.ActionEvent e){ //接听充值事件 int num=Integer.parseInt(JOptionPane.showInputDialog(this,"请输入要充值的金额:")); //获得弹出框中的数据 num=atm.getCurrent().putMoney(num); //当前账户的putMoney方法(同属于一个项目,用getCurrent就可以实现 labBoom.setText(" 您存入了"+num+"元"); }如果账户a实现对账户b的转账操作的话,就需要先获取输入的账户(Frame类),然后调用ATM中的转账方法:
public boolean tran(String account, int n) { //转账必定获得账户名称,和转账金额 int i; Account a; for (i = 0; i < v.size(); i++) { a = v.get(i); //获得容器中的账户 if (a.getNo().equals(account)) { //accout中的获得账户名方法获得账户名与传进的字符是否相等 a.putMoney(n); //为accout对象存钱 return true; } } return false; }转账实现(Frame类):
private void butOK1ActionPerformed(java.awt.event.ActionEvent e){ //转账确定事件 String no=txtAccount1.getText(); String no1=txtAccount2.getText(); if(no.equals(no1)){ String num=new String(txtBalance.getText()); Integer num1= Integer.parseInt(num); //输入的字符类型转换为整型 num1=atm.getCurrent().getMoney(num1);//登陆账户获得取款方法 atm.tran(no, num1); //执行转账方法 JOptionPane.showMessageDialog(this, "恭喜您,转账已成功","转账",JOptionPane.PLAIN_MESSAGE); }else{ //确保两次输入账户相同才准许转账 JOptionPane.showMessageDialog(this, "您输入的账户前后不一致,请重新输入","转账",JOptionPane.PLAIN_MESSAGE); } txtAccount1.setText(""); //转账结束将文本框清空 txtAccount2.setText(""); txtAccount1.requestFocus(); //账户文本框获得焦点 txtBalance.setText(""); }
ImageIcon img = new ImageIcon("image\\1.jpg");//这是背景图片,这种方式可以获取图片相对路径 JLabel imgLabel = new JLabel(img);//将背景图放在标签里。 JButton bReturn=new JButton(""); //添加返回按钮 bReturn.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(ActionEvent e) { bReturnActionPerformd(e); } }); panAbout.add(bReturn); panAbout.add(imgLabel);//注意这里是关键,将背景标签添加到jfram的LayeredPane面板里。 imgLabel.setBounds(0,0,img.getIconWidth(), img.getIconHeight());//设置背景标签的位置