引入:
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);
}
布局
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();
}
}