先给出一段代码,这是一个很简单的Swing程序,而后在对程序内容做详细讲述。html
A simple Swing programjava
1 import javax.swing.*;windows
2 import java.awt.*;框架
3 public class SwingDemo{函数
4 public SwingDemo(){工具
5 JFrame jfrm=new JFrame("A Simple Swing Application");布局
6 jfrm.setSize(275,100);线程
7 jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);设计
8 JLabel jlab=new JLabel("This is a text label.");htm
9 jfrm.add(jlab);
10 jfrm.setVisible(true);
11 }
12 public static void main(String[] args){
13 SwingUtilities.invokeLater(new Runnable(){
14 public void run(){
15 new SwingDemo();
16 }
17 });
18 }
19 }
Swing是用来弥补AWT的不足的,可是不能取代它,因此Swing GUI程序开头都是包含进来swing包和awt包。GUI程序不一样于传统的控制台程序,它但是有个很形象的窗口呈现给用户的,因此实现出来显得很亲切,咱们从实现出来的这个窗口来推理下代码应该包括什么内容。窗口是windows里最多见的了,一个窗口里有标题栏工具栏按钮等等一系列的组件,这些组件不是漂浮于空中的,而是生存在这个窗口里的,这个窗口对应着Swing程序里的容器这个概念。大致上就是这样的过程:先设计出容器,再设计出组件,而后把组件添加到容器中并合理的布局,布局彻底是美观的须要,这样就写出来一个SwingGUI程序了。注意这里的容器和组件的关系看着很简单,就是容器为根,它能够容纳组件。然而实际的java类库里不是这么看待两者的,容器和组件浑然一体的,容器也是一种组件,容器内也能够再放容器,简单的说就是组件套组件,能够套组件的组件就叫容器了。这种包含层次的结构要求其顶部必须是一个顶级容器。Swing定义了4种顶级容器:JFrame,JApplet,JWindow,JDialog。这些容器继承自AWT类的Component和Container,说它们顶级是在Swing的框架内说的,放到AWT中仍是小弟,当不了老大,不过在Swing组件库中确实一手遮天,表如今顶层容器不包含在任何其余的容器中而且每一个包含层次必须从顶层容器开始,这4个容器称做重量级容器。除了这4个顶级容器,其它的Swing组件都是从JComponent类派生的。例如用于标签的类JLabel,用于按钮的类JButton,用于复选框的类JCheckBox。既然有重量级容器,一样就有轻量级容器,如JPanel,JScrollPane,JRootPane。这些固然也是派生自JComponent类了。它们常常用于组织和管理一组相关的组件。
关于Swing组件的基本体系搞懂了,接下来就考虑组件怎么加到容器里,代码第9行告诉了咱们答案,看起来确实很简单,再考虑一个问题,若是我加了不少组件进来,那么这些组件怎么摆放呢,这段代码只加了一个,看不出来问题,若是加了一堆组件进来会不会窗口显得很凌乱呢。这就须要布局管理器来帮忙了。代码中看不到布局管理器对象,这是由于采用了默认的BorderLayout,注意这里的默认是针对JFrame而言的,不一样的顶级容器的默认布局管理器可能不同。布局管理器多数由AWT提供的,Swing也提供了本身的几种,它们都是实现了LayoutManager接口的实例(某些还会实现LayoutManager2接口)。
如今组件放到容器里了,而且也合理的布局了,还遗漏了一些问题,好比说这些组件(包括容器)该起个名字吧,不过这个不用操心,由于生成这个组件对象的时候就往构造函数里传了参数用来起名字了。还有个问题是容器的大小,假如容器芝麻的大小你却往里放个西瓜大的组件,根本显示不出来嘛。因此容器是要定制大小的,setSize()能够知足须要,通常的组件是不须要这个函数来定制大小的,大小都是随容器变化的,因此芝麻大小的容器是不会塞一个西瓜大的组件的,可是倒是个比芝麻还小的组件,和显示不出来区别不大。
到了这里感受还缺点什么,对了,还缺事件的处理机制,好比说点关闭按钮窗口会怎么样。这里简单的调用一个方法,setDefaultCloseOperation(),传进的一个整型参数比如一个遥控器上的数字键,决定了这个操做的行为。事件的处理机制隐藏于这个方法的实现中。第10行的setVisible()做用是显示框架,初学者可能会忘记,不过这几乎是GUI代码的必备语句。最后的main方法看着有点不知所云,简单解释下,在全部状况下,Swing GUI必须经过使用invokeLater()在事件调度线程上建立。这行代码硬记住就好了。从语法上说用了一个匿名类。
本文转自 ☆★ 一应俱全 ★☆ - www.baoluowanxiang.com 转载请注明出处,侵权必究!
原文连接:http://www.baoluowanxiang.com/a/program/java/2010/0423/580.html