Java AWT编程笔记-基本元素
来源:互联网 发布:迅联食材配送软件 编辑:程序博客网 时间:2024/06/07 07:01
1.AWT 和Swing
AWT是SUN在jdk中提供的基本的GUI类库,被称为Abstract Window Toolkit。AWT是窗口框架,它从不同平台的窗口系统中抽取共同组件,当程序运行时,将这些组件的创建和动作委托给所在的运行平台。也就是说,JVM调用操作系统本地的图形界面来创建和平台一致的对等体。
AWT的不足:
(1)界面丑陋,功能有限
(2)不能使用特定操作系统上复杂的图形界面组件,最多只能使用4种字体;
(3)AWT使用非常笨拙的、非面向对象的编程模式。
Swing是新的Java GUI库,Swing、AWT、辅助功能API、2D API和拖放API共同组成了JFC(Java Foundation Classes)。Swing组件全面代替了Java1.0中的AWT组件,但是使用的仍然是AWT事件模型。
2.AWT组件
所有和AWT变成相关的类,都放在java.awt包及子包中。AWT图形组件大致结构如下:
3.AWT容器
容器Container是Component的一个子类,可以盛装普通的Component。F
Window:可独立存在的顶级窗口;
Panel:可作为容器,但是不能独立存在,必须放在其它容器中。常用组件。
Frame:Window子类,有标题,能通过拖拉改变窗口的位置和大小;初始化不可见,通过setVisible(true),显示;默认使用BorderLayout作为布局管理器(下一节介绍)。很常用。
ScrollPane:带滚动条的容器,不能单独存在。
测试代码:
import java.awt.Button;import java.awt.Frame;import java.awt.Panel;import java.awt.TextField;public class TestFrame {public static void main(String[] args) {Frame f = new Frame("测试窗口");Panel p = new Panel();//添加组件p.add(new TextField());p.add(new Button("单机我"));//添加到Framef.add(p);//frame位置f.setBounds(30,30,250,200);//frame可见f.setVisible(true);}}
效果图:
4.布局管理器Layout
容器里面放组件,但是组件的布局由布局管理器控制,上面的示例代码中没有设置布局,使用默认的布局管理器。
AWT常用布局管理器:
(1)FlowLayout:组件像水流一样向某方向排列,遇到边界就折回。默认方向向左。
import java.awt.Button;import java.awt.FlowLayout;import java.awt.Frame;public class TestFlowLayout {public static void main(String[] args) {Frame f = new Frame("FlowLayout");//设置FlowLayout,左对齐f.setLayout(new FlowLayout(FlowLayout.LEFT));//添加10个按钮for(int i=0;i<10;i++){f.add(new Button("button" + i));}f.setBounds(30, 30, 300, 200);f.setVisible(true);}}
(2)BorderLayout:将容器分为EAST、SOUTH、WEST、NORTH和CENTER五个区域,组件可以被放置在其中的任意一个。
import java.awt.BorderLayout;import java.awt.Button;import java.awt.Frame;public class TestBorderLayout {public static void main(String[] args) {Frame f = new Frame("Border");//设置BorderLayout,水平间距30,垂直间距20f.setLayout(new BorderLayout(30,20));f.add(new Button("南"), BorderLayout.SOUTH);f.add(new Button("北"), BorderLayout.NORTH);f.add(new Button("东"), BorderLayout.EAST);f.add(new Button("西"), BorderLayout.WEST);f.add(new Button("中"), BorderLayout.CENTER);f.add(new Button("中2"), BorderLayout.CENTER);f.pack();f.setVisible(true);}}
效果图:
重复添加位置,后一个会覆盖前面,5个位置不用全部添加,BorderLayout会自动调整。
(3)GridLayout:将容器分割为纵横线分割的网格,每个网格一样大。
这个好理解。
(4)GridBagLayout:功能最强大,也是最复杂的布局管理器,与GridLayout不同的是:GridBagLayout中的组件可以跨越多个网格,并可以设置各个网格大小不同。
为了控制容器中的组件大小和跨越性,java提供了GridBagConstraints。
示例代码:
package se.example.awt;import java.awt.Button;import java.awt.Frame;import java.awt.GridBagConstraints;import java.awt.GridBagLayout;public class TestGridBag {private Frame f = new Frame("测试窗口");private GridBagLayout gb = new GridBagLayout();private GridBagConstraints gbc = new GridBagConstraints();private Button[] bs = new Button[10];public void init(){f.setLayout(gb);for (int i = 0; i < bs.length ; i++ ){bs[i] = new Button("按钮" + i);}//所有组件都可以横向、纵向上扩大 gbc.fill = GridBagConstraints.BOTH; gbc.weightx = 1; addButton(bs[0]); addButton(bs[1]); addButton(bs[2]);//该GridBagConstraints控制的GUI组件将会成为横向最后一个元素gbc.gridwidth = GridBagConstraints.REMAINDER; addButton(bs[3]);//该GridBagConstraints控制的GUI组件将横向上不会扩大 gbc.weightx = 0; addButton(bs[4]);//该GridBagConstraints控制的GUI组件将横跨2个网格gbc.gridwidth = 2; addButton(bs[5]);//该GridBagConstraints控制的GUI组件将横跨1个网格gbc.gridwidth = 1;//该GridBagConstraints控制的GUI组件将纵向跨2个网格gbc.gridheight = 2;//该GridBagConstraints控制的GUI组件将会成为横向最后一个元素gbc.gridwidth = GridBagConstraints.REMAINDER; addButton(bs[6]);//该GridBagConstraints控制的GUI组件将横向跨越一个网格,纵向跨越2个网格。gbc.gridwidth = 1;gbc.gridheight = 2;//该GridBagConstraints控制的GUI组件纵向扩大的权重是1 gbc.weighty = 1; addButton(bs[7]);//设置下面的按钮在纵向上不会扩大 gbc.weighty = 0;//该GridBagConstraints控制的GUI组件将会成为横向最后一个元素gbc.gridwidth = GridBagConstraints.REMAINDER;//该GridBagConstraints控制的GUI组件将纵向上横跨1个网格gbc.gridheight = 1; addButton(bs[8]); addButton(bs[9]);f.pack();f.setVisible(true);} private void addButton(Button button) { gb.setConstraints(button, gbc); f.add(button); }public static void main(String[] args) {TestGridBag tgb = new TestGridBag();tgb.init();}}
效果图:
(5)CardLayout:以时间而非空间来管理它的组件,将加入容器的所有组件看做一叠卡片,每次只有上面的那个组件才可见。并提供方法控制显示的组件。
CardLayout的常用方法:first(Container c);last(Container c);previous(Container c);next(Container c);show(Container c ,String name)。
(6)BoxLayout:Swing引入的一个新的布局管理器。保留了GridBagLayout的许多优点,却更简单。可以在垂直和水平方向上摆放组件。
package se.example.awt;import java.awt.BorderLayout;import java.awt.Button;import java.awt.Frame;import javax.swing.Box;public class TestBoxLayout {private Frame f = new Frame("测试");//定义水平摆放组件的Box对象private Box horizontal = Box.createHorizontalBox();//定义垂直摆放组件的Box对象private Box vertical = Box.createVerticalBox();public void init(){horizontal.add(new Button("水平按钮一"));horizontal.add(Box.createHorizontalGlue());horizontal.add(new Button("水平按钮二"));//水平方向不可拉伸的间距,其宽度为10pxhorizontal.add(Box.createHorizontalStrut(10));horizontal.add(new Button("水平按钮三"));vertical.add(new Button("垂直按钮一"));vertical.add(Box.createVerticalGlue());vertical.add(new Button("垂直按钮二"));//垂直方向不可拉伸的间距,其高度为10pxvertical.add(Box.createVerticalStrut(10));vertical.add(new Button("垂直按钮三"));f.add(horizontal , BorderLayout.NORTH);f.add(vertical);f.pack();f.setVisible(true);}public static void main(String[] args) {new TestBoxLayout().init();}}
效果图:
- Java AWT编程笔记-基本元素
- java.awt.Graphics2D绘制流程图基本元素
- java.awt.Graphics2D绘制流程图基本元素
- shell编程笔记-基本元素
- AWT编程笔记:事件处理
- Java EE AWT笔记01
- java:图形化界面awt基本实例
- Java中awt基本组件及其使用方法
- Java学习之图形界面编程AWT
- 黑马程序员_王康 java AWT编程
- Java AWT编程 对话框(Dialog)
- Java界面编程(GUI,AWT)
- **JAVA** GUI图形界面编程awt包
- AWT编程
- AWT编程
- AWT编程:
- 10.Java笔记—awt事件模型
- Java学习笔记(AWT 之 Frame)
- hdu4308之BFS
- 为什么优秀的程序员既懒又笨(来自IT技术博客大学习)
- CHM文档制作
- 变频器开关电源电路实例
- [小说]魔王冢(37)节外生枝
- Java AWT编程笔记-基本元素
- Android中的几种网络请求方式详解
- POJ 2533
- 谷歌眼镜尚未大规模上市,谷歌就已经为它准备好了广告工具
- 40多个关于人脸检测/识别的API、库和软件
- Hql的fetch
- 请立即停止刷博客流量
- 模板元编程 运行时 编译期
- 数据公钥加密和认证中的私钥公钥