一。开发架构
1.最外层是一个jframe的框架
2.可以在框架中添加任意组件
3.组件分为两大类:
a。容器类型:可以继续在该容器中添加其他组件。例如:jpanel 面板,可以多个面板添加到同一个框架中
b。具体的组件:按钮,文本框,标体,文本域,可以添加到容器类型中
4.事件:是触发事件完成一定的功能
常用事件有:
a.按钮的监听事件:ActionListener 监听按钮的点击事件
b.鼠标监听事件:MouseListener 监听鼠标的按下,弹起,鼠标的移动
c.键盘监听事件:KeyListener 监听键盘的点击,弹起事件
5.在swing组件如何加载图片 见 PictureDEmo
a.通过jlable标签来加载
b.jpanel中的画笔对象来画出来
6.在jframe来自定义画板,画自己想要的内容。步骤
a.创建一个自定义的面板类,继承jpanel
b.初始化面饭的相关显示属性
c.把该面板加入到jframe中
d.在面板类中重写paintComponent(Graphics g)此方法,这个方法里面就是我们画画的地方
作业1.登录窗口
如果用户输入的是用户名“root”,密码“admin” 则登录成功,显示另外一个窗体并显示登录XXXX成功
如果输入有误弹出密码错误提示
作业2.通过按键左右键的点击来切换图片的显示 总共五张图片 如果到了末尾再点调回第一张
作业3:做一个计算器,完成通用功能
二。例子
计算器+按钮监听实例:
1 package com.demo1116;
2
3 import java.awt.Font;
4 import java.awt.event.ActionEvent;
5 import java.awt.event.ActionListener;
6 import java.awt.event.KeyAdapter;
7 import java.awt.event.KeyEvent;
8 import java.awt.event.KeyListener;
9
10 import javax.swing.JButton;
11 import javax.swing.JFrame;
12 import javax.swing.JLabel;
13 import javax.swing.JTextField;
14 import javax.swing.plaf.basic.BasicSplitPaneUI.KeyboardUpLeftHandler;
15
16 public class MyFrame extends JFrame{
17 double num1;//存放第一个数字
18 double num2;//存放第二个数字
19 String type;//记录当前的运算符号
20 boolean isSecond = false;//记录是否是第二个数字的开始
21 //按钮
22 JButton jb1;
23 JButton jb2;
24 JButton jb3;
25
26 JButton jb_point;
27 JButton jb_add;
28 JButton jb_result;
29 //标体
30 JLabel jl1;
31 //文本框
32 JTextField jtf_username;
33 public MyFrame() {
34 //设置窗口的关闭模式 关闭窗口立即终止程序
35 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
36 setSize(500, 500);//设置框架的大小
37 setLayout(null);//设置布局管理器为null,则表示使用手动布局
38 setLocationRelativeTo(null);
39 setTitle("计算器");
40 //添加其他组件
41 jb1 = new JButton("1");
42 jb1.setBounds(20, 100, 50, 50);
43 jb1.addActionListener(new MyButtonActionListener("1"));//给按钮添加事件监听器
44 this.add(jb1);//添加组件到容器中
45
46 jb2 = new JButton("2");
47 jb2.setBounds(80, 100, 50, 50);
48 jb2.addActionListener(new MyButtonActionListener("2"));//给按钮添加事件监听器
49 this.add(jb2);//添加组件到容器中
50
51 jb3 = new JButton("3");
52 jb3.setBounds(150, 100, 50, 50);
53 jb3.addActionListener(new MyButtonActionListener("3"));//给按钮添加事件监听器
54 this.add(jb3);//添加组件到容器中
55
56 jb_point = new JButton(".");
57 jb_point.setBounds(150, 180, 50, 50);
58 jb_point.addActionListener(new MyButtonActionListener("."));//给按钮添加事件监听器
59 this.add(jb_point);//添加组件到容器中
60
61 jb_add = new JButton("+");
62 jb_add.setBounds(150, 250, 50, 50);
63 jb_add.addActionListener(new MyButtonActionListener("+"));//给按钮添加事件监听器
64 this.add(jb_add);//添加组件到容器中
65
66 jb_result = new JButton("=");
67 jb_result.setBounds(150, 320, 50, 50);
68 jb_result.addActionListener(new MyButtonActionListener("="));//给按钮添加事件监听器
69 this.add(jb_result);//添加组件到容器中
70
71 // jl1 = new JLabel("用户名:");
72 // jl1.setBounds(20, 100, 150, 50);
73 // jl1.setFont(new Font("", Font.BOLD, 20));//给组件设置字体样式
74 // this.add(jl1);
75
76 jtf_username = new JTextField("0");
77 jtf_username.setBounds(20, 20, 420, 50);
78 jtf_username.setEnabled(false);//不可编辑状态
79 jtf_username.setFont(new Font("", Font.BOLD, 20));
80 //将文本框的输入右对齐
81 jtf_username.setHorizontalAlignment(JTextField.RIGHT);
82 this.add(jtf_username);
83
84 setVisible(true);//设置框架是否可见
85 }
86
87 class MyButtonActionListener implements ActionListener{
88 String num;
89 MyButtonActionListener(String num){
90 this.num = num;
91 }
92 @Override
93 public void actionPerformed(ActionEvent e) {
94 switch(num){
95 case "1":
96 case "2":
97 case "3":
98 case "4":
99 case "5":
100 case "6":
101 case "7":
102 case "8":
103 case "9":
104 if(jtf_username.getText().equals("0")){
105 jtf_username.setText("");
106 }
107 if(isSecond){
108 jtf_username.setText("");
109 }
110 jtf_username.setText(jtf_username.getText()+num);
111 isSecond = false;
112 break;
113 case ".":
114 if(jtf_username.getText().indexOf(".")==-1){
115 jtf_username.setText(jtf_username.getText()+num);
116 }
117 break;
118 case "+":
119 num1 = Double.valueOf(jtf_username.getText());//记录第一个数
120 isSecond = true;//接下来要输入第二个数字
121 type = "+";//记录运算符号
122 break;
123 case "=":
124 num2 = Double.valueOf(jtf_username.getText());//记录第二个数
125 switch(type){
126 case "+":
127 jtf_username.setText(num1+num2+"");
128 }
129 break;
130 }
131
132
133 }
134 }
135
136 public static void main(String[] args) {
137 new MyFrame();
138 }
139 }
键盘监听实例:
1 package com.demo1116;
2
3 import java.awt.event.KeyAdapter;
4 import java.awt.event.KeyEvent;
5 import java.awt.event.KeyListener;
6
7 import javax.swing.JFrame;
8 import javax.swing.JLabel;
9
10 public class KeyActionDemo extends JFrame{
11 JLabel jl;
12
13 public void init(){//初始化界面
14 this.setSize(500, 500);
15 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
16 this.setLocationRelativeTo(null);//设置窗口初始出现的位置为屏幕中央
17
18 jl = new JLabel();
19 jl.setBounds(10, 10, 30, 30);
20 this.add(jl);
21
22 this.addKeyListener(new MyKeyListener());
23
24 this.setVisible(true);
25 }
26
27 public KeyActionDemo() {
28 init();
29 }
30
31 public static void main(String[] args) {
32 new KeyActionDemo();
33 }
34
35 /**
36 * 键盘的监听适配器,该类实现类keylistener接口,所以继承该类等于实现了接口,优势是我们可以选择性的重写里面的方法
37 * @author allen
38 *
39 */
40 class MyKeyListener extends KeyAdapter{
41 @Override
42 public void keyPressed(KeyEvent e) {
43 jl.setText(e.getKeyCode()+"");
44 }
45 }
46 }
加载图片实例:
1 package com.demo1116;
2
3
4 import java.awt.Graphics;
5 import java.awt.image.BufferedImage;
6 import java.io.File;
7 import java.io.IOException;
8
9 import javax.imageio.ImageIO;
10 import javax.swing.ImageIcon;
11 import javax.swing.JFrame;
12 /**
13 * 加载图片案例
14 * @author allen
15 */
16 import javax.swing.JLabel;
17 import javax.swing.JPanel;
18 import javax.swing.border.Border;
19 public class PictureDemo extends JFrame{
20 JLabel jl_pic;
21 private void init() {
22 this.setSize(500, 400);// 设置窗体大小,宽和高 单位是像素
23 this.setResizable(false);// 设置窗体大小固定
24 this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);// 设置窗体关闭时主线程自动关闭
25 this.setLocationRelativeTo(null);// 设置窗体出现的位置在显示器正中
26 this.setLayout(null);// 不使用布局管理器,启用手动布局
27
28 //第一种方式显示图片
29 // jl_pic = new JLabel(new ImageIcon("img/1.jpg"));
30 // jl_pic.setBounds(0, 0, 500, 400);
31 // this.add(jl_pic);
32 //第二种方式显示图片
33 MyPanel mp = new MyPanel();
34 this.add(mp);
35 this.setVisible(true);
36 }
37
38 public PictureDemo() {
39 init();
40 }
41
42 public static void main(String[] args) {
43 new PictureDemo();
44 }
45 }
46 /**
47 * 自定义面板 在面板中可以完成图片的制作
48 * @author allen
49 */
50 class MyPanel extends JPanel{
51 public MyPanel() {
52 this.setBounds(0, 0, 500, 400);
53 this.setVisible(true);
54 }
55
56 @Override
57 protected void paintComponent(Graphics g) {
58 // TODO Auto-generated method stub
59 try {
60 //将图片文件读取到java缓存中,备用
61 BufferedImage bi = ImageIO.read(new File("img/1.jpg"));
62 //用画笔工具讲图片画到面板中去
63 g.drawImage(bi, 0, 0, this);
64 } catch (IOException e) {
65 // TODO Auto-generated catch block
66 e.printStackTrace();
67 }
68 }
69 }