Java Swing组件以及事件处理

引入:

import java.awt.*;
import javax.swing.*

窗口

自定义类继承JFrame

public class Mywindow extends JFrame{
}

构造函数

MyWindow(){
  //设置窗口样式
  initWindow();
  //创建组件,对象
  makeObj();
  //把组件加入到窗口
  add();
  //设置可见性
  setVisible(true);
  //关闭窗口的操作
  this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
}

窗口样式

void initWindow(){
	//窗口布局
	setLayout(new FlowLayout());
	//窗口标题
	setTitle("Test");
	//窗口尺寸
	setBounds(100,100,500,500);
}

组件

按钮JButton

JButton button = new JButton("确定");
this.add(button);

标签JLabel

JLabel label = new JLabel("男");
this.add(label);

文本框JTextField

//指定宽度
JTextField field = new JTextField(10);
this.add(field);

文本栏JTextArea

//指定长宽
JTextArea area = new JTextArea(5,20);
this.add(area);
public void makeObj()//创建对象
	{
		label = new JLabel("姓名");
		field = new JTextField(10);
		area = new JTextArea("这是一个JTextArea",5,20);
		button = new JButton("确定"); 
		box = new JCheckBox("勾选");//
		
		radio1 = new JRadioButton("男");
		radio2 = new JRadioButton("女");
		group = new ButtonGroup();
		group.add(radio1);
		group.add(radio2);
		
		String []s = new String[] {"红色","绿色","蓝色","橙色","粉色"};
		list = new JList(s);
		//下拉框
		combox = new JComboBox();
		combox.addItem("电脑");
		combox.addItem("平板");
		
		//菜单
		menubar = new JMenuBar();
		menu  = new JMenu("选项");
		submenu = new JMenu("关机或重启");
		item1 = new JMenuItem("注销");
		item2 = new JMenuItem("关机");
		item3 = new JMenuItem("重启");
	}
	public void add()//加入窗口等位置
	{
		add(label);
		add(field);
		add(area);
		add(button);
		add(box);
		add(radio1);
		add(radio2);
		add(list);
		add(combox);
		
		menu.add(item1);
		menu.add(submenu);
		submenu.add(item2);
		submenu.add(item3);
		menubar.add(menu);
		setJMenuBar(menubar);
	}

布局

Java布局

JPanel panel = new JPanel();
//4*4网格布局
panel.setLayout(new GridLayout(4,4));

事件处理

1.事件源:(小孩)

文本框,按钮,菜单项,密码框,单选按钮

JButton child = new JButton("确定");

2.监视器:(警察)

Police police = new Police();

3.事件源注册监视器(给每个小孩安排一个警察)

child.addActionListener(police);

4.监视器实现方法(如果小孩做出动作(回车…),警察就会做出动作)

1.需要继承ActionListener类
2.需要实现actionPerformed方法

void actionPerformed(ActionEvent e)
public class Police extends ActionListener{
	public void actionPerformed(ActionEvent e){
		String s = e.getActionCommand();//获取组件内容
		System.out.println(s);
	}
}

示例

基础计算器

在这里插入图片描述
主函数

package Exer2;


public class Main {
	public static void main(String []args)
	{
		MyWindow win2 = new MyWindow();
	}
}

窗口

package Exer2;

import java.awt.*;
import javax.swing.*;

public class MyWindow extends JFrame{
	JPanel panelnorth,panelcen;
	JButton [] button;
	JTextArea field;
	PoliceListen police;
	public MyWindow()
	{
		initWin();//窗口样式
		make();
		add();
		link();
		setVisible(true);
		this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
	}
	public void initWin()//窗口样式
	{
		setTitle("Caculator");
		setBounds(100,100,300,300);
	}
	public void make()
	{
		String []s = new String[] {"1","2","3","+","4","5","6","-","7","8","9","*","c","0","=","/"};
		panelcen = new JPanel();
		panelcen.setLayout(new GridLayout(4,4));
		
		field = new JTextArea(1,30);
		field.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);//光标右边
		
		button = new JButton[16];
		for(int i = 0;i<16;i++)
		{
			button[i] = new JButton(s[i]);
			panelcen.add(button[i]);
		}
		
		police = new PoliceListen();//创建监视器

	}
	public void add()
	{
		add(field,BorderLayout.NORTH);
		add(panelcen,BorderLayout.CENTER);

	}
	public void link()
	{
		police.setTextField(field);//把面板传进接口方法,便于在接口方法实现内容打印
		for(int i = 0;i<16;i++)
		{
			//每个按钮为事件源
			button[i].addActionListener(police);//每个按钮添加监视器(注册监视器)
		}
	}
}

事件处理

package Exer2;

import javax.swing.*;
import java.awt.event.*;//实现这些事件处理必须要有这个包event

