一、awt的一些组件

Label l1=new Label("姓名:");  //标签
Label l2=new Label("密码:");
TextField tf1=new TextField(20); //文本框,数字是设置其文本框长度
TextField tf2=new TextField(20);
Button b1=new Button("确定"); //按钮
Button b2=new Button("取消");
Frame f1=new Frame("登录窗口"); //窗口

二、之后对awt的一些组件进行大小设置

f1.setSize(250, 300);        //设置窗口大小
f1.setLocation(400, 400);
f1.setLayout(null);
Panel p=new Panel();
p.setSize(250, 200);
p.setLocation(0, 100);
p.add(l1); //添加各种组件
p.add(tf1);
p.add(l2);
p.add(tf2);
p.add(b1);
p.add(b2);
f1.add(p);
f1.setVisible(true); //只有加上这一句各种组件才会显示出来

三、上面程序运行之后会出现窗口,但是你点击这个窗口的关闭按钮没有作用,只能强行终止程序。所以我们给窗口的关闭按钮添加事件。下面讲两种方式

3.1、你可以通过实现WindowListener接口来完成这个任务

 1 package temp;
2 import java.awt.Button;
3 import java.awt.Frame;
4 import java.awt.Label;
5 import java.awt.Panel;
6 import java.awt.TextField;
7 import java.awt.event.WindowEvent;
8 import java.awt.event.WindowListener;
9 import java.io.BufferedReader;
10 import java.io.File;
11 import java.io.FileReader;
12 import java.io.IOException;
13 import java.util.Scanner;
14
15 public class smile {
16 public static class DoEvent implements WindowListener{
17
18 @Override
19 public void windowActivated(WindowEvent arg0) {
20 // TODO Auto-generated method stub
21
22 }
23
24 @Override
25 public void windowClosed(WindowEvent arg0) {
26 // TODO Auto-generated method stub
27
28 }
29
30 @Override
31 public void windowClosing(WindowEvent arg0) {
32 // TODO Auto-generated method stub
33 System.out.println("窗口关闭");
34 System.exit(0);
35 }
36
37 @Override
38 public void windowDeactivated(WindowEvent arg0) {
39 // TODO Auto-generated method stub
40
41 }
42
43 @Override
44 public void windowDeiconified(WindowEvent arg0) {
45 // TODO Auto-generated method stub
46
47 }
48
49 @Override
50 public void windowIconified(WindowEvent arg0) {
51 // TODO Auto-generated method stub
52
53 }
54
55 @Override
56 public void windowOpened(WindowEvent arg0) {
57 // TODO Auto-generated method stub
58
59 }
60
61 }
62 public static void main(String[] args) {
63 // TODO Auto-generated method stub
64 Label l1=new Label("姓名:"); //标签
65 Label l2=new Label("密码:");
66 TextField tf1=new TextField(20); //文本框
67 TextField tf2=new TextField(20);
68 Button b1=new Button("确定"); //按钮
69 Button b2=new Button("取消");
70 Frame f1=new Frame("登录窗口"); //窗口
71
72 DoEvent do1 = new DoEvent();
73 f1.addWindowListener(do1);
74
75 f1.setSize(250, 300); //设置窗口大小
76 f1.setLocation(400, 400);
77 f1.setLayout(null);
78 Panel p=new Panel();
79 p.setSize(250, 200);
80 p.setLocation(0, 100);
81 p.add(l1); //添加各种组件
82 p.add(tf1);
83 p.add(l2);
84 p.add(tf2);
85 p.add(b1);
86 p.add(b2);
87 f1.add(p);
88 f1.setVisible(true); //只有加上这一句各种组件才会显示出来
89 }
90 }
91
92
93

上面代码有好多没有方法体的代码,我们可以点击Add unimplemented methods就可以让IDE帮你写出来

3.2、你也可以通过WindowAdapter这个类(实现于WindowListener这个接口),这样的话你就可以直接以匿名内部类方式直接new对象

