本文小编为大家详细介绍“怎么用Eclipse+Java+Swing+Mysql实现电影购票系统”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么用Eclipse+Java+Swing+Mysql实现电影购票系统”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
一、系统介绍
1.开发环境
开发工具:Eclipse2021
JDK版本:jdk1.8
Mysql版本:8.0.13
2.技术选型
Java+Swing+Mysql
3.系统功能
注册系统,登录系统;
3.1.用户
欢迎页:修改用户姓名和密码;
碟片排行榜:影片的详细信息;
购票信息:已购买车票的信息;
场次信息:电影场次的详细信息;
充值:充值余额;
搜索电影:搜索电影的详细信息;
3.2.管理员
对用户进行操作:用户信息的查询、删除;
对影院进行操作:影院信息的查询、删除、增加;
对场厅进行操作:场厅信息的查询、删除、增加;
对场次进行操作:场次信息的查询、删除、增加;
对电影进行操作:电影信息的查询、删除、增加;
4.数据库
SET NAMES utf8mb4;SET FOREIGN_KEY_CHECKS = 0; -- ------------------------------ Table structure for cinema-- ----------------------------DROP TABLE IF EXISTS `cinema`;CREATE TABLE `cinema` ( `cinema_id` int(11) NOT NULL AUTO_INCREMENT, `cname` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, `address` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, PRIMARY KEY (`cinema_id`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ------------------------------ Records of cinema-- ----------------------------INSERT INTO `cinema` VALUES (6, '光明影院', '湖北武汉');INSERT INTO `cinema` VALUES (7, '大同影院', '湖南长沙'); -- ------------------------------ Table structure for comment-- ----------------------------DROP TABLE IF EXISTS `comment`;CREATE TABLE `comment` ( `comment_id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `movie_id` int(11) NOT NULL, `content` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, `datetime` datetime(0) NULL DEFAULT NULL, PRIMARY KEY (`comment_id`) USING BTREE, INDEX `comment_ibfk_1`(`user_id`) USING BTREE, INDEX `comment_ibfk_2`(`movie_id`) USING BTREE, CONSTRAINT `comment_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`) ON DELETE CASCADE ON UPDATE RESTRICT, CONSTRAINT `comment_ibfk_2` FOREIGN KEY (`movie_id`) REFERENCES `movie` (`movie_id`) ON DELETE CASCADE ON UPDATE RESTRICT) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ------------------------------ Records of comment-- ---------------------------- -- ------------------------------ Table structure for hall-- ----------------------------DROP TABLE IF EXISTS `hall`;CREATE TABLE `hall` ( `hall_id` int(11) NOT NULL AUTO_INCREMENT, `hname` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, `capacity` int(11) NULL DEFAULT NULL, `cinema_id` int(11) NOT NULL, PRIMARY KEY (`hall_id`) USING BTREE, INDEX `hall_ibfk_1`(`cinema_id`) USING BTREE, CONSTRAINT `hall_ibfk_1` FOREIGN KEY (`cinema_id`) REFERENCES `cinema` (`cinema_id`) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE = InnoDB AUTO_INCREMENT = 12 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ------------------------------ Records of hall-- ----------------------------INSERT INTO `hall` VALUES (12, '1厅', 50, 6); -- ------------------------------ Table structure for movie-- ----------------------------DROP TABLE IF EXISTS `movie`;CREATE TABLE `movie` ( `movie_id` int(11) NOT NULL AUTO_INCREMENT, `mname` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, `type` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '电影类型', `detail` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, `duration` int(11) NULL DEFAULT NULL, `img` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '保存图片名称', PRIMARY KEY (`movie_id`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 14 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ------------------------------ Records of movie-- ----------------------------INSERT INTO `movie` VALUES (12, '八佰', '抗战', '八佰', 120, NULL);INSERT INTO `movie` VALUES (13, '春秋', '历史', '春秋', 150, NULL);INSERT INTO `movie` VALUES (15, '1', '1', '1', 1, NULL); -- ------------------------------ Table structure for session-- ----------------------------DROP TABLE IF EXISTS `session`;CREATE TABLE `session` ( `session_id` int(11) NOT NULL AUTO_INCREMENT, `hall_id` int(11) NOT NULL, `cinema_id` int(11) NOT NULL, `movie_id` int(11) NOT NULL, `starttime` varchar(11) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, `price` double NULL DEFAULT NULL, `remain` int(11) NULL DEFAULT NULL, PRIMARY KEY (`session_id`) USING BTREE, INDEX `hall_id`(`hall_id`) USING BTREE, INDEX `cinema_id`(`cinema_id`) USING BTREE, INDEX `movie_id`(`movie_id`) USING BTREE, CONSTRAINT `session_ibfk_1` FOREIGN KEY (`hall_id`) REFERENCES `hall` (`hall_id`) ON DELETE RESTRICT ON UPDATE RESTRICT, CONSTRAINT `session_ibfk_2` FOREIGN KEY (`cinema_id`) REFERENCES `cinema` (`cinema_id`) ON DELETE RESTRICT ON UPDATE RESTRICT, CONSTRAINT `session_ibfk_3` FOREIGN KEY (`movie_id`) REFERENCES `movie` (`movie_id`) ON DELETE RESTRICT ON UPDATE RESTRICT) ENGINE = InnoDB AUTO_INCREMENT = 14 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ------------------------------ Records of session-- ----------------------------INSERT INTO `session` VALUES (14, 12, 6, 12, '09:00:00', 50, 47); -- ------------------------------ Table structure for ticket-- ----------------------------DROP TABLE IF EXISTS `ticket`;CREATE TABLE `ticket` ( `ticket_id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `movie_id` int(11) NOT NULL, `session_id` int(11) NOT NULL, `seat` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, PRIMARY KEY (`ticket_id`) USING BTREE, INDEX `ticket_ibfk_1`(`user_id`) USING BTREE, INDEX `ticket_ibfk_2`(`movie_id`) USING BTREE, INDEX `ticket_ibfk_3`(`session_id`) USING BTREE, CONSTRAINT `ticket_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `ticket_ibfk_2` FOREIGN KEY (`movie_id`) REFERENCES `movie` (`movie_id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `ticket_ibfk_3` FOREIGN KEY (`session_id`) REFERENCES `session` (`session_id`) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE = InnoDB AUTO_INCREMENT = 64 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ------------------------------ Records of ticket-- ----------------------------INSERT INTO `ticket` VALUES (64, 1, 12, 14, '3'); -- ------------------------------ Table structure for user-- ----------------------------DROP TABLE IF EXISTS `user`;CREATE TABLE `user` ( `user_id` int(11) NOT NULL AUTO_INCREMENT, `uname` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, `passwd` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, `type` int(11) NULL DEFAULT 0 COMMENT '0代表普通用户,1代表管理员', `balance` double NULL DEFAULT NULL, `level` int(11) NULL DEFAULT NULL, PRIMARY KEY (`user_id`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ------------------------------ Records of user-- ----------------------------INSERT INTO `user` VALUES (1, 'user', 'user', 0, 161, 1);INSERT INTO `user` VALUES (2, 'admin', 'admin', 1, 1, 1); SET FOREIGN_KEY_CHECKS = 1;
5.工程截图
二、系统展示
1.注册系统
2.登录系统
3.用户-欢迎界面
4.用户-影片排行榜
5.用户-购票信息
6.用户-场次信息
用户-充值余额
8.用户-搜索电影
9.管理员-首页
10.管理员-对用户进行操作
11.管理员-对影院进行操作
12.管理员-对场厅进行操作
13.管理员-对场次进行操作
14.管理员-对电影进行操作
三、部分代码
AdminMainView.java
package view; import java.awt.BorderLayout;import java.awt.Color;import java.awt.EventQueue;import java.awt.Font;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener; import javax.swing.BorderFactory;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JDesktopPane;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel; import entity.User; public class AdminMainView extends JFrame { private JPanel main_panel = null; private JPanel fun_panel = null; private JDesktopPane fundesk = null; private JButton oper_User = null; private JButton oper_Cinema = null; private JButton oper_Hall = null; private JButton oper_Session = null; private JButton oper_Movie = null; private JButton back = null; private JLabel lb_welcome = null; private JLabel lb_image = null; private User admin = null; public AdminMainView() { init(); RegisterListener(); } public AdminMainView(User admin) { this.admin = admin; init(); RegisterListener(); } private void init() { main_panel = new JPanel(new BorderLayout()); fun_panel = new JPanel(new GridLayout(8, 1, 0, 18)); oper_User = new JButton("对用户进行操作"); oper_Cinema = new JButton("对影院进行操作"); oper_Hall = new JButton("对场厅进行操作"); oper_Session = new JButton("对场次进行操作"); oper_Movie = new JButton("对电影进行操作"); back = new JButton("返回"); fun_panel.add(new JLabel()); fun_panel.add(oper_User); fun_panel.add(oper_Cinema); fun_panel.add(oper_Hall); fun_panel.add(oper_Session); fun_panel.add(oper_Movie); fun_panel.add(back); fun_panel.add(new JLabel()); // 设置面板外观 fun_panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createRaisedBevelBorder(), "功能区")); lb_welcome = new JLabel("欢 迎 " + admin.getUname() + " 进 入 管 理 员 功 能 界 面"); lb_welcome.setFont(new Font("楷体", Font.BOLD, 34)); lb_welcome.setForeground(Color.BLUE); fundesk = new JDesktopPane(); ImageIcon img = new ImageIcon(ClassLoader.getSystemResource("image/beijjing3.jpg")); lb_image = new JLabel(img); lb_image.setBounds(10, 10, img.getIconWidth(), img.getIconHeight()); fundesk.add(lb_image, new Integer(Integer.MIN_VALUE)); main_panel.add(lb_welcome, BorderLayout.NORTH); main_panel.add(fun_panel, BorderLayout.EAST); main_panel.add(fundesk, BorderLayout.CENTER); // 为了不让线程阻塞,来调用线程 // 放入队列当中 EventQueue.invokeLater(new Runnable() { public void run() { new Thread(new thread()).start(); } }); this.setTitle("管理员功能界面"); this.getContentPane().add(main_panel); this.setSize(880, 600); this.setResizable(false); this.setVisible(true); this.setLocationRelativeTo(null); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } // 开启线程使得欢迎标签动起来 // 这是单线程 private class thread implements Runnable { @Override public void run() { while (true) {// 死循环让其一直移动 for (int i = 900; i > -700; i--) { // for(int i=-100;i<900;i++){ try { Thread.sleep(10);// 让线程休眠100毫秒 } catch (InterruptedException e) { e.printStackTrace(); } lb_welcome.setLocation(i, 5); } } } } private void RegisterListener() { oper_User.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { operUserView ouv = new operUserView(); fundesk.add(ouv); ouv.toFront(); } }); oper_Cinema.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { operCinemaView ocv = new operCinemaView(); fundesk.add(ocv); ocv.toFront(); } }); oper_Hall.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { operHallView ohv = new operHallView(); fundesk.add(ohv); ohv.toFront(); } }); oper_Session.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { operSessionView osv = new operSessionView(); fundesk.add(osv); osv.toFront(); } }); oper_Movie.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { operMovieView omv = new operMovieView(); fundesk.add(omv); omv.toFront(); } }); back.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { new Login(); AdminMainView.this.dispose(); } }); }}
MovieInfoView.java
package view; import java.awt.Color;import java.awt.Font;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.text.SimpleDateFormat;import java.util.List; import javax.swing.GroupLayout;import javax.swing.GroupLayout.Alignment;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.JTextField;import javax.swing.LayoutStyle.ComponentPlacement;import javax.swing.border.EmptyBorder;import javax.swing.table.DefaultTableModel; import entity.Comment;import entity.Movie;import entity.User;import service.CommentService;import service.MovieService;import service.UserService;import serviceimpl.CommentServiceImpl;import serviceimpl.MovieServiceImpl;import serviceimpl.UserServiceImpl; public class MovieInfoView extends JFrame { private JPanel contentPane; private JTable table; JScrollPane scrollPane = null; Movie movie = null; User user = null; MovieService ms = null; CommentService cs = null; UserService us = null; public MovieInfoView(Movie movie, User user) { this.movie = movie; this.user = user; ms = new MovieServiceImpl(); cs = new CommentServiceImpl(); us = new UserServiceImpl(); setTitle("用户选票界面"); setBounds(260, 130, 620, 600); this.setLocationRelativeTo(null); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); JLabel lblNewLabel = new JLabel("New label"); lblNewLabel.setIcon(new ImageIcon("image/" + movie.getImg())); JLabel label = new JLabel("正在热映···"); JLabel lblNewLabel_1 = new JLabel("影片名:"); lblNewLabel_1.setFont(new Font("楷体", Font.BOLD, 18)); JLabel label_1 = new JLabel("类型:"); JLabel label_2 = new JLabel("时长:"); JLabel label_3 = new JLabel("电影详情:"); JLabel label_4 = new JLabel(movie.getMname()); label_4.setFont(new Font("楷体", Font.BOLD, 18)); JButton btnNewButton = new JButton("购买"); btnNewButton.setForeground(Color.BLUE); btnNewButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { new UserUi(user, 3); movie.getMovie_id(); List<Movie> movieByName = ms.getMovieByName(movie.getMname()); for (Movie movie2 : movieByName) { System.out.println(movie2); } MovieInfoView.this.dispose(); } }); JButton button = new JButton("取消"); button.setForeground(Color.RED); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { MovieInfoView.this.dispose(); } }); scrollPane = new JScrollPane(); scrollPane.setEnabled(false); scrollPane.setVisible(false); JButton button_1 = new JButton("查看评论"); button_1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { scrollPane.setVisible(true); showComment(); table.repaint(); } }); button_1.setForeground(Color.MAGENTA); JLabel lblNewLabel_2 = new JLabel("欢迎来到电影详情界面"); lblNewLabel_2.setFont(new Font("新宋体", Font.BOLD, 20)); lblNewLabel_2.setForeground(Color.BLACK); JLabel label_5 = new JLabel(movie.getType()); JLabel label_6 = new JLabel(movie.getDuration() + "分钟"); JLabel label_7 = new JLabel(movie.getDetail()); GroupLayout gl_contentPane = new GroupLayout(contentPane); gl_contentPane.setHorizontalGroup(gl_contentPane.createParallelGroup(Alignment.TRAILING).addGroup(gl_contentPane .createSequentialGroup() .addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING) .addGroup(gl_contentPane.createSequentialGroup().addGap(218) .addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING) .addGroup(gl_contentPane.createSequentialGroup().addComponent(label_3) .addPreferredGap(ComponentPlacement.RELATED).addComponent(label_7, GroupLayout.PREFERRED_SIZE, 70, GroupLayout.PREFERRED_SIZE)) .addGroup(gl_contentPane.createSequentialGroup().addComponent(lblNewLabel_1) .addPreferredGap(ComponentPlacement.RELATED) .addComponent(label_4, GroupLayout.PREFERRED_SIZE, 137, GroupLayout.PREFERRED_SIZE)) .addGroup(gl_contentPane.createSequentialGroup() .addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING) .addComponent(label_2) .addGroup(gl_contentPane.createSequentialGroup() .addPreferredGap(ComponentPlacement.RELATED) .addComponent(label_1))) .addGap(4) .addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING) .addComponent(label_6, GroupLayout.PREFERRED_SIZE, 55, GroupLayout.PREFERRED_SIZE) .addComponent(label_5, GroupLayout.PREFERRED_SIZE, 82, GroupLayout.PREFERRED_SIZE))) .addGroup(gl_contentPane.createSequentialGroup().addComponent(btnNewButton) .addGap(18) .addComponent(button, GroupLayout.PREFERRED_SIZE, 71, GroupLayout.PREFERRED_SIZE) .addGap(18).addComponent(button_1)))) .addGroup(gl_contentPane.createSequentialGroup().addGap(36).addComponent(label)) .addGroup(gl_contentPane.createSequentialGroup().addGap(170).addComponent(lblNewLabel_2)) .addComponent(lblNewLabel, GroupLayout.PREFERRED_SIZE, 200, GroupLayout.PREFERRED_SIZE) .addGroup(gl_contentPane.createSequentialGroup().addGap(84).addComponent(scrollPane, GroupLayout.PREFERRED_SIZE, 464, GroupLayout.PREFERRED_SIZE))) .addContainerGap(46, Short.MAX_VALUE))); gl_contentPane.setVerticalGroup(gl_contentPane.createParallelGroup(Alignment.TRAILING) .addGroup(gl_contentPane.createSequentialGroup() .addGroup(gl_contentPane .createParallelGroup(Alignment.LEADING) .addGroup(gl_contentPane.createSequentialGroup().addGap(46).addComponent(label) .addPreferredGap(ComponentPlacement.UNRELATED) .addComponent(lblNewLabel, GroupLayout.DEFAULT_SIZE, 277, Short.MAX_VALUE)) .addGroup(gl_contentPane.createSequentialGroup().addContainerGap() .addComponent(lblNewLabel_2).addGap(58) .addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING) .addComponent(lblNewLabel_1).addComponent(label_4, GroupLayout.PREFERRED_SIZE, 21, GroupLayout.PREFERRED_SIZE)) .addPreferredGap(ComponentPlacement.RELATED, 53, Short.MAX_VALUE) .addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE) .addComponent(label_1).addComponent(label_5)) .addGap(18) .addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE) .addComponent(label_2).addComponent(label_6)) .addGap(18) .addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE) .addComponent(label_3).addComponent(label_7)) .addGap(125) .addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE) .addComponent(btnNewButton).addComponent(button) .addComponent(button_1)))) .addGap(28) .addComponent(scrollPane, GroupLayout.PREFERRED_SIZE, 139, GroupLayout.PREFERRED_SIZE))); showComment(); scrollPane.setViewportView(table); contentPane.setLayout(gl_contentPane); this.setVisible(true); } public void showComment() { List<Comment> commlist = cs.getAllCommentByMovieId(movie.getMovie_id()); int recordrow = 0; if (commlist != null) { recordrow = commlist.size(); } String[][] rinfo = new String[recordrow][3]; SimpleDateFormat sdf = new SimpleDateFormat("yy-MM-dd hh:mm"); for (int i = 0; i < recordrow; i++) { for (int j = 0; j < 3; j++) { rinfo[i][j] = new String(); rinfo[i][0] = us.queryUserById(commlist.get(i).getUser_id()).getUname(); rinfo[i][1] = commlist.get(i).getContent(); rinfo[i][2] = sdf.format(commlist.get(i).getDatetime()); } } String[] tbheadnames = { "用户名", "评论内容", "评论时间" }; table = new JTable(rinfo, tbheadnames); table.setBorder(null); table.setRowHeight(20); table.setEnabled(false); table.getColumnModel().getColumn(0).setPreferredWidth(30); table.getTableHeader().setFont(new Font("楷体", 1, 20)); table.getTableHeader().setBackground(Color.CYAN); table.getTableHeader().setReorderingAllowed(false); // 不可交换顺序 table.getTableHeader().setResizingAllowed(true); // 不可拉动表格 scrollPane.add(table); scrollPane.setBorder(null); table.repaint(); }}
operCinemaView.java
package view; import java.awt.BorderLayout;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.util.ArrayList;import java.util.List; import javax.swing.BorderFactory;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing.JInternalFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JTable;import javax.swing.JTextField;import javax.swing.event.TableModelListener;import javax.swing.table.TableModel; import entity.Cinema;import service.CinemaService;import serviceimpl.CinemaServiceImpl; public class operCinemaView extends JInternalFrame { private JPanel pl_main = null; private JPanel pl_button = null; private JPanel pl_text = null; private JTable table = null; private JButton btn_add = null; private JButton btn_query = null; private JButton btn_del = null; private JComboBox<String> cb_query = null; private JButton btn_back = null; private JLabel lb_name = null; private JLabel lb_address = null; private JTextField tf_qname = null;// 查询时输入的名称 private JTextField tf_name = null;// 添加输入的名称 private JTextField tf_address = null; private CinemaService cinemabiz = null; private List<Cinema> cinemaList = null; private CinemaInfoTableModel infoTableModel = null;// private List<Hall> hallList = null;// private List<Session> sessionList = null;// private HallBiz hallbiz = null;// private SessionBiz sessionbiz = null; public operCinemaView() { cinemabiz = new CinemaServiceImpl();// hallbiz = new HallBizImpl();// sessionbiz = new SessionBizImpl(); init(); RegisterListener(); } private void init() { pl_main = new JPanel(new BorderLayout()); pl_button = new JPanel(new GridLayout(8, 1, 0, 40)); pl_text = new JPanel(new GridLayout(1, 4)); cinemaList = new ArrayList<Cinema>(); table = new JTable(); refreshTable(cinemaList); cb_query = new JComboBox<String>(new String[] { "查询所有影院", "按名字查找影院" }); tf_qname = new JTextField(8); tf_qname.setEnabled(false); btn_query = new JButton("查询"); btn_add = new JButton("增添影院"); btn_del = new JButton("删除影院"); btn_del.setEnabled(false); btn_back = new JButton("退出窗口"); lb_name = new JLabel("影院名称: "); tf_name = new JTextField(8); lb_address = new JLabel("影院地址: "); tf_address = new JTextField(12); pl_main.add(table.getTableHeader(), BorderLayout.PAGE_START); pl_main.add(table); pl_main.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(null, null), "查询信息")); pl_button.add(new JLabel()); pl_button.add(cb_query); pl_button.add(tf_qname); pl_button.add(btn_query); pl_button.add(btn_add); pl_button.add(btn_del); pl_button.add(new JLabel()); pl_button.add(btn_back); pl_text.add(lb_name); pl_text.add(tf_name); pl_text.add(lb_address); pl_text.add(tf_address); this.add(pl_main, BorderLayout.CENTER); this.add(pl_button, BorderLayout.EAST); this.add(pl_text, BorderLayout.NORTH); this.setVisible(true); this.setTitle("影院操作界面"); this.setSize(700, 530); this.setIconifiable(true); this.setClosable(true); this.setDefaultCloseOperation(DISPOSE_ON_CLOSE); } private void RegisterListener() { table.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if (table.getSelectedRow() != -1) { btn_del.setEnabled(true); } int row = table.getSelectedRow(); String name = table.getValueAt(row, 1).toString(); String address = table.getValueAt(row, 2).toString(); tf_name.setText(name); tf_address.setText(address); } }); cb_query.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (cb_query.getSelectedIndex() + 1 == 2) { tf_qname.setEnabled(true); } else { tf_qname.setEnabled(false); } } }); btn_query.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (cb_query.getSelectedIndex() + 1 == 1) { cinemaList = cinemabiz.queryAllCinema(); refreshTable(cinemaList); } else { String name = tf_qname.getText().trim(); cinemaList = cinemabiz.queryCinemaByName(name); refreshTable(cinemaList); } } }); btn_add.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String name = tf_name.getText().trim(); String address = tf_address.getText().trim(); if (name.equals("")) { JOptionPane.showMessageDialog(operCinemaView.this, "影院名称不能为空!"); } else if (address.equals("")) { JOptionPane.showMessageDialog(operCinemaView.this, "影院地址不能为空!"); } else { int flag = JOptionPane.showConfirmDialog(operCinemaView.this, "确认是否添加?", "确认信息", JOptionPane.YES_NO_OPTION); if (flag == JOptionPane.YES_OPTION) { Cinema cinema = new Cinema(name, address); boolean res = cinemabiz.addCinema(cinema); if (res) { cinemaList = cinemabiz.queryAllCinema(); refreshTable(cinemaList); JOptionPane.showMessageDialog(operCinemaView.this, "添加成功!"); } else { JOptionPane.showMessageDialog(operCinemaView.this, "添加失败!"); } } } } }); btn_del.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { int row = table.getSelectedRow(); int id = (Integer) table.getValueAt(row, 0); int flag = JOptionPane.showConfirmDialog(operCinemaView.this, "确认是否删除此影院?", "确认信息", JOptionPane.YES_NO_OPTION); if (flag == JOptionPane.YES_OPTION) { boolean res = cinemabiz.deleteCinemaById(id); cinemaList = cinemabiz.queryAllCinema(); refreshTable(cinemaList); } } }); btn_back.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { operCinemaView.this.dispose(); } }); } public class CinemaInfoTableModel implements TableModel { public List<Cinema> cinemaList = null; public CinemaInfoTableModel(List<Cinema> cinemaList) { this.cinemaList = cinemaList; } @Override public int getRowCount() { return cinemaList.size(); } @Override public int getColumnCount() { return 3; } @Override public String getColumnName(int columnIndex) { if (columnIndex == 0) { return "影院ID"; } else if (columnIndex == 1) { return "影院名称"; } else if (columnIndex == 2) { return "影院地址"; } else { return "出错"; } } @Override public Class<?> getColumnClass(int columnIndex) { return String.class; } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { return false; } @Override public Object getValueAt(int rowIndex, int columnIndex) { Cinema cinema = cinemaList.get(rowIndex); if (columnIndex == 0) { return cinema.getCinema_id(); } else if (columnIndex == 1) { return cinema.getCname(); } else if (columnIndex == 2) { return cinema.getAddress(); } else { return "出错"; } } @Override public void setValueAt(Object aValue, int rowIndex, int columnIndex) { // TODO Auto-generated method stub } @Override public void addTableModelListener(TableModelListener l) { // TODO Auto-generated method stub } @Override public void removeTableModelListener(TableModelListener l) { // TODO Auto-generated method stub } } private void refreshTable(List<Cinema> cinemaList) { infoTableModel = new CinemaInfoTableModel(cinemaList); table.setModel(infoTableModel); table.setRowHeight(20); }}
operHallView.java
package view; import java.awt.BorderLayout;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.util.ArrayList;import java.util.List; import javax.swing.BorderFactory;import javax.swing.JButton;import javax.swing.JInternalFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JTable;import javax.swing.JTextField;import javax.swing.event.TableModelListener;import javax.swing.table.TableModel; import entity.Cinema;import entity.Hall;import entity.Session;import service.CinemaService;import service.HallService;import serviceimpl.CinemaServiceImpl;import serviceimpl.HallServiceImpl;import serviceimpl.SessionServiceImpl;import util.Check; public class operHallView extends JInternalFrame { private JPanel pl_main = null; private JPanel pl_button = null; private JPanel pl_text = null; private JTable table = null; private JButton btn_add = null; private JButton btn_del = null; private JButton btn_query = null; private JButton btn_back = null; private JLabel lb_name = null; private JLabel lb_cid = null; private JLabel lb_capacity = null; private JTextField tf_name = null;// 添加输入的名称 private JTextField tf_cid = null;// 添加时输入的所属影院id private JTextField tf_capacity = null;// 添加输入的名称 private HallService hallbiz = null; private CinemaService cinemabiz = null; private SessionServiceImpl sessionbiz = null; private List<Hall> hallList = null; private HallInfoTableModel infoTableModel = null; public operHallView() { hallbiz = new HallServiceImpl(); cinemabiz = new CinemaServiceImpl();// 查询出所有的影院与cid进行匹配,显示影院名称 sessionbiz = new SessionServiceImpl(); init(); RegisterListener(); } private void init() { pl_main = new JPanel(new BorderLayout()); pl_button = new JPanel(new GridLayout(6, 1, 0, 40)); pl_text = new JPanel(new GridLayout(1, 6)); hallList = new ArrayList<Hall>(); table = new JTable(); // 绑定JTabel,呈现数据 refreshTable(hallList); btn_query = new JButton("查询所有场厅"); btn_add = new JButton("增添场厅"); btn_del = new JButton("删除场厅"); btn_del.setEnabled(false); btn_back = new JButton("退出窗口"); tf_name = new JTextField(8); tf_cid = new JTextField(8); tf_capacity = new JTextField(8); lb_name = new JLabel("场厅名称"); lb_cid = new JLabel("所属影院id"); lb_capacity = new JLabel("场厅容量"); pl_main.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(null, null), "查询信息")); pl_main.add(table.getTableHeader(), BorderLayout.PAGE_START); pl_main.add(table); this.add(pl_main, BorderLayout.CENTER); pl_button.add(new JLabel()); pl_button.add(btn_query); pl_button.add(btn_add); pl_button.add(btn_del); pl_button.add(new JLabel()); pl_button.add(btn_back); this.add(pl_button, BorderLayout.EAST); pl_text.add(lb_name); pl_text.add(tf_name); pl_text.add(lb_cid); pl_text.add(tf_cid); pl_text.add(lb_capacity); pl_text.add(tf_capacity); this.add(pl_text, BorderLayout.NORTH); this.setVisible(true); this.setTitle("场厅操作界面"); this.setSize(700, 530); this.setIconifiable(true); this.setClosable(true); this.setDefaultCloseOperation(DISPOSE_ON_CLOSE); } private void RegisterListener() { table.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { // 加入选中一行,删除按钮变为可用 if (table.getSelectedRow() != -1) { btn_del.setEnabled(true); } int row = table.getSelectedRow(); String name = table.getValueAt(row, 1).toString(); String cid = table.getValueAt(row, 2).toString(); String capacity = table.getValueAt(row, 3).toString(); tf_name.setText(name); tf_cid.setText(cid); tf_capacity.setText(capacity); } }); btn_add.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String name = tf_name.getText().trim(); String cid = tf_cid.getText().trim(); String capacity = tf_capacity.getText().trim(); if (name.equals("")) { JOptionPane.showMessageDialog(operHallView.this, "场厅名称不能为空!"); } else if (cid.equals("")) { JOptionPane.showMessageDialog(operHallView.this, "所属影院id不能为空!"); } else if (capacity.equals("")) { JOptionPane.showMessageDialog(operHallView.this, "场厅容量不能为空!"); } else if (!Check.isNumber(cid)) { JOptionPane.showMessageDialog(operHallView.this, "所属影院id只能为数字!"); } else if (!Check.isNumber(capacity)) { JOptionPane.showMessageDialog(operHallView.this, "场厅容量只能为数字!"); } else { int flag = JOptionPane.showConfirmDialog(operHallView.this, "是否添加此场厅?", "确认信息", JOptionPane.YES_NO_OPTION); if (flag == JOptionPane.YES_OPTION) { Hall hall = new Hall(name, new Integer(capacity), new Integer(cid)); boolean res = hallbiz.addHall(hall); hallList = hallbiz.queryAllHall(); refreshTable(hallList); if (res) { JOptionPane.showMessageDialog(operHallView.this, "添加成功!"); } else { JOptionPane.showMessageDialog(operHallView.this, "添加失败!"); } } } } }); btn_query.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 清除数据,防止累加 if (hallList != null) { hallList.clear(); } hallList = hallbiz.queryAllHall(); refreshTable(hallList); } }); btn_del.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { int row = table.getSelectedRow(); int id = (Integer) table.getValueAt(row, 0); int flag = JOptionPane.showConfirmDialog(operHallView.this, "确认是否删除此场厅?", "确认信息", JOptionPane.YES_NO_OPTION); if (flag == JOptionPane.YES_OPTION) { boolean res = hallbiz.delHall(id); if (res) { JOptionPane.showMessageDialog(operHallView.this, "删除成功!"); // 更新数据 List<Session> sessionList = new ArrayList<Session>(); sessionList = sessionbiz.queryAllSession(); // 删除某场厅后,对应的场次也进行删除 int sid = 0; for (int i = 0; i < sessionList.size(); i++) { if (id == sessionList.get(i).getHall_id()) { sid = sessionList.get(i).getSession_id(); sessionbiz.delSession(sid); } } hallList = hallbiz.queryAllHall(); refreshTable(hallList);// 更新显示数据 } else { JOptionPane.showMessageDialog(operHallView.this, "删除失败!"); } } } }); btn_back.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { operHallView.this.dispose(); } }); } private class HallInfoTableModel implements TableModel { public List<Hall> hallList = null; public HallInfoTableModel(List<Hall> hallList) { this.hallList = hallList; } // JTable显示的行数 @Override public int getRowCount() { return hallList.size(); } // JTable显示的列数 @Override public int getColumnCount() { return 4; } // JTable显示各行的名称 @Override public String getColumnName(int columnIndex) { if (columnIndex == 0) { return "场厅ID"; } else if (columnIndex == 1) { return "场厅名称"; } else if (columnIndex == 2) { return "所属影院"; } else if (columnIndex == 3) { return "场厅容量"; } else { return "出错"; } } // JTable列的数据类型 @Override public Class<?> getColumnClass(int columnIndex) { return String.class; } // 单元格是否可编辑 @Override public boolean isCellEditable(int rowIndex, int columnIndex) { return false; } // 每行单元格显示的数据 @Override public Object getValueAt(int rowIndex, int columnIndex) { Hall hall = hallList.get(rowIndex); Cinema cinema = null; if (columnIndex == 0) { return hall.getHall_id(); } else if (columnIndex == 1) { return hall.getHname(); } else if (columnIndex == 2) { List<Cinema> cinemaList = cinemabiz.queryAllCinema(); for (int i = 0; i < cinemaList.size(); i++) { if (hall.getCinema_id() == cinemaList.get(i).getCinema_id()) { cinema = cinemaList.get(i); break; } } return cinema.getCname(); // return hall.getCid(); } else if (columnIndex == 3) { return hall.getCapacity(); } else { return "出错"; } } @Override public void setValueAt(Object aValue, int rowIndex, int columnIndex) { // TODO Auto-generated method stub } @Override public void addTableModelListener(TableModelListener l) { // TODO Auto-generated method stub } @Override public void removeTableModelListener(TableModelListener l) { // TODO Auto-generated method stub } } private void refreshTable(List<Hall> hallList) { infoTableModel = new HallInfoTableModel(hallList); table.setModel(infoTableModel); table.setRowHeight(20); }}
读到这里,这篇“怎么用Eclipse+Java+Swing+Mysql实现电影购票系统”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。