登录界面,采用空布局在左侧设置图片位置放入登录的图片,右侧是用户名和密码标签,然后是用户名文本框和密码框,还有标题在右上方,下方是登录、注册和退出按钮,登录和退出按钮加上图标。这里的图片都是从网上找的。
在登录、注册和退出按钮设置监听器。退出关闭本界面,登录按钮先判断账号属于什么账号,如果是游客账号,就进入游客功能主界面,如果登录账号是管理员账号,就进入管理员功能界面。游客和管理员从同一界面登录账号,有判断语句分开账号,如果是游客进入游客界面,如果是管理员进入管理员界面,界面内容不同。
public class Loginframe extends Jframe { JPanel pnlMain; //面板 JLabel lblLogo,lblTitle,lblUserName,lblPassWord;//标签,纯显示,后期不需要变化 JTextField txtUserName; //单行文本框 JPasswordField pswPassWord; //密码框 JButton btnLogin,btnExit,zhu; //按钮 static String sname; Dimension dsSIZE; Toolkit toolkit = Toolkit.getDefaultToolkit(); //获取电脑屏幕大小 public Loginframe(){ pnlMain = new JPanel(); //创建面板对象 pnlMain.setLayout(null);//设置空布局 lblLogo = new JLabel(new ImageIcon("images/登录.jpg")); lblTitle = new JLabel("梦"+" "+"幻"+" "+"游"+" "+"乐"+" "+"场"); lblUserName = new JLabel("账 号:"); lblPassWord = new JLabel("密 码:"); txtUserName = new JTextField(20);//指定列数 pswPassWord = new JPasswordField(20);// btnLogin = new JButton("登录",new ImageIcon("images/左.png")); btnExit = new JButton("退出",new ImageIcon("images/右.png")); zhu = new JButton("注册"); Font font1 = new Font("隶书", Font.BOLD, 30); lblTitle.setFont(font1); Font font2 = new Font("隶书", Font.PLAIN, 23); lblUserName.setFont(font2); lblPassWord.setFont(font2); btnLogin.setFont(font2); btnExit.setFont(font2); zhu.setFont(font2); lblLogo.setBounds(30, 30, 500, 400); lblTitle.setBounds(560, 50, 300, 50); lblUserName.setBounds(570, 150, 100, 50); txtUserName.setBounds(650, 160, 150, 30); lblPassWord.setBounds(570, 250, 100, 50); pswPassWord.setBounds(650, 260, 150, 30); btnLogin.setBounds(540, 350, 100, 50); zhu.setBounds(650, 350, 70, 50); btnExit.setBounds(730, 350, 100, 50); pnlMain.add(lblLogo);//将组件加载到面板上 pnlMain.add(lblTitle); pnlMain.add(lblUserName); pnlMain.add(lblPassWord); pnlMain.add(txtUserName); pnlMain.add(pswPassWord); pnlMain.add(btnLogin); pnlMain.add(btnExit); pnlMain.add(zhu); btnLogin.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if(e.getSource()==btnLogin) { String id = txtUserName.getText(); String password = pswPassWord.getText(); if (UserDao.login(id, password)) { JOptionPane.showMessageDialog(null, "登录成功"); try { UserBean youke = UserDao.select(id); sname=youke.getYoukename(); } catch (SQLException ex) { ex.printStackTrace(); } new YouKeframe(); dispose(); } else if (txtUserName.getText().equals("admin") && pswPassWord.getText().equals("123456")){ new Mainframe(); Loginframe.super.dispose(); } else { JOptionPane.showMessageDialog(null, "用户名或密码输入不正确!"); } } } }); zhu.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { new ZhuCe(); } }); btnExit.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.exit(0); } }); this.setContentPane(pnlMain);//将面板加到窗体上 this.setTitle("欢迎来到梦幻游乐场!");//设置标题 this.setVisible(true);//让窗口可视 this.setSize(850, 500);//设置窗口大小 dsSIZE = toolkit.getScreenSize();//获取显示器大小,必须写在设置窗口大小下面 this.setLocation(dsSIZE.width/2-this.getWidth()/2, dsSIZE.height/2-this.getHeight()/2);//将窗口居中 Image img = toolkit.getImage("images/标题图.png"); this.setIconImage(img);//换头标题图像 this.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);//设置关闭方式 } public static void main(String[] args) { try { BeautyEyeLNFHelper.frameBorderStyle = BeautyEyeLNFHelper.frameBorderStyle.generalNoTranslucencyShadow; org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper.launchBeautyEyeLNF(); } catch (Exception e) { e.printStackTrace(); } Thread t = new YouKeframe.MyThread(YouKeframe.jl); Thread m = new Mainframe.MyThread(Mainframe.jl); m.start(); t.start(); new Loginframe(); } }
创建类用来连接mysql数据库,以及对数据库进行查询和更改 *** 作,将所得到的值放到集合,传递给程序使用,实现程序与数据库之间的数据共享。加载数据库驱动,并连接数据库。然后可以对数据库的表进行使用和访问。
public class DB { private static String driverName = "com.mysql.cj.jdbc.Driver"; private static String dbURL = "jdbc:mysql://localhost:3306/youlechang?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=true"; private static String USERname = "admin"; private static String PASSWORD = "123456"; public static Connection getConnection() { Connection conn = null; try { //加载jdbc驱动 Class.forName(driverName); conn = DriverManager.getConnection(dbURL, USERname, PASSWORD); } catch (ClassNotFoundException e) { System.out.println("驱动加载异常!"); } catch (SQLException throwables) { System.out.println("数据库连接失败!"); } return conn; } }
购票界面,购票按钮设置监听器,点击进入购票界面,有一个多选框,可以选择购票类型,一个文本框再输入你想要购买的票数。
点击确认,在确认按钮设置监听器,设置get方法得到多选框内容和文本框中的票数,有if语句判断,然后通过if语句来调整票的价格,在下方结算文本框set得到的价格,由于get文本框得到的数据类型为String,想要计算票价需要把get到的String类型强制转换成int类型,然后运用int类型的数据进行计算,因为计算之后需要被文本框获取,文本框是String类型数据,如果文本框需要获取计算结果,那就需要把int类型数据强制转换成String类型数据被文本框获得,显示在文本框处使用户看到。界面就会在应付金额处显示对应的票价,如果不符合买票条件,会有消息提示框d出,可以在左上角查询,然后重新购买。
在付款按钮设置监听器,点击付款按钮,会d出二维码付款窗口,窗口显示一些语句和购票人,还有购票时间和应付金额。在选择票的种类中,先选择票的种类,再输入票的数量,系统会通过if语句来判断购票数量来判断游客购票种类是否符合票价,并给出相应提示去左上角查询购票规则,了解清楚之后再来购票界面买相应的票。然后点击付款按钮扫码支付应付金额。
public class GouPiao extends JPanel{ JLabel xuanze,jiage,tupian,piaoshu,shengyu,shengyushu; JComboBox goupiao; static JTextField money,shuliang; JButton fukuan,yes; public static Jframe mainframe; public GouPiao(){ mainframe=(Jframe) this.getParent(); this.setLayout(null); this.setPreferredSize(new Dimension(860, 480)); GUITools.setCenter(this); tupian = new JLabel(new ImageIcon("images/dingbu/jpg")); xuanze = new JLabel("票的种类:"); jiage = new JLabel("应付金额:"); goupiao = new JComboBox(new String[]{"成人票","儿童票","团购","温馨家庭版"}); money = new JTextField(10); yes = new JButton("确认",new ImageIcon("images/对.png")); fukuan = new JButton("付款",new ImageIcon("images/钱.png")); piaoshu= new JLabel("票的数量:"); shuliang =new JTextField(10); Font font = new Font("隶书", Font.PLAIN, 20); yes.setFont(font); xuanze.setFont(font); jiage.setFont(font); goupiao.setFont(font); fukuan.setFont(font); piaoshu.setFont(font); money.setFont(font); shuliang.setFont(font); tupian.setBounds(20, 0, 840, 100); xuanze.setBounds(100, 120, 100, 50); goupiao.setBounds(250, 120, 200, 50); piaoshu.setBounds(100, 200, 100, 50); shuliang.setBounds(250, 200, 200, 50); yes.setBounds(500, 200, 100, 50); jiage.setBounds(100, 280, 100, 50); money.setBounds(250, 280, 200, 50); fukuan.setBounds(500, 280, 100, 50); this.add(tupian); this.add(xuanze); this.add(goupiao); this.add(jiage); this.add(money); this.add(fukuan); this.add(piaoshu); this.add(shuliang); this.add(yes); this.setVisible(true); yes.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (goupiao.getSelectedItem() == "成人票"){ int chengren = Integer.parseInt(shuliang.getText()) * 60; String s = Integer.toString(chengren); money.setText(s); }else if (goupiao.getSelectedItem() == "儿童票"){ int ertong = Integer.parseInt(shuliang.getText()) * 48; String s = Integer.toString(ertong); money.setText(s); }else if (goupiao.getSelectedItem() == "团购"){ int renshu = Integer.parseInt(shuliang.getText()); if (renshu <6){ JOptionPane.showMessageDialog(null, "抱歉,团购人数最少为6人(详情请上页面左上角查询)"); }else if (renshu >=6 && renshu <10){ int liu = renshu * 48; String s = Integer.toString(liu); money.setText(s); }else { int ten = renshu * 45; String s = Integer.toString(ten); money.setText(s); } }else { int renshu = Integer.parseInt(shuliang.getText()); if (renshu == 3){ money.setText("150"); }else if (renshu == 4){ money.setText("200"); }else { JOptionPane.showMessageDialog(null, "抱歉,您选择的人数不在家庭版中(详情请上页面左上角查询)"); } } } }); fukuan.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { new FuKuan(); } }); } }
点击注册按钮,会出现注册消息框,采用空布局,定义标签和文本框,定位置放置标签和文本框,设置提交按钮和退出按钮。
在界面用get方法得到文本框内的内容,调用UserDao里的insert方法把注册页面的内容添加到数据库的表中,从而保存下来游客注册的数据,再次登录选择注册的账号和密码就可以进入游客界面。
public class ZhuCe extends Jframe { JLabel zhanghao,xingming,pasword,age,sex,phone; JTextField hao,name,nianling,xingbie,dianhua; JPasswordField mima; JButton tijiao,tuichu; JPanel pnlMain; //面板 Dimension dsSIZE; Toolkit toolkit = Toolkit.getDefaultToolkit(); //获取电脑屏幕大小 public ZhuCe(){ pnlMain = new JPanel(); //创建面板对象 pnlMain.setLayout(null);//设置空布局 zhanghao = new JLabel("QQ/手机号:"); xingming = new JLabel("姓名:"); pasword = new JLabel("密码:"); age = new JLabel("年龄:"); sex = new JLabel("性别:"); phone = new JLabel("联系电话:"); hao = new JTextField(20); name = new JTextField(20); mima = new JPasswordField(20); nianling = new JTextField(20); xingbie = new JTextField(20); dianhua = new JTextField(20); tijiao = new JButton("提交"); tuichu = new JButton("退出"); zhanghao.setBounds(20,20,100, 30); xingming.setBounds(20,70,100, 30); pasword.setBounds(20,120,100, 30); age.setBounds(20,190,100, 30); sex.setBounds(20,240,100, 30); phone.setBounds(20,290,100, 30); hao.setBounds(120, 20, 100, 30); name.setBounds(120, 70, 100, 30); mima.setBounds(120, 120, 100, 30); nianling.setBounds(120, 190, 100, 30); xingbie.setBounds(120, 240, 100, 30); dianhua.setBounds(120, 290, 100, 30); tijiao.setBounds(50, 360, 70, 30); tuichu.setBounds(150, 360, 70, 30); pnlMain.add(zhanghao); pnlMain.add(xingming); pnlMain.add(pasword); pnlMain.add(age); pnlMain.add(sex); pnlMain.add(phone); pnlMain.add(hao); pnlMain.add(name); pnlMain.add(mima); pnlMain.add(nianling); pnlMain.add(xingbie); pnlMain.add(dianhua); pnlMain.add(tijiao); pnlMain.add(tuichu); tijiao.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String common = e.getActionCommand(); UserBean bean = new UserBean(); bean.setYoukeid(hao.getText()); bean.setYoukename(name.getText()); bean.setPassword(mima.getText()); bean.setAge(Integer.parseInt(nianling.getText())); bean.setSex(xingbie.getText()); bean.setPhone(dianhua.getText()); try { UserDao.insert(bean);//调用UserDao里的insert方法 //提示保存成功 JOptionPane.showMessageDialog(null, "注册成功"); setVisible(true); //关闭对话框 dispose(); } catch (Exception e1) { //提示保存失败 JOptionPane.showMessageDialog(null, "注册失败"); setVisible(true); e1.printStackTrace(); } } }); this.setContentPane(pnlMain);//将面板加到窗体上 this.setTitle("注册账号");//设置标题 this.setVisible(true);//让窗口可视 this.setSize(300, 450);//设置窗口大小 dsSIZE = toolkit.getScreenSize();//获取显示器大小,必须写在设置窗口大小下面 this.setLocation(dsSIZE.width/2-this.getWidth()/2, dsSIZE.height/2-this.getHeight()/2);//将窗口居中 Image img = toolkit.getImage("images/标题图.png"); this.setIconImage(img);//换头标题图像 this.setDefaultCloseOperation(Jframe.DISPOSE_ON_CLOSE);//设置关闭方式 } }
差不多主要界面就这些,菜单栏还有一些其他的小部分基本都是通过I/O流读取的txt文档,还有一张场景俯视图(当然图也是去网上找的自己改了一点),在菜单栏里点击按钮可以d出d窗查看,剩下内容太多了,建了六个包,一共三十多个类,需要的同学可以找我要一下,大家交流学习,这是我发的第一个帖子,我也在这个网站学习半年了,感觉挺好的,期末作业也完成了就拿出来发一个帖子吧。本人初学者还希望大神不要喷我的程序。虽然一个很简陋的程序,可我还是想拿出来发一下,毕竟这是我这学期的纪念。
最后希望大家都好好学习天天向上吧。一起努力学习,哈哈哈哈哈哈哈哈
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)