package temp;
import java.awt.Button;
import java.awt.Frame;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner; public class smile { public static void main(String[] args) {
// TODO Auto-generated method stub
Label l1=new Label("姓名:"); //标签
Label l2=new Label("密码:");
TextField tf1=new TextField(20); //文本框
TextField tf2=new TextField(20);
Button b1=new Button("确定"); //按钮
Button b2=new Button("取消");
Frame f1=new Frame("登录窗口"); //窗口 f1.addWindowListener(new WindowAdapter(){ @Override
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
//super.windowClosing(e);
System.out.println("用户关闭窗口");
System.exit(0);
} //window已经实现了WindowListener的方法 }); f1.setSize(250, 300); //设置窗口大小
f1.setLocation(400, 400);
f1.setLayout(null);
Panel p=new Panel();
p.setSize(250, 200);
p.setLocation(0, 100);
p.add(l1); //添加各种组件
p.add(tf1);
p.add(l2);
p.add(tf2);
p.add(b1);
p.add(b2);
f1.add(p);
f1.setVisible(true); //只有加上这一句各种组件才会显示出来
}
}

或者你可以继承这个WindowAdapter这个适配器类来写

package temp;
import java.awt.Button;
import java.awt.Frame;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner; public class smile { public static void main(String[] args) {
class DoEvent2 extends WindowAdapter{ @Override
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
//super.windowClosing(e);
System.out.println("用户关闭窗口");
System.exit(0);
} //window已经实现了WindowListener的方法 }
// TODO Auto-generated method stub
Label l1=new Label("姓名:"); //标签
Label l2=new Label("密码:");
TextField tf1=new TextField(20); //文本框
TextField tf2=new TextField(20);
Button b1=new Button("确定"); //按钮
Button b2=new Button("取消");
Frame f1=new Frame("登录窗口"); //窗口 f1.addWindowListener(new DoEvent2()); f1.setSize(250, 300); //设置窗口大小
f1.setLocation(400, 400);
f1.setLayout(null);
Panel p=new Panel();
p.setSize(250, 200);
p.setLocation(0, 100);
p.add(l1); //添加各种组件
p.add(tf1);
p.add(l2);
p.add(tf2);
p.add(b1);
p.add(b2);
f1.add(p);
f1.setVisible(true); //只有加上这一句各种组件才会显示出来
}
}

总的来说WindowAdapter是一个类,而WindowListener这一个接口,我们实现接口必须实现其所有抽象方法,但是继承类就不需要写这么多

四、我们需要判断输入的登陆用户名和密码是否正确,我们设定用户名和密码来自文件,且它们在一行用空格分开

