tonglin0325的个人主页

Java数据库——处理大数据对象

处理大数据对象

CLOB中可以存储海量文字

BLOB中可以存储海量二进制数据

如果程序中要想处理这样的大对象操作,则必须使用PreparedStatement完成,所有的内容要通过IO流的方式从大文本字段中保存和读取。

全文 >>

MySQL学习笔记——存储过程

MySQL存储过程是一个事先编译好并存储在数据库中的一组 SQL 语句集合,类似于程序中的子程序或函数。

存储过程可以接受参数、执行一系列 SQL 语句,并返回结果。存储过程可以大大简化复杂的查询和数据处理操作,并提高数据库性能和安全性。

假设有3张表,歌曲表song,歌手表singer,歌曲和歌手的关联表song_singer

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 歌曲
create table `default`.song(
id int PRIMARY KEY auto_increment,
name varchar(256) UNIQUE
) engine=InnoDB default charset=utf8;

# 歌手
create table `default`.singer(
id int PRIMARY KEY auto_increment,
name varchar(256) UNIQUE
) engine=InnoDB default charset=utf8;

# 关联表
create table `default`.song_singer(
id int PRIMARY KEY auto_increment,
song_id int,
singer_id int,
UNIQUE KEY unique_index_name (song_id, singer_id)
) engine=InnoDB default charset=utf8;

现在要写一个存储过程,同时添加歌曲,歌手,歌曲和歌手的关联表数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
CREATE PROCEDURE add_song_and_singer(
IN song_name VARCHAR(256) CHARACTER SET utf8 COLLATE utf8_general_ci,
IN singer_name VARCHAR(256) CHARACTER SET utf8 COLLATE utf8_general_ci
)
BEGIN

DECLARE result_code INTEGER DEFAULT 0; -- 定义返回结果并赋初值0
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET result_code=1; -- 在执行过程中出任何异常设置result_code为1
DECLARE CONTINUE HANDLER FOR NOT FOUND SET result_code = 2; -- 如果表中没有下一条数据则置为2

START TRANSACTION;

# 写入歌曲
INSERT INTO song (name) VALUES (song_name);
SET @new_song_id = LAST_INSERT_ID();

# 写入歌手
INSERT INTO singer (name) VALUES (singer_name);
SET @new_singer_id = LAST_INSERT_ID();

# 写入关联表
INSERT INTO song_singer (song_id, singer_id) VALUES (@new_song_id, @new_singer_id);

-- 可以根据不同的业务逻辑错误返回不同的result_code,这里只定义了1和0
IF result_code = 1 THEN
# 回滚
ROLLBACK;
select 'transaction roll back';
ELSE
# 提交事务
COMMIT;
END IF;

END;

调用存储过程

1
2
call add_song('发如雪', '周杰伦');

如果过程中任何SQL失败,则输出

1
2
transaction roll back

参考:MySQL 存储过程

MySQL存储过程中实现回滚

全文 >>

Play学习笔记——Hello World

参考

1
2
https://github.com/lupingqiu/metadata-scala-play

在project文件夹下添加

build.properties

1
2
sbt.version=1.2.1

plugins.sbt

1
2
3
4
5
6
7
8
9
// The Typesafe repository
resolvers += "Typesafe repository" at "https://repo.typesafe.com/typesafe/releases/"

// Typesafe snapshots
resolvers += "Typesafe Snapshots" at "https://repo.typesafe.com/typesafe/snapshots/"

// Use the Play sbt plugin for Play projects
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.6.12")

运行

1
2
3
sbt
run -Dhttp.port=8080

SpringBoot学习笔记——swagger-ui

swagger-ui用于给API添加文档,还支持API的请求调用,可以降低前后端联调的沟通成本

1.依赖

1
2
3
4
5
6
7
8
9
10
11
12
<!-- swagger2 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.8.0</version>
</dependency>

