AWT与Swing的关系
它的名字缩写是(Abstract Window Toolkit),是基于 Windows 的重量级组件。
AWT和Swing都是java中的包。
AWT(Abstract Window Toolkit):抽象窗口工具包,早期编写图形界面应用程序的包。
Swing :为解决 AWT 存在的问题而新开发的图形界面包。Swing是对AWT的改良和扩展。
AWT和Swing的实现原理不同:
AWT的图形函数与操作系统提供的图形函数有着一一对应的关系。也就是说,当我们利用 AWT构
件图形用户界面的时候,实际上是在利用操作系统的图形库。
不同的操作系统其图形库的功能可能不一样,在一个平台上存在的功能在另外一个平台上则可能不存在。
为了实现Java语言所宣称的”一次编译,到处运行”的概念,AWT不得不通过牺牲功能来实现平台无关
性。因此,AWT 的图形功能是各操作系统图形功能的“交集”。
因为AWT是依靠本地方法来实现功能的,所以AWT控件称为“重量级控件”。
而Swing ,不仅提供了AWT 的所有功能,还用纯粹的Java代码对AWT的功能进行了大幅度的扩充。
例如:并不是所有的操作系统都提供了对树形控件的支持, Swing则利用了AWT中所提供的基本作图方
法模拟了一个树形控件。
由于 Swing是用纯粹的Java代码来实现的,因此Swing控件在各平台通用。
因为Swing不使用本地方法,故Swing控件称为“轻量级控件”。
AWT和Swing之间的区别:
1)AWT 是基于本地方法的C/C++程序,其运行速度比较快;Swing是基于AWT的Java程序,其运行速度比较慢。
2)AWT的控件在不同的平台可能表现不同,而Swing在所有平台表现一致。
在实际应用中,应该使用AWT还是Swing取决于应用程序所部署的平台类型。例如:
1)对于一个嵌入式应用,目标平台的硬件资源往往非常有限,而应用程序的运行速度又是项目中至关重要的因素。在这种矛盾的情况下,简单而高效的AWT当然成了嵌入式Java的第一选择。
2)在普通的基于PC或者是工作站的标准Java应用中,硬件资源对应用程序所造成的限制往往不是项目中的关键因素。所以在标准版的Java中则提倡使用Swing, 也就是通过牺牲速度来实现应用程序的功能。
注意:在java中,AWT包的名称是java.awt,Swing包的名称是javax.swing。
在AMT组件中分为两大类,这两类的基类分别是Component和MenuComponent,其中,
MenuComponent是所有与菜单相关组件的父类,Component则是除菜单外其他AMT组件的父类,它表示
一个能以图形化方式显示出来,并可与用户交互的对象。
Component类通常被称为组件,根据Component的不同作用,可将其分为基本组件类和容器类。基本
组件类是按钮,文本框之类的,容器类则是通过Component的子类Container实例化的对象。
Container又分为Window和Pannel,Window又分为Frame和Dialog,Frame是窗体,Dialog是对
话框。Panel是中间容器。
下面是我一些总结出来的方法;
首先定义一个窗口,比如说是某个程序的登录界面把。我这里是简单版的QQ登录界面
一共三步
public class LoginFrame excends JFrame{
【步骤一】
//private ****** 你要添加的按钮。标签。文字。背景。。等
//private ******
//private ******
//private ******
【步骤二】
public LoginFrame(){
//在默认构造里面定义窗口标题、窗口大小
//设置窗口关闭时的动作
//接下来开始把上面你定义东西一一写在这里。不过方便起见,一般我们把这个步骤单独写在一个 方法中,然后在这里调用。
//initComponents() //这里先调用方法,然后往下写方法内容
}
【步骤三】
//以下部分是方法
private void initComponents(){
/**定义步骤大体如下;
* 1.获得内容面板对象(在最上面你定义的那些东西)
* 2.将内容面板的布局设置定义为 NULL.(这里不设置null的话可能会有默认值。谁知道 *******它把内容面板默认定义成多少呢)
* 3.获得contentPane对象,并转换成JPanel类型,方便操作。
* 4.为每个控件设置边界和背景颜色等等
*/
}
【最后在这里测试运行】
public static void main(String[] ages){
//先实例化一下
Loginframe abc = new Loginframe();
abc.setVisible(true); //这句话应该是运存的意思
}
}
以下是简易代码
public class Loginframe extends JFrame {//extends是继承的意思.JFRAME是新版本
//定义了一些标签,按钮,单选和复选框,文本框(明文和密文)
private JCheckBox abc = new JCheckBox("记住密码"); //定义一个复选框
private JCheckBox adb = new JCheckBox("自动登录"); //定义一个复选框
private JLabel lblQQID = new JLabel("QQ号码"); //定义一个标签
private JLabel lblQQPwd = new JLabel("QQ密码"); //定义一个标签
//标签明文文本框
private JTextField txtQQID = new JTextField(); //登录QQ文本框
//标签密文文本框
private JPasswordField txtPwd = new JPasswordField(); //QQ密码文本框
//按钮
private JButton btnLogin = new JButton("登录"); //定义了一个按钮
private JComboBox jcb = new JComboBox(); //这里定义了一个下拉菜单
private JLabel lblRegNewId = new JLabel("<u>申请号码</u>");
private JLabel lblForgetPwd = new JLabel("忘记密码");
/**
*是标签的用法
*是网页标签。可以指向一个网页
*<u>*****</u> 是让中间的文字有下划线功能
*//LEFT、RIGHT、CENTER、LEADING 、TRAILING等参数表示label/jlabel中内容对齐方式:*****左对齐、右对齐、居中、靠顶对齐、靠下对齐
**/
//默认构造
public Loginframe(){
setDefaultCloseOperation(EXIT_ON_CLOSE);
setTitle("QQ用户登录"); //窗口标题
setSize(300, 600); //窗口的大小
initComponents(); //调用自定义方法初始窗体组件
}
public void initComponents(){
JPanel contentPane = (JPanel)getContentPane();
contentPane.setLayout(null);
lblQQID.setBounds(45, 140, 150, 20);
lblQQPwd.setBounds(45, 180, 150, 20);
txtQQID.setBounds(45,160,150,20);
txtPwd.setBounds(45,200,150,20);
image.setBounds(0, 0, 300, 130);
image2.setBounds(0,0,300,600);
abc.setBounds(45,230,80,20);
abc.setOpaque(false);
/**
*setOpaque(true) 不透明
*setOpaque(flase) 透明
**/
adb.setBounds(45,255,80,20);
adb.setOpaque(false);
btnLogin.setBounds(85,333,80,20);
lblRegNewId.setBounds(45, 390, 80, 20);
lblForgetPwd.setBounds(45, 410, 80, 20);
jcb.addItem("");
jcb.addItem("我在线上");
jcb.addItem("隐身");
jcb.addItem("离开");
jcb.addItem("切勿打扰");
jcb.setSelectedItem("请勿打扰");
/**
*SelectedItem是默认已经存在的对象.比如jcb.setSelectedItem("忙碌");这样是不行
*的,因为上面没有定义(add)
**/
jcb.setBounds(85,355,80,20);
//设置标签文本的颜色
lblRegNewId.setForeground(Color.RED);
lblForgetPwd.setForeground(Color.RED);
/**
*setForeground是设置前景颜色的意思
*格式是setFoeeground(Color fg);
**/
//设置鼠标经过时为手的形状 Cursor: 光标对象
lblRegNewId.setCursor(new Cursor(Cursor.HAND_CURSOR));
lblForgetPwd.setCursor(new Cursor(Cursor.HAND_CURSOR));
/**
*Cursor.HEAD_CURSOR //鼠标经过显示手
*Cursor.DEFAULT_CURSOR //鼠标经过显示箭头
**/
//添加部分
contentPane.add(lblQQID);
contentPane.add(lblQQPwd);
contentPane.add(txtQQID);
contentPane.add(txtPwd);
contentPane.add(abc);
contentPane.add(adb);
contentPane.add(btnLogin);
contentPane.add(jcb);
contentPane.add(lblRegNewId);
contentPane.add(lblForgetPwd);
}
public static void main(String[] ages){
Loginframe LoginFrame = new Loginframe();
LoginFrame.setVisible(true) //使可视化组建f(如窗口、面板等)可见
}
}
以下是运行结果

如果有哪些地方写的不规范、有BUG、没有缩进等不好的地方,请多指教我这个菜鸟