package temp;
import java.awt.Button;
import java.awt.Frame;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner; public class smile {
public static String name,password;
public static void main(String[] args) {
/*------------------------------------------*/
Scanner scan = new Scanner(System.in);
String file_road=scan.nextLine();
File file = new File(file_road);
BufferedReader reader = null;
StringBuffer sbf = new StringBuffer();
try {
reader = new BufferedReader(new FileReader(file));
String tempStr;
while ((tempStr = reader.readLine()) != null) {
sbf.append(tempStr);
}
reader.close();
String[] s = sbf.toString().split(" ");
name = s[0];
password=s[1];
System.out.println(name); //输出从文件里面读取的信息
System.out.println(password);
//return sbf.toString();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
/*------------------------------------------*/
}
}

运行的时候输入txt文件的路径,程序就会读取信息并输出

五、对按钮添加事件

5.1、当点击确定按钮就要判断用户名和密码是否正确,不正确就清空输入框,并跳出用户名密码错误提示框

5.2、当点击取消按钮,就清空输入框

实现ActionListener接口的actionPerformed方法就可以

  1 package temp;
2 import java.awt.Button;
3 import java.awt.Frame;
4 import java.awt.Label;
5 import java.awt.Panel;
6 import java.awt.TextField;
7 import java.awt.event.ActionEvent;
8 import java.awt.event.ActionListener;
9 import java.awt.event.WindowAdapter;
10 import java.awt.event.WindowEvent;
11 import java.awt.event.WindowListener;
12 import java.io.BufferedReader;
13 import java.io.File;
14 import java.io.FileReader;
15 import java.io.IOException;
16 import java.util.Scanner;
17
18 import javax.swing.JOptionPane;
19
20 public class smile {
21 public static String name,password;
22 public static void main(String[] args) {
23 class DoEvent2 extends WindowAdapter{
24
25 @Override
26 public void windowClosing(WindowEvent e) {
27 // TODO Auto-generated method stub
28 //super.windowClosing(e);
29 System.out.println("用户关闭窗口");
30 System.exit(0);
31 } //window已经实现了WindowListener的方法
32
33 }
34 /*------------------------------------------*/
35 Scanner scan = new Scanner(System.in);
36 String file_road=scan.nextLine();
37 File file = new File(file_road);
38 BufferedReader reader = null;
39 StringBuffer sbf = new StringBuffer();
40 try {
41 reader = new BufferedReader(new FileReader(file));
42 String tempStr;
43 while ((tempStr = reader.readLine()) != null) {
44 sbf.append(tempStr);
45 }
46 reader.close();
47 String[] s = sbf.toString().split(" ");
48 name = s[0];
49 password=s[1];
50 System.out.println(name); //输出从文件里面读取的信息
51 System.out.println(password);
52 //return sbf.toString();
53 } catch (IOException e) {
54 e.printStackTrace();
55 } finally {
56 if (reader != null) {
57 try {
58 reader.close();
59 } catch (IOException e1) {
60 e1.printStackTrace();
61 }
62 }
63 }
64 /*------------------------------------------*/
65
66
67
68 // TODO Auto-generated method stub
69 Label l1=new Label("姓名:"); //标签
70 Label l2=new Label("密码:");
71 TextField tf1=new TextField(20); //文本框
72 TextField tf2=new TextField(20);
73 Button b1=new Button("确定"); //按钮
74 Button b2=new Button("取消");
75 Frame f1=new Frame("登录窗口"); //窗口
76
77 /*-----------------------------------------*/
78 class Dobutton implements ActionListener{
79
80 @Override
81 public void actionPerformed(ActionEvent a) {
82 // TODO Auto-generated method stub
83 if(a.getSource()==b1)
84 {
85 if(name.equals(tf1.getText()) && password.equals(tf2.getText()))
86 {
87 System.out.println("登陆成功!");
88 System.out.println("用户名为:"+tf1.getText());
89 System.out.println("用户密码为:"+tf2.getText());
90 System.exit(0);
91 }else {
92 //System.out.println("用户名或密码错误!");
93 JOptionPane.showMessageDialog(null, "用户名或密码错误!", "Title",JOptionPane.ERROR_MESSAGE);
94 tf1.setText(" "); //设置文本框内容,必须要有一个空格
95 tf2.setText(" ");
96 }
97
98 }
99 else if(a.getSource()==b2){
100 tf1.setText(" ");
101 tf2.setText(" ");
102 }
103 }
104
105 }
106 b1.addActionListener(new Dobutton());
107 b2.addActionListener(new Dobutton());
108 /*-------------------------------------------*/
109
110 f1.addWindowListener(new DoEvent2());
111
112 f1.setSize(250, 300); //设置窗口大小
113 f1.setLocation(400, 400);
114 f1.setLayout(null);
115 Panel p=new Panel();
116 p.setSize(250, 200);
117 p.setLocation(0, 100);
118 p.add(l1); //添加各种组件
119 p.add(tf1);
120 p.add(l2);
121 p.add(tf2);
122 p.add(b1);
123 p.add(b2);
124 f1.add(p);
125 f1.setVisible(true); //只有加上这一句各种组件才会显示出来
126
127 }
128 }
129
130
131

上面程序运行后需要先输入保存着用户名和密码的文件位置

六、一些对话框

import javax.swing.ImageIcon;
import javax.swing.JOptionPane; public class qmh {
public static void main(String[] args) {
JOptionPane.showMessageDialog(null, "普通对话框");
JOptionPane.showMessageDialog(null, "警告提示框", "Title",JOptionPane.WARNING_MESSAGE);
JOptionPane.showMessageDialog(null, "错误提示框", "Title",JOptionPane.ERROR_MESSAGE);
JOptionPane.showMessageDialog(null, "最基本提示框", "Title",JOptionPane.PLAIN_MESSAGE);
int n = JOptionPane.showConfirmDialog(null, "你是否喜欢Java?", "Title",JOptionPane.YES_NO_OPTION);
JOptionPane.showInputDialog(null," Please input:\n","title",JOptionPane.PLAIN_MESSAGE); //下拉框Java代码
Object[] options ={ "苹果", "橘子", "香蕉" };
String s = (String) JOptionPane.showInputDialog(null,"请选择你喜欢吃的水果:\n", "水果", JOptionPane.PLAIN_MESSAGE, new ImageIcon("xx.png"), options, "xx"); //自定义提示对话框
Object[] optionss ={ "喜欢", "不喜欢" }; //自定义按钮上的文字
int m = JOptionPane.showOptionDialog(null, "你喜欢这篇博客吗?", "Title",JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, optionss, optionss[0]);
}
}

之前未整理的代码:

  1 import java.awt.Button;
2 import java.awt.FlowLayout;
3 import java.awt.Frame;
4 import java.awt.Label;
5 import java.awt.Panel;
6 import java.awt.TextField;
7 import java.awt.event.ActionEvent;
8 import java.awt.event.ActionListener;
9 import java.awt.event.WindowAdapter;
10 import java.awt.event.WindowEvent;
11 import java.awt.event.WindowListener;
12 import java.io.BufferedReader;
13 import java.io.File;
14 import java.io.FileReader;
15 import java.io.IOException;
16 import java.util.Scanner;
17
18 import javax.swing.JOptionPane;
19
20 public class qmh {
21 public static String name,password;
22 public static class DoEvent implements WindowListener{
23
24 @Override
25 public void windowActivated(WindowEvent arg0) {
26 // TODO Auto-generated method stub
27
28 }
29
30 @Override
31 public void windowClosed(WindowEvent arg0) {
32 // TODO Auto-generated method stub
33
34 }
35
36 @Override
37 public void windowClosing(WindowEvent arg0) {
38 // TODO Auto-generated method stub
39 System.out.println("窗口关闭");
40 System.exit(0);
41 }
42
43 @Override
44 public void windowDeactivated(WindowEvent arg0) {
45 // TODO Auto-generated method stub
46
47 }
48
49 @Override
50 public void windowDeiconified(WindowEvent arg0) {
51 // TODO Auto-generated method stub
52
53 }
54
55 @Override
56 public void windowIconified(WindowEvent arg0) {
57 // TODO Auto-generated method stub
58
59 }
60
61 @Override
62 public void windowOpened(WindowEvent arg0) {
63 // TODO Auto-generated method stub
64
65 }
66
67 }
68
69 public static void main(String[] args) {
70
71 class DoEvent2 extends WindowAdapter{
72
73 @Override
74 public void windowClosing(WindowEvent e) {
75 // TODO Auto-generated method stub
76 //super.windowClosing(e);
77 System.out.println("用户关闭窗口");
78 System.exit(0);
79 } //window已经实现了WindowListener的方法
80
81 }
82 // TODO Auto-generated method stub
83 //MVC V视图
84 //DoEvent do1 = new DoEvent(); //两个使用一个就可以
85 DoEvent2 do1 = new DoEvent2();
86
87
88 Label l1=new Label("姓名:"); //标签
89 Label l2=new Label("密码:");
90 TextField tf1=new TextField(20); //文本框
91 TextField tf2=new TextField(20);
92 Button b1=new Button("确定"); //按钮
93 Button b2=new Button("取消");
94 Frame f1=new Frame("登录窗口"); //窗口
95 /*-------------------------------------------------*/
96 Scanner scan = new Scanner(System.in);
97 String file_road=scan.nextLine();
98 File file = new File(file_road);
99 BufferedReader reader = null;
100 StringBuffer sbf = new StringBuffer();
101 try {
102 reader = new BufferedReader(new FileReader(file));
103 String tempStr;
104 while ((tempStr = reader.readLine()) != null) {
105 sbf.append(tempStr);
106 }
107 reader.close();
108 String[] s = sbf.toString().split(" ");
109 name = s[0];
110 password=s[1];
111 //return sbf.toString();
112 } catch (IOException e) {
113 e.printStackTrace();
114 } finally {
115 if (reader != null) {
116 try {
117 reader.close();
118 } catch (IOException e1) {
119 e1.printStackTrace();
120 }
121 }
122 }
123
124
125
126
127
128 /*-------------------------------------------------*/
129
130 /*-------------------------------------------------*/
131 //f1.addWindowListener(do1); //注册事件 ,这样注册和下面匿名类注册一样的结果
132
133 f1.addWindowListener(new WindowAdapter(){
134
135 @Override
136 public void windowClosing(WindowEvent e) {
137 // TODO Auto-generated method stub
138 //super.windowClosing(e);
139 System.out.println("用户关闭窗口");
140 System.exit(0);
141 } //window已经实现了WindowListener的方法
142
143 });
144 /*-------------------------------------------------*/
145
146
147 /*-------------------------------------------------*/
148 //因为tf1在main里面,所以定义类也需要在tf1变量定义的下面
149 class Dobutton implements ActionListener{
150
151 @Override
152 public void actionPerformed(ActionEvent a) {
153 // TODO Auto-generated method stub
154 if(a.getSource()==b1)
155 {
156 if(name.equals(tf1.getText()) && password.equals(tf2.getText()))
157 {
158 System.out.println("登陆成功!");
159 System.out.println("用户名为:"+tf1.getText());
160 System.out.println("用户密码为:"+tf2.getText());
161 System.exit(0);
162 }else {
163 //System.out.println("用户名或密码错误!");
164 JOptionPane.showMessageDialog(null, "用户名或密码错误!", "Title",JOptionPane.ERROR_MESSAGE);
165 tf1.setText(" "); //设置文本框内容,必须要有一个空格
166 tf2.setText(" ");
167 }
168
169 }
170 else if(a.getSource()==b2){
171 tf1.setText(" ");
172 tf2.setText(" ");
173 }
174 }
175
176 }
177 b1.addActionListener(new Dobutton());
178 b2.addActionListener(new Dobutton());
179 /*-------------------------------------------------*/
180
181 /*-------------------------------------------------*/
182 // b2.addActionListener(new ActionListener(){
183 //
184 // @Override
185 // public void actionPerformed(ActionEvent arg0) {
186 // // TODO Auto-generated method stub
187 // tf1.setText("qwe");
188 // tf2.setText("qwe");
189 // }
190 //
191 // });
192
193 /*-------------------------------------------------*/
194 f1.setSize(250, 300); //设置窗口大小
195 f1.setLocation(400, 400);
196 f1.setLayout(null);
197 Panel p=new Panel();
198 p.setSize(250, 200);
199 p.setLocation(0, 100);
200 p.add(l1); //添加各种组件
201 p.add(tf1);
202 p.add(l2);
203 p.add(tf2);
204 p.add(b1);
205 p.add(b2);
206 f1.add(p);
207 f1.setVisible(true); //只有加上这一句各种组件才会显示出来
208 }
209 }

Java的awt包的使用实例和Java的一些提示框的更多相关文章

  1. java.awt包提供了基本的java程序的GUI设计工具

    java.awt包提供了基本的java程序的GUI设计工具.主要包括下述三个概念: 组件--Component 容器--Container 布局管理器--LayoutManager package T ...

  2. 在Editplus中配置java的(带包)编译(javac)和运行(java)的方法

    配置的前提是电脑安装了JDK并且配置好了相关的环境变量(JAVA_HOME,path和classpath). 配置好后在命令行中输入javac和java验证是否配置成功: 如果出现上面的情况则说明配置 ...

  3. 在Editplus中配置java的(带包)编译(javac)和执行(java)的方法

    配置的前提是电脑安装了JDK而且配置好了相关的环境变量(JAVA_HOME,path和classpath). 配置好后在命令行中输入javac和java验证是否配置成功: 假设出现上面的情况则说明配置 ...

  4. java自定义jar包让jmeter使用---给java参数化

    上一篇文章中,提到怎么生成jar包让jmeter使用,这次我们来试试做参数,因为发现调包的时候其实更多还是参数化,那么开始改造吧 1.在httpclientpost这个类中替换参数,且打印参数 imp ...

  5. Java的常用包

    java.lang:  这个包下包含了Java语言的核心类,如String.Math.Sytem和Thread类等,使用这个包无需使用import语句导入,系统会自动导入这个包中的所有类. java. ...

  6. Java API 各个包的内容解释

    java.applet 提供创建 applet 所必需的类和 applet 用来与其 applet 上下文通信的类. java.awt 包含用于创建用户界面和绘制图形图像的所有类. java.awt. ...

  7. 深入探讨 java.lang.ref 包

    深入探讨 java.lang.ref 包 本文主要探讨了 java.lang.ref 包的使用方法,以及源码解读.并就该包在不同 JVM 上的表现进行了比较与分析.通过阅读本文,读者可以加深对 jav ...

  8. Java打jar包详解

    Java打jar包详解 一.Java打jar包的几种方式https://www.cnblogs.com/mq0036/p/8566427.html 二.MANIFEST.MF文件详解https://w ...

  9. Java、javax、org、sun、Java.util等常用包的区别、详解、实例

    Java.javax.org.sun包都是jdk提供的类包,且都是在rt.jar中.rt.jar是JAVA基础类库(java核心框架中很重要的包),包含lang在内的大部分功能,而且rt.jar默认就 ...

随机推荐

  1. OOP、封装、继承、多态,真的懂了吗?

    平时只要一提起来面向对象编程OOP的好处,随口就能说出来,不就是封装.继承.多态么,可他们的含义是什么呢,怎么体现,又有什么非用不可的好处啊.可能平时工作中天天在用OOP,仅仅是在用OOP语言,就是一 ...

  2. 【Java基础】数组和算法

    数组和算法 查找算法 线性查找 ... 二分查找 二分查找要求数据结构是有序的. package com.parzulpan.java.ch03; /** * @Author : parzulpan ...

  3. 天梯赛练习 L3-010 是否完全二叉搜索树 (30分) 数组建树模拟

    题目分析: 本题的要求是将n个数依次插入一个空的二叉搜索树(左大右小,且没有重复数字),最后需要输出其层次遍历以及判断是否是完全二叉搜索树,通过观察我们发现, 如果这个树是用数组建立的,那么最后输出的 ...

  4. 【MySQL】centos6中/etc/init.d/下没有mysqld启动文件,怎么办

    如果/etc/init.d/下面没有mysqld的话,service mysqld start也是不好使的,同样,chkconfig mysqld on也是不能用 解决办法: 将mysql的mysql ...

  5. LeetCode783. 二叉搜索树节点最小距离

    题目 和LeetCode530没什么区别 1 class Solution { 2 public: 3 vector<int>ans; 4 int minDiffInBST(TreeNod ...

  6. 分布式系统:xxl-job改造spring-cloud

    目录 改造原因 主要改造思路 调度中心 调度中心 执行器侧 总结 修改后的源码仓库地址:GitHub. : 改造原因 原有的xxl-job使用自己实现的http协议进行注册以及调度等,与目前框架中本身 ...

  7. 输入12V,输出12V的限流芯片

    随着手机充电电流的提升,和设备的多样化,USB限流芯片就随着需求的增加而越来越多,同时为了更好的保护电子设备,需要进行一路或者多路的负载进行限流. USB限流芯片,5V输入 1, PW1502,常使用 ...

  8. [CPP] STL 简介

    STL 即标准模板库(Standard Template Library),是 C++ 标准库的一部分,里面包含了一些模板化的通用的数据结构和算法.STL 基于模版的实现,因此能够支持自定义的数据结构 ...

  9. FPGA仿真的概念及语法特点

    以下是特权同学<FPGA设计+实战演练>书中的描述:      一个正规的设计需要花费在验证上的工作量,往往可能会占到整个开发流程的70%左右.验证通常分为仿真验证和板机验证.      ...

  10. Django 模型(数据库)-cmd下的操作

    Django 模型是与数据库相关的,与数据库相关的代码一般写在 models.py 中,Django 支持 sqlite3, MySQL, PostgreSQL等数据库,只需要在settings.py ...