2.配置swagger,注意修改basePackage成实际的包名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.request.async.DeferredResult;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
public class SwaggerConfig {

@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.genericModelSubstitutes(DeferredResult.class)
.useDefaultResponseMessages(false)
.forCodeGeneration(true)
.apiInfo(apiInfo())
.pathMapping("/") // base,最终调用接口后会和paths拼接在一起
.select()
.apis(RequestHandlerSelectors.basePackage("com.example.demo")) // 过滤的接口
.paths(PathSelectors.any())
.build();
}

private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("api文档") // 标题
.description("xxxx") // 描述
.termsOfServiceUrl("https://xxx.xxx.xxx")
.version("1.0")
.build();
}

}

3.给controller添加

全文 >>

Java——组件:标签组件,文本组件,菜单组件,表格组件,按钮组件

 

 

使用一个标签

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Point;

import javax.swing.JFrame;
import javax.swing.JLabel;

public class JFrame_demo {

public static void main(String[] args) {
// TODO 自动生成的方法存根

JFrame f = new JFrame("Swing窗口"); //实例化窗体对象
JLabel lab = new JLabel("Label",JLabel.CENTER); //实例化对象,使用剧中对齐
f.add(lab); //向容器中加入组建
Dimension dim = new Dimension(); //实例化Dimension对象

dim.setSize(230,80); //设置大小
f.setSize(dim); //设置组件大小
f.setBackground(Color.WHITE);
Point point = new Point(300,200); //设置现实的坐标点
f.setLocation(point);
f.setVisible(true);
}

}

 

 

更改JLabel的文本样式

 

设置标签的显示字体、大小、背景颜色

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Point;

import javax.swing.JFrame;
import javax.swing.JLabel;

public class JFrame_demo {

public static void main(String[] args) {
// TODO 自动生成的方法存根

JFrame f = new JFrame("Swing窗口"); //实例化窗体对象
JLabel lab = new JLabel("Label",JLabel.CENTER); //实例化对象,使用剧中对齐
Font fnt = new Font("Serief",Font.ITALIC+Font.BOLD,28);
lab.setFont(fnt); //设置标签的显示字体
lab.setForeground(Color.RED); //设置标签的文字颜色
f.add(lab); //向容器中加入组建
Dimension dim = new Dimension(); //实例化Dimension对象

dim.setSize(230,80); //设置大小
f.setSize(dim); //设置组件大小
f.setBackground(Color.WHITE);
Point point = new Point(300,200); //设置现实的坐标点
f.setLocation(point);
f.setVisible(true);
}

}

 

 

在JLabel中设置图片

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Point;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class JFrame_demo {

public static void main(String[] args) {
// TODO 自动生成的方法存根

JFrame f = new JFrame("Swing窗口"); //实例化窗体对象
String picPath = "/home/common/software/database/photo.jpg";
Icon icon = new ImageIcon(picPath);

JLabel lab = new JLabel(icon,JLabel.CENTER); //实例化对象,使用剧中对齐
Font fnt = new Font("Serief",Font.ITALIC+Font.BOLD,28);
lab.setFont(fnt); //设置标签的显示字体
lab.setForeground(Color.RED); //设置标签的文字颜色
f.add(lab); //向容器中加入组建
Dimension dim = new Dimension(); //实例化Dimension对象

dim.setSize(230,80); //设置大小
f.setSize(dim); //设置组件大小
f.setBackground(Color.WHITE);
Point point = new Point(300,200); //设置现实的坐标点
f.setLocation(point);
f.setVisible(true);

}

}

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class JText_demo {

public static void main(String[] args) {
// TODO 自动生成的方法存根
JFrame f = new JFrame("Swing窗口"); //实例化窗体对象
JTextField name = new JTextField(30); //定义文本框,并指定长度
JTextField name_1 = new JTextField("指定内容",10);//定义文本框,并指定内容和长度
JLabel nameLab = new JLabel("输入用户姓名:"); // 定义标签
JLabel name_1Lab = new JLabel("不可编辑文本:"); // 定义标签
name_1.setEnabled(false); //此文本框不可编辑
nameLab.setBounds(10,10,100,20); //设置组件位置和大小
name_1Lab.setBounds(10,40,100,20); //设置组件位置和大小
name.setBounds(110,10,100,20); //设置组件位置和大小
name_1.setBounds(110,40,100,20); //设置组件位置和大小
name.setColumns(10); //设置长度,但是此时不起作用
name_1.setColumns(10); //设置长度,但是此时不起作用
// f.setLayout(new GridLayout(2,2)); //设置容器的布局管理器
f.setLayout(null); //设置容器的布局管理器
f.add(nameLab); //向容器中增加组件
f.add(name); //向容器中增加组件
f.add(name_1Lab); //向容器中增加组件
f.add(name_1); //向容器中增加组件
f.setSize(440, 320); //设置窗体
f.setLocation(300,200); //设置显示位置
f.setVisible(true);
}

}

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

