您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“怎么用Eclipse+Java+Swing+Mysql實現電影購票系統”,內容詳細,步驟清晰,細節處理妥當,希望這篇“怎么用Eclipse+Java+Swing+Mysql實現電影購票系統”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
開發工具:Eclipse2021
JDK版本:jdk1.8
Mysql版本:8.0.13
Java+Swing+Mysql
注冊系統,登錄系統;
1.歡迎頁:修改用戶姓名和密碼;
2.碟片排行榜:影片的詳細信息;
3.購票信息:已購買車票的信息;
4.場次信息:電影場次的詳細信息;
5.充值:充值余額;
6.搜索電影:搜索電影的詳細信息;
1.對用戶進行操作:用戶信息的查詢、刪除;
2.對影院進行操作:影院信息的查詢、刪除、增加;
3.對場廳進行操作:場廳信息的查詢、刪除、增加;
4.對場次進行操作:場次信息的查詢、刪除、增加;
5.對電影進行操作:電影信息的查詢、刪除、增加;
/* Navicat Premium Data Transfer Source Server : MySQL Source Server Type : MySQL Source Server Version : 80013 Source Host : 127.0.0.1:3306 Source Schema : swing_movie_house Target Server Type : MySQL Target Server Version : 80013 File Encoding : 65001 Date: 21/09/2021 12:33:55 */ 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;
7.用戶-充值余額
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(); } }); } }
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(); } }
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); /* * if(res) { //更新數據 hallList = hallbiz.queryAllHall(); int hid = 0; for(int i = * 0; i < hallList.size(); i++) { if(id == hallList.get(i).getCid()) { hid = * hallList.get(i).getId(); hallbiz.delHall(hid); } } sessionList = * sessionbiz.queryAllSession(); for(int i = 0; i < sessionList.size(); i++) { * if(hid == sessionList.get(i).getHid()) { * sessionbiz.delSession(sessionList.get(i).getId()); } } } */ 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); } }
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實現電影購票系統”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。