public class PoliceListen implements MyListener{
	JTextArea text;
	public void setTextField(JTextArea text)
	{
		this.text = text;
	}
	public void actionPerformed(ActionEvent e)
	{
		String s = e.getActionCommand();//获取组件内容
		System.out.println(s);
		text.append(s);//添加内容
	}
}

package Exer2;
import javax.swing.*;
import java.awt.event.*;//实现这些事件处理必须要有这个包event

public interface MyListener extends ActionListener{
	public void setTextField(JTextArea text);
}

汽车信息查询

(swing+数据库)

在这里插入图片描述
在这里插入图片描述
主函数

package Exer5;

public class Test {
	public static void main(String []args) {
		MyWindow win = new MyWindow();
	}
}
//设置布局
//事件处

界面和事件处理

package Exer5;

import java.awt.*;
import javax.swing.*;

public class MyWindow extends JFrame{
	JPanel panel;
	
	JLabel []label;
	
	JTextArea []area;
	
	JButton but1,but2;
	MyWindow(){
		//初始
		initWindow();
		//创建对象
		makeObj();
		//添加组件
		add();
		link();
		setVisible(true);
		this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
	}
	public void initWindow() {
		setLayout(new BorderLayout());
		setTitle("汽车信息查询");
		setBounds(100,100,500,300);
	}
	public void makeObj() {
		panel = new JPanel();
		panel.setLayout(new GridLayout(5,2,30,30));
		
		label = new JLabel[4];
		area = new JTextArea[4];
		
		String[] s = {"商品名称:","价格:","出厂日期:"};
		label[0] = new JLabel("商品编号:");
		area[0] = new JTextArea(1,10);
		
		but1 = new JButton("查询");
		but2 = new JButton("清除界面字符");
		
		
		for(int i = 1;i < 4;i++) {
			label[i] = new JLabel(s[i-1]);
			area[i] = new JTextArea(1,10);
		}
	}
	public void add() {
		panel.add(label[0]);
		panel.add(area[0]);
		panel.add(but1);
		panel.add(but2);
		for(int i = 1;i < 4;i ++) {
			panel.add(label[i]);
			panel.add(area[i]);
		}
		
//		add(new JButton(""),BorderLayout.NORTH);
		add(panel,BorderLayout.CENTER);
	}
	public void link() {
		//创建监视器
		Police police = new Police();
		PoliceClear clear = new PoliceClear();
		police.setArea(area);
		clear.setArea(area);
		//事件源注册监视器
		but1.addActionListener(police);
		but2.addActionListener(clear);
	}
}

事件处理部分

package Exer5;

import javax.swing.*;
import java.awt.event.*;
public interface MyListener extends ActionListener{
	public void setArea(JTextArea []area);
}

package Exer5;

import javax.swing.JTextArea;
import javax.swing.*;
import java.awt.event.*;
import java.sql.ResultSet;

public class Police implements MyListener{
	JTextArea []area;
	public void setArea(JTextArea []area) {
		this.area = area;
	}
	public void actionPerformed(ActionEvent e) {
		//得到数据
		String uid = area[0].getText();
		//查询
		System.out.println(uid);
		//结果输出
		try {
			Find f = new Find(uid);
			ResultSet rs = f.Select();//返回查询结果
				if(rs.next()) {
					for(int i = 1;i < 4;i++) {
						area[i].setText(rs.getString(i));
					}
				}
			else {
				for(int i = 1;i < 4;i++) {
					area[i].setText("Not Found");
				}
			}
		} catch (Exception e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
	}
}

package Exer5;

import javax.swing.JTextArea;
import javax.swing.*;
import java.awt.event.*;
import java.sql.ResultSet;

public class PoliceClear implements MyListener{
	JTextArea []area;
	public void setArea(JTextArea []area) {
		this.area = area;
	}
	public void actionPerformed(ActionEvent e) {	
				for(int i = 0;i < 4;i++) {
					area[i].setText("");
				}
			}
}

数据库查找

package Exer5;

import java.sql.*;
public class Find {
	static Connection con;
	static PreparedStatement pst;
	//初始化相关
		final static String Url = "jdbc:mysql://127.0.0.1:3306/test"
				+ "?useSSL=false&serverTimezone=UTC" ;
		final static String User = "root";
		final static String password = "1234";
		
		//sql语句
		String uid;
		String Sql = "select name,price,date from product where ProductId=?";
		