public class JPassword_demo {

public static void main(String[] args) {
// TODO 自动生成的方法存根
JFrame f = new JFrame("Swing窗口"); //实例化窗体对象
JPasswordField jpf1 = new JPasswordField(); //定义秘文框
JPasswordField jpf2 = new JPasswordField(); //定义秘文框
jpf2.setEchoChar('#'); //设置回显字符
JLabel nameLab = new JLabel("默认的显示:"); // 定义标签
JLabel name_1Lab = new JLabel("修改后的显示:"); // 定义标签

nameLab.setBounds(10,10,100,20); //设置组件位置和大小
name_1Lab.setBounds(10,40,100,20); //设置组件位置和大小
jpf1.setBounds(110,10,100,20); //设置组件位置和大小
jpf2.setBounds(110,40,100,20); //设置组件位置和大小

f.setLayout(null); //设置容器的布局管理器
f.add(nameLab); //向容器中增加组件
f.add(jpf1); //向容器中增加组件
f.add(name_1Lab); //向容器中增加组件
f.add(jpf2); //向容器中增加组件
f.setSize(440, 320); //设置窗体
f.setLocation(300,200); //设置显示位置
f.setVisible(true);
}

}

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class JTextArea_demo {

public static void main(String[] args) {
// TODO 自动生成的方法存根
JFrame f = new JFrame("Swing窗口"); //实例化窗体对象
JTextArea name = new JTextArea("1231231231231312312",3,10); //定义文本框
name.setLineWrap(true); //如果内容过长,自动换行
JLabel nameLab = new JLabel("多行文本域"); // 定义标签

nameLab.setBounds(10,10,120,20); //设置组件位置和大小
name.setBounds(130,10,150,100); //设置组件位置和大小
f.setLayout(null); //设置容器的布局管理器
f.add(nameLab); //向容器中增加组件
f.add(name); //向容器中增加组件
f.setSize(440, 320); //设置窗体
f.setLocation(300,200); //设置显示位置
f.setVisible(true);
}

}

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import java.awt.Container;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.ImageIcon;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.KeyStroke;

public class Jmenu_demo {

public static void main(String[] args) {
// TODO 自动生成的方法存根
JFrame frame = new JFrame("窗体"); //定义窗体
JTextArea text = new JTextArea(); //定义文本域
text.setEditable(true); //定义文本组件可编辑
frame.getContentPane().add(new JScrollPane(text)); //在面板中加入文本框及滚动条

JMenu menuFile = new JMenu("文件"); //定义JMenu组件
//定义显示图标
menuFile.setIcon(new ImageIcon("/home/common/software/database/123.jpg"));
JMenuBar menuBar = new JMenuBar(); //定义JMenu组件
//定义显示图标
JMenuItem newMenu = new JMenuItem("新建",new ImageIcon("/home/common/software/database/123.jpg"));
//定义显示图标
JMenuItem openMenu = new JMenuItem("打开",new ImageIcon("/home/common/software/database/123.jpg"));

newMenu.setMnemonic('N');
openMenu.setMnemonic('O');

newMenu.setAccelerator(KeyStroke.getKeyStroke('N',java.awt.Event.CTRL_MASK));
openMenu.setAccelerator(KeyStroke.getKeyStroke('O',java.awt.Event.CTRL_MASK));

menuFile.add(newMenu); //加入菜单项
menuFile.addSeparator(); //加入分割线
menuFile.add(openMenu); //加入菜单项

menuBar.add(menuFile); //加入JMenu
frame.addWindowListener(new WindowAdapter(){ //加入动作监听
public void windowClosing(WindowEvent e) { //窗口关闭时触发,按下关闭按钮
// TODO 自动生成的方法存根
System.out.println("windowClosing-->窗口关闭");
System.exit(1);
}
});
frame.setJMenuBar(menuBar); //在窗体中加入JMenuBar组件
frame.setVisible(true);
frame.setLocation(300,200); //设置显示位置
frame.setSize(300, 180);

}

}

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.ImageIcon;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.KeyStroke;

