Java初学小项目--基于awt库,swing库的可视化电影管理系统(二)

前言

我的上一篇博客已经介绍了一个基于awt库和swing库的可视化界面的实现,对于Java小白来说,看完那篇博客做出一个自己满意的可视化界面应该没有多大问题,所以,这次就直接进入第二阶段,监听器的设置。

话不多说,直接进入正题,希望能够帮助初学Java的你。

监听器

什么是监听器?我举个例子,就比如说我们设置了一个按钮,那你把按钮添加到窗口里面后对它进行点击,但是为什么点击之后没有任何反应呢?是不是程序有问题?其实不是,如果你创建好按钮之后点击就有效果的话,那恭喜你,你见鬼了。。。那怎样才能让我们创建的按钮点击之后有“动作”呢?这时候就需要监听器了。所以监听器很好理解,监听器就是让你设置的按钮按下去之后,执行你想执行的动作,所以我们创建好按钮之后,想要按钮实现相应功能,就需要添加监听器让按钮执行该功能。

添加监听器

上一篇博客做出的初步界面
这是上一篇博客做出的初始界面,我们的需求是实现电影的查询,筛选,增加,删除,修改,还有一个取消功能,所以创建了六个JButton对象分别进行实现。所以要想实现不同的功能,我们就需要对每个按钮设置监听器,并且在监听器里面实现不同的功能。

下面我只举一个例子,讲解筛选影片监听器的功能实现,因为筛选影片这个功能是最复杂的,所以弄清楚的这个功能,其他的按钮监听器的实现也会轻而易举地实现

先上一段代码:

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

jb6 = new JButton("筛选影片");
jb6.addActionListener(new ActionListener() {
    
      //添加点击事件监听器
            public void actionPerformed(ActionEvent e) {
    
    
            	choosemovie(jf);
            }
        });

这里代码不完整,等下我会给出完整代码,这里至少示例解释一些,我们创建好JButton对象之后,就直接用addActionListener()对按钮进行添加监听器操作,添加点击事件监听器的用法就和上面一样,用法很简单,如果想详细理解监听器的使用,可以参考官方文档,这里不多赘述。而且使用监听器需要导入awt的两个类,如上面代码所示。监听器添加之后,我们就可以直接在监听器里面编辑我们想要实现的功能了,可以自定义一个实现功能的方法或者类,然后在监听器里面调用就可以了。

下面给出实现筛选影片功能的监听器功能完整代码:

import java.awt.Dimension;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.WindowConstants;


public class choose {
    
    

