Java1.0 刚出现时,包含一个用于基本 GUI 编程的类库,Sun 把它叫做抽象窗口工具箱(Abstract Window Toolkit,AWT)。AWT 库处理用户界面元素的方法是把这些元素的创建及其行为委托给每个目标平台(Windows,Solaris,Macintosh等)的本地GUI工具进行处理。不同平台的 AWT 用户界面存在着不同的bug。程序员们必须在每一个平台上测试他们的应用程序,他们因此嘲笑 是一次编写,到处调试。
Swing只是提供了更好的用户界面组件。AWT 的基本体系结构,尤其是事件处理模型,从 Java1.1版后并没有改变。Swing优点:Swing具有更丰富,更方便的用户界面元素集合;Swing对低层平台的依赖更少;因此和平台有关的bug也少的多;Swing给不同平台上的用户一致的感觉。
由Swing开发的GUI界面通常由两种组件构成:
容器组件:用于管理其他界面组件的组件,例如:JFrame,JPanel等。
元素组件:用于构成各种用户界面的组件,例如:JLabel,JTextField等。
容器中组件出现的位置和组件的大小通常由布局管理器控制。每个 Container(比如一个 JPanel 或一个 JFrame)都有一个缺省布局管理器,它可以通过调用 setLayout()来改变。布局管理器负责决定布局策略以及其容器的每一个子组件的大小。
Java编程语言包含下面的布局管理器:
FlowLayout- Panel和Applets的缺省布局管理器
BorderLayout- Window、Dialog 及Frame的缺省管理程序
GridLayout
CardLayout
GridBagLayout
GridBagLayout
与其它布局管理器不一样,FlowLayout布局管理器不限制它所管理的组件的大小,而是允许它们有自己的最佳大小。Flow 布局构造函数参数允许将组件左对齐或右对齐(缺省为居中)。
BorderLayout布局管理器包括五个明显的区域:东、南、西、北、中。
GridLayout布局管理器为放置组件提供了灵活性。用行和列来创建管理器。然后组件就填充到由管理器规定的单元中。比如,由语句 new GridLayout(3,2)创建的有三行两列的GridLayout布局能产生六个单元。
CardLayout 对象是容器的布局管理器。它将容器中的每个组件看作一张卡片。一次只能看到一张卡片,而容器充当卡片的堆栈。当容器第一次显示时,第一个添加到
像 BorderLayout 布局管理器一样,GridLayout 布局管理器中的组件相应的位置不随区域的缩放而改变。只是组件的大小改变。GridLayout布局管理器总是忽略组件的最佳大小。所有单元的宽度是相同的,是根据单元数对可用宽度进行平分而定的。同样地,所有单元的高度是相同的,是根据行数对可用高度进行平分而定的。将组件添加到网格中的命令决定它们占有的单元。单元的行数是从左到右填充,就象文本一样,而列是从上到下由行填充。
除了 Flow、Border、Grid和Card 布局管理器外,核心Java.awt 也提供GridBag 布局管理器。
GridBag布局管理器在网格的基础上提供复杂的布局,但它允许单个组件在一个单元中而不是填满整个单元那样地占用它们的最佳大小。网格包布局理器也允许单个组件扩展成不止一个单元。
JFram与Frame不同的是,在 JFrame中加组件是加在内容窗格里的。如:
Container contentPane=frame.getContentPane(); //用上例中的 frame 对象
JComponent c=…;
contentPane.add(c);
如果你只需要在框架中显示一个 Swing组件,那么你可以用下面的方式把组件放置到内容窗格中。
Frame.setContentPane(c);面板是也是个容器。它可以再放其他的组件。J
Swing只是提供了更好的用户界面组件。AWT 的基本体系结构,尤其是事件处理模型,从 Java1.1版后并没有改变。Swing优点:Swing具有更丰富,更方便的用户界面元素集合;Swing对低层平台的依赖更少;因此和平台有关的bug也少的多;Swing给不同平台上的用户一致的感觉。
由Swing开发的GUI界面通常由两种组件构成:
容器组件:用于管理其他界面组件的组件,例如:JFrame,JPanel等。
元素组件:用于构成各种用户界面的组件,例如:JLabel,JTextField等。
容器中组件出现的位置和组件的大小通常由布局管理器控制。每个 Container(比如一个 JPanel 或一个 JFrame)都有一个缺省布局管理器,它可以通过调用 setLayout()来改变。布局管理器负责决定布局策略以及其容器的每一个子组件的大小。
Java编程语言包含下面的布局管理器:
FlowLayout- Panel和Applets的缺省布局管理器
BorderLayout- Window、Dialog 及Frame的缺省管理程序
GridLayout
CardLayout
GridBagLayout
GridBagLayout
与其它布局管理器不一样,FlowLayout布局管理器不限制它所管理的组件的大小,而是允许它们有自己的最佳大小。Flow 布局构造函数参数允许将组件左对齐或右对齐(缺省为居中)。
BorderLayout布局管理器包括五个明显的区域:东、南、西、北、中。
GridLayout布局管理器为放置组件提供了灵活性。用行和列来创建管理器。然后组件就填充到由管理器规定的单元中。比如,由语句 new GridLayout(3,2)创建的有三行两列的GridLayout布局能产生六个单元。
CardLayout 对象是容器的布局管理器。它将容器中的每个组件看作一张卡片。一次只能看到一张卡片,而容器充当卡片的堆栈。当容器第一次显示时,第一个添加到
CardLayout
对象的组件为可见组件。
像 BorderLayout 布局管理器一样,GridLayout 布局管理器中的组件相应的位置不随区域的缩放而改变。只是组件的大小改变。GridLayout布局管理器总是忽略组件的最佳大小。所有单元的宽度是相同的,是根据单元数对可用宽度进行平分而定的。同样地,所有单元的高度是相同的,是根据行数对可用高度进行平分而定的。将组件添加到网格中的命令决定它们占有的单元。单元的行数是从左到右填充,就象文本一样,而列是从上到下由行填充。
除了 Flow、Border、Grid和Card 布局管理器外,核心Java.awt 也提供GridBag 布局管理器。
GridBag布局管理器在网格的基础上提供复杂的布局,但它允许单个组件在一个单元中而不是填满整个单元那样地占用它们的最佳大小。网格包布局理器也允许单个组件扩展成不止一个单元。
JFram与Frame不同的是,在 JFrame中加组件是加在内容窗格里的。如:
Container contentPane=frame.getContentPane(); //用上例中的 frame 对象
JComponent c=…;
contentPane.add(c);
如果你只需要在框架中显示一个 Swing组件,那么你可以用下面的方式把组件放置到内容窗格中。
Frame.setContentPane(c);面板是也是个容器。它可以再放其他的组件。J