public class Jmenu_demo {

public static void main(String[] args) {
// TODO 自动生成的方法存根
JFrame frame = new JFrame("窗体"); //定义窗体
JTextArea text = new JTextArea(); //定义文本域
text.setEditable(true); //定义文本组件可编辑
frame.getContentPane().add(new JScrollPane(text)); //在面板中加入文本框及滚动条

JMenu menuFile = new JMenu("文件"); //定义JMenu组件
//定义显示图标
menuFile.setIcon(new ImageIcon("/home/common/software/database/123.jpg"));
JMenuBar menuBar = new JMenuBar(); //定义JMenu组件
//定义显示图标
JMenuItem newMenu = new JMenuItem("新建",new ImageIcon("/home/common/software/database/123.jpg"));
//定义显示图标
JMenuItem openMenu = new JMenuItem("打开",new ImageIcon("/home/common/software/database/123.jpg"));

newMenu.setMnemonic('N');
openMenu.setMnemonic('O');

newMenu.setAccelerator(KeyStroke.getKeyStroke('N',java.awt.Event.CTRL_MASK));
openMenu.setAccelerator(KeyStroke.getKeyStroke('O',java.awt.Event.CTRL_MASK));

menuFile.add(newMenu); //加入菜单项
menuFile.addSeparator(); //加入分割线
menuFile.add(openMenu); //加入菜单项

menuBar.add(menuFile); //加入JMenu

newMenu.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
text.append("选择了newMenu");
}
});

openMenu.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
text.append("选择了openMenu");
}
});

frame.addWindowListener(new WindowAdapter(){ //加入动作监听
public void windowClosing(WindowEvent e) { //窗口关闭时触发,按下关闭按钮
// TODO 自动生成的方法存根
System.out.println("windowClosing-->窗口关闭");
System.exit(1);
}
});

frame.setJMenuBar(menuBar); //在窗体中加入JMenuBar组件

frame.setVisible(true);
frame.setLocation(300,200); //设置显示位置
frame.setSize(300, 180);

}

}

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;

public class JTable_demo {

public static void main(String[] args) {
// TODO 自动生成的方法存根
JFrame frame = new JFrame("窗体"); //定义窗体
String[] titles = {"姓名","年龄","性别","成绩","是否及格"};
Object[][] userInfo = {{"张三",22,"男",99,true},{"张三",22,"男",99,true}
,{"张三",22,"男",99,true},{"张三",22,"男",99,true},{"张三",22,"男",99,true}};

JTable table = new JTable(userInfo,titles);

JScrollPane scr = new JScrollPane(table);

frame.add(scr);
frame.setSize(330,100);
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter(){ //加入事件监听
public void windowClosing(WindowEvent arg0) { //窗口关闭时触发,按下关闭按钮
// TODO 自动生成的方法存根
System.out.println("windowClosing-->窗口关闭");
System.exit(1);
}
});
}

}

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Point;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class JFrame_demo {

public static void main(String[] args) {
// TODO 自动生成的方法存根

JFrame f = new JFrame("Swing窗口"); //实例化窗体对象
String picPath = "/home/common/software/database/photo.jpg";
Icon icon = new ImageIcon(picPath);

JButton but = new JButton(icon);
f.add(but); //向容器中加入组建
Dimension dim = new Dimension(); //实例化Dimension对象

dim.setSize(230,80); //设置大小
f.setSize(dim); //设置组件大小
f.setBackground(Color.WHITE);
Point point = new Point(300,200); //设置现实的坐标点
f.setLocation(point);
f.setVisible(true);

}

}

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JToggleButton;