	public static void main(String[] args) {
    
    
		// TODO Auto-generated method stub
		final JFrame  jf = new JFrame();
		JPanel jp1 ,jp2 ,jp3,jp4,jp5;//创建5个面板对象
		JButton jb1,jb2,jb3,jb4,jb5,jb6;//创建6个按钮
		jb1 = new JButton("查询");			//分别对按钮署名
		jb6 = new JButton("筛选影片");
		jb2 = new JButton("新增电影");
		jb3 = new JButton("删除某部电影");
		jb4 = new JButton("修改某部电影信息");
		jb5 = new JButton("取消");

		jb6 = new JButton("筛选影片");
		jb6.addActionListener(new ActionListener() {
    
    
            public void actionPerformed(ActionEvent e) {
    
    
            	choosemovie(jf);
            }
        });
		jp1 = new JPanel();
		jp2 = new JPanel();
		jp3 = new JPanel();
		jp4 = new JPanel();
		jp5 = new JPanel();
		
		jf.setLayout(new GridLayout(5,1));/*按照网格发布对JPanel进行排版,这个语句非常重要,不能丢,
		不然做出了只有一个组件*/
		
		//加入各个组件
		jp1.add(jb1);
		jp1.add(jb6);
		jp2.add(jb2);
		jp3.add(jb3);
		jp4.add(jb4);
		jp5.add(jb5);
		jf.add(jp1);
		jf.add(jp2);
		jf.add(jp3);
		jf.add(jp4);
		jf.add(jp5);
		jf.setTitle("豆瓣电影top100管理系统");//对窗口进行命名
		jf.setSize(450,250);//设置窗口大小
		jf.setLocation(550, 300);;//设置窗口弹出位置
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗口关闭影响
		jf.setVisible(true);//窗口可视化
	}
	public choose() {
    
    
		
	}
	public void showmovie(Frame owner,ResultSet set) throws SQLException {
    
    
	    // 创建一个模态对话框
	final JFrame newJFrame = new JFrame();
	newJFrame.setLocationRelativeTo(owner);
	//newJFrame.setResizable(false);
	String m1 = null;
	ArrayList<String> a =new ArrayList<String>();
	while(set.next()) {
    
    
		m1=set.getString(1);
		a.add(m1);
	}

	JLabel me1 = new JLabel("符合条件的影片名称(请查询获取影片详细信息):");
	//JLabel me11 = new JLabel(m1);
	final JList<String> list = new JList<String>();
	list.setPreferredSize(new Dimension(150, 5000));
	int size=a.size();  
    String[] array=new String[size];  
    for(int i=0;i<a.size();i++){
    
      
        array[i]=(String)a.get(i);  
    }
	list.setListData(array);
	JScrollPane scrollPane = new JScrollPane(list);
	JPanel panel = new JPanel();
	
	JButton jb2 = new JButton("取消");
	jb2.addActionListener(new ActionListener() {
    
    
	public void actionPerformed(ActionEvent e) {
    
    
	    // 关闭对话框
		newJFrame.dispose();
	}
	});

	newJFrame.setLayout(new GridLayout(1,3));
	panel.add(me1);
	panel.add(scrollPane);
	newJFrame.add(panel);
	newJFrame.setTitle("您筛选的影片名称");
	newJFrame.setSize(350,250);
	newJFrame.setLocation(550, 300);
	newJFrame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
	newJFrame.setVisible(true);
	}
	public static void choosemovie(Frame owner) {
    
    
	    // 创建一个模态对话框
	final JFrame newJFrame = new JFrame();
	newJFrame.setLocationRelativeTo(owner);
	//newJFrame.setResizable(false);
	JLabel me1 = new JLabel("影片类型:");
	JLabel me2 = new JLabel("年代:");
	JLabel me3 = new JLabel("地区:");
	JLabel me4 = new JLabel("评分:");

	String[] list1 = new String[]{
    
    "全部","动作", "科幻", "剧情", "喜剧","动画","惊悚","爱情","战争","犯罪","奇幻","冒险","古装","历史","传记","悬疑","家庭","音乐","运动","灾难","歌舞","西部","情色","儿童"};
	String[] list2 = new String[]{
    
    "全部","2010", "2000", "1990", "1980","更早"};
	String[] list3 = new String[]{
    
    "全部", "中国", "美国", "日本","韩国","意大利","法国","其他国家"};
	String[] list4 = new String[]{
    
    "全部","9.0", "8.0"};
	final JComboBox comboBox1 = new JComboBox(list1);
	final JComboBox comboBox2 = new JComboBox(list2);
	final JComboBox comboBox3 = new JComboBox(list3);
	final JComboBox comboBox4 = new JComboBox(list4);

	JPanel panel = new JPanel();
	JPanel pane2 = new JPanel();
	//JPanel pane3 = new JPanel();

	JButton jb1=new JButton("确认");
	jb1.addActionListener(new ActionListener() {
    
    
	public void actionPerformed(ActionEvent e) {
    
    
	    // 关闭对话框
		Mysql my =new Mysql();
		Statement st =my.getStatement();
		String a =(String) comboBox1.getSelectedItem();
		String b =(String) comboBox2.getSelectedItem();
		String c =(String) comboBox3.getSelectedItem();
		String d =(String) comboBox4.getSelectedItem();
		String str1;
		String str2;
		String str3;
		String str4;
		if(a=="全部") {
    
    
			str1="";
		}
		else {
    
    
			str1= "类型 like'%"+a+"%'";
		}
		
		if(b=="全部") {
    
    
			str2="";
		}
		else if(b=="更早") {
    
    
			if(str1=="") {
    
    
			str2="年份<1980";
		}
			else {
    
    
				str2=" and "+"年份<1980";
			}
		}
		else {
    
    
			if(str1=="") {
    
    
				str2="年份>"+comboBox2.getSelectedItem();
			}
				else {
    
    
					str2=" and "+"年份>"+comboBox2.getSelectedItem();
				}
		}
		
		if(c=="全部") {
    
    
			str3="";
		}
		else if(c=="其他国家"){
    
    
			if(str1==""&&str2=="")
			{
    
    
			str3="国家 not in ('中国', '美国', '日本','韩国','意大利','法国')";
		}
			else {
    
    
				str3=" and "+"国家 not in ('中国', '美国', '日本','韩国','意大利','法国')";
			}
		}
		else {
    
    
			if(str1==""&&str2=="") {
    
    
			str3="国家='"+c+"'";
		}
			else {
    
    
				str3=" and "+"国家='"+c+"'";
			}
		}
		
		if(d=="全部") {
    
    
			str4="";
		}
		else {
    
    
			if(str1==""&&str2==""&&str3=="") {
    
    
			str4="评分>"+d;
		}
			else {
    
    
				str4=" and "+"评分>"+d;
			}
		}
		String SEL;
		if(a=="全部"&&b=="全部"&&c=="全部"&&d=="全部") {
    
    
			SEL ="select 影片名称 from 豆瓣top100";
		}
		else {
    
    
		SEL ="select 影片名称 from 豆瓣top100 where "+str1+str2+str3+str4;
		//ResultSet set;
		}
		try {
    
    
			ResultSet set = st.executeQuery(SEL);
			choose ch =new choose();
			ch.showmovie(newJFrame,set);
		} catch (SQLException e1) {
    
    
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		
	}
	});
	JButton jb2 = new JButton("取消");
	jb2.addActionListener(new ActionListener() {
    
    
	public void actionPerformed(ActionEvent e) {
    
    
	    // 关闭对话框
		newJFrame.dispose();
	}
	});

	newJFrame.setLayout(new GridLayout(2,1));
	panel.add(me1);
	panel.add(comboBox1);
	panel.add(me2);
	panel.add(comboBox2);
	panel.add(me3);
	panel.add(comboBox3);
	panel.add(me4);
	panel.add(comboBox4);
	pane2.add(jb1);
	pane2.add(jb2);
	//pane3.add(jb2);
	newJFrame.add(panel);
	newJFrame.add(pane2);
	//newJFrame.add(pane3);

	newJFrame.setTitle("筛选影片");
	newJFrame.setSize(500,150);
	newJFrame.setLocation(550, 300);
	newJFrame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
	newJFrame.setVisible(true);
	}
	}


上面给出完整代码,有几个地方需要解释一下,对于showmovie()这个函数还用不上,因为还有一部分关于MySQL数据库的内容我还没有讲,我会在第三篇博客里面讲解MySQL数据库的连接等操作,这里先不管。还有就是监听器里面对于弹出界面的选择,我选择的是弹出普通JFrame窗口,你也可以根据自己的需要选择不同弹出对象,比如JDialog、JOptionPane对话框等等。最终对于筛选影片监听器添加功能后,可得如下图效果
筛选影片功能示例
用过豆瓣电影的朋友应该就比较了解它的筛选功能,这里我也是模仿,相当于一个小型豆瓣筛选电影系统。而实现列表框下拉条也是非常简单的,大家可以参考官方文档进行功能查看。

后话

上面代码有些关于MySQL数据库的操作或者SQL语句查询看不懂的地方,看不懂没关系,因为我讲会在第三篇博客中讲解关于MySQL数据库的连接等操作,所以这里就先不讲,请大家阅读关于该项目的第三篇博客。
希望能对初学Java的朋友有帮助,也希望大家多评论留言,我也会积极回应,谢谢大家!

猜你喜欢

转载自blog.csdn.net/qq_44694861/article/details/106157576