		Find(String uid) throws Exception{
			this.uid = uid;
			System.out.println(uid);
			init();
		}
		void init() throws Exception{
			//加载驱动
			Class.forName("com.mysql.cj.jdbc.Driver");
			//建立连接
			con = DriverManager.getConnection(Url,User,password);
		}
		ResultSet Select() throws Exception{
			//
			pst = con.prepareStatement(Sql);
			pst.setString(1, uid);
			//执行查询
			ResultSet rs = pst.executeQuery();
			return rs;
		}
}

日历

在这里插入图片描述
主函数

package Exer4;


public class Main {
	public static void main(String []args)
	{
		MyWindow win2 = new MyWindow();
	}
}

界面

package Exer4;


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

import javax.swing.*;

public class MyWindow extends JFrame implements ActionListener{
	JButton butl,butr;
	JPanel panelnor,panelcen,panelsou;
	JLabel []label;
	JLabel south;
	Calen cal;
	String []date;
	public MyWindow()
	{
		initWin();//窗口样式
		make();
		add();
		link();
		setVisible(true);
		this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
	}
	public void initWin()//窗口样式
	{
//		setLayout(new BorderLayout());
		setTitle("Caculator");
		setBounds(100,100,300,300);
	}
	void make()
	{
		cal = new Calen();
		date  = new String[49];//初始化日历数组
		for(int i = 0;i<49;i++)
			date[i] = new String("");
		showCal();//构建日历数组
		String s[] = new String[] {"日","一","二","三","四","五","六"};
		//创建按钮,标签,text,
		butl = new JButton("上月");
		butr = new JButton("下月");
		panelnor = new JPanel();
		panelnor.setLayout(new FlowLayout());
		panelnor.add(butl);
		panelnor.add(butr);
		//panel
		panelcen = new JPanel();
		panelcen.setLayout(new GridLayout(7,7));
		panelcen.setBackground(Color.white);
		label = new JLabel[49];
		for(int i = 0;i<7;i++)
		{
			label[i] = new JLabel(s[i],JLabel.CENTER);
			panelcen.add(label[i]);
		}
		for(int i = 7;i<49;i++)
		{
			label[i] = new JLabel(date[i-7],JLabel.CENTER);
			panelcen.add(label[i]);
		}
		panelsou = new JPanel();
		panelsou.setLayout(new FlowLayout());
		south = new JLabel("日历:"+cal.year+"年"+cal.month+"月");
		panelsou.add(south);
	}
	void add()
	{
		add(panelnor,BorderLayout.NORTH);
		add(panelcen,BorderLayout.CENTER);
		add(panelsou,BorderLayout.SOUTH);
	}
	void link()
	{
		//按钮
		butl.addActionListener(this);
		butr.addActionListener(this);
	}
	void showCal()//根据cal的dayofmonth和weekday获得日历数组
	{
//		System.out.println("dd");
		int j = 0;
		for(int i = 0;i<cal.weekday-1;i++)
		{
			date[j++] = "";
		}
		for(int i = 1;i<=cal.dayofmonth;i++)
		{
			date[j++] = i+"";
//			System.out.println(i);
		}
		while(j<49)
			date[j++] = "";
//		System.out.println(cal.dayofmonth);
//		for(int i = 0;i<49;i++)
//			System.out.println(date[i]);
	}
	public void actionPerformed(ActionEvent e)
	{
		JComponent component = (JComponent)e.getSource();
		//点击上下,修改当前cal的月,年,用cal 的up,down函数
		if(component == butl)
		{
			cal.down();
			showCal();
		}
		else
		{
			cal.up();
			showCal();
		}
		for(int i = 7;i<49;i++)
		{
			label[i].setText(date[i-7]);
		}
		south.setText("日历:"+cal.year+"年"+(cal.month+1)+"月");
	}
}

日历处理

package Exer4;

import java.util.Calendar;
public class Calen {
	Calendar c;
	int year,month,day;
	int weekday,dayofmonth;
	Calen()
	{
		c = Calendar.getInstance();
		year = c.get(Calendar.YEAR);
		month = c.get(Calendar.MONTH);
		day = c.get(Calendar.DAY_OF_MONTH);
		init();
	}
	void init()
	{
		DayofWeek();
		DayofMonth();
	}
	//本月第一天是星期几
	void DayofWeek()
	{
		c.set(year, month,1);
		weekday = c.get(Calendar.DAY_OF_WEEK);
	}
	//本月有多少天
	void DayofMonth()
	{
		int a[] = new int[] {31,28,31,30,31,30,31,31,30,31,30,31};
		if(isLeapYear())
			a[1]++;
		dayofmonth = a[month];
	}
	//计算平年闰年
	boolean isLeapYear()
	{
		if((year%4==0&&year%100!=0)||(year%400==0))
			return true;
		return false;
	}
	//修改
	void up()
	{
		if(month == 11)
		{
			month = 0;
			year++;
		}
		else
		{
			month ++;
		}
		init();
	}
	void down()
	{
		if(month == 0)
		{
			month = 11;
			year--;
		}
		else
		{
			month --;
		}
		init();
	}
}

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值