public class JToggleButton_demo {

public static void main(String[] args) {
// TODO 自动生成的方法存根
JFrame f = new JFrame("Swing窗口"); //实例化窗体对象
JToggleButton but1 = new JToggleButton("已选中",true);
JToggleButton but2 = new JToggleButton("未选中");
JToggleButton but3 = new JToggleButton("按我");
f.setLayout(new GridLayout(3,1)); //设置排版样式
f.add(but1);
f.add(but2);
f.add(but3);
f.setSize(440, 320); //设置窗体
f.setLocation(300,200); //设置显示位置
f.setVisible(true);
}

}

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;

class MyRadio{
private JFrame frame = new JFrame("窗体");
private Container cont = frame.getContentPane();
private JRadioButton jrb1 = new JRadioButton("单选1");
private JRadioButton jrb2 = new JRadioButton("单选2");
private JRadioButton jrb3 = new JRadioButton("单选3");
private JPanel pan = new JPanel();
public MyRadio(){
//定义一个面板的边框显示条
pan.setBorder(BorderFactory.createTitledBorder("请选择按钮"));
pan.setLayout(new GridLayout(1,3));
ButtonGroup group = new ButtonGroup();
group.add(this.jrb1);
group.add(this.jrb2);
group.add(this.jrb3);
pan.add(this.jrb1);
pan.add(this.jrb2);
pan.add(this.jrb3);
cont.add(pan);
this.frame.setSize(330,80);
this.frame.setVisible(true);
this.frame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) { //窗口关闭时触发,按下关闭按钮
// TODO 自动生成的方法存根
System.out.println("windowClosing-->窗口关闭");
System.exit(1);
}
});
}
}


//主类
//Function : JRadioButton_demo
public class JRadioButton_demo {

public static void main(String[] args) {
// TODO 自动生成的方法存根
new MyRadio();
}

}

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;

class MyRadio implements ItemListener{
private JFrame frame = new JFrame("窗体");
private Container cont = frame.getContentPane();
private JRadioButton jrb1 = new JRadioButton("单选1");
private JRadioButton jrb2 = new JRadioButton("单选2");
private JRadioButton jrb3 = new JRadioButton("单选3");
private JPanel pan = new JPanel();
public MyRadio(){
//定义一个面板的边框显示条
pan.setBorder(BorderFactory.createTitledBorder("请选择按钮"));
pan.setLayout(new GridLayout(1,3));
ButtonGroup group = new ButtonGroup();
group.add(this.jrb1);
group.add(this.jrb2);
group.add(this.jrb3);
pan.add(this.jrb1);
pan.add(this.jrb2);
pan.add(this.jrb3);

jrb1.addItemListener(this); //加入事件监听
jrb2.addItemListener(this); //加入事件监听
jrb3.addItemListener(this); //加入事件监听

cont.add(pan);
this.frame.setSize(330,80);
this.frame.setVisible(true);
this.frame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) { //窗口关闭时触发,按下关闭按钮
// TODO 自动生成的方法存根
System.out.println("windowClosing-->窗口关闭");
System.exit(1);
}
});
}
@Override
public void itemStateChanged(ItemEvent e) {
// TODO 自动生成的方法存根
if(e.getSource() == jrb1){
System.out.println("jrb1");
}else if(e.getSource() == jrb2){
System.out.println("jrb2");
}else{
System.out.println("jrb3");
}
}
}


//主类
//Function : JRadioButton_demo
public class JRadioButton_demo {

public static void main(String[] args) {
// TODO 自动生成的方法存根
new MyRadio();
}

}