一。开发架构
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 }