http://java.sun.com/docs/books/tutorial/uiswing/index.html

解决方案 »

  1.   

    Java Swing介绍一. JFC/Swing概述
    1.JFC 
    JFC是Java Foundation Classes的简称, 中文可译为Java基础类集。JFC的主要用途是帮助用户建立图形用户界面GUI。JFC中包含了很多有用的GUI组件和服务,其中的一个重要组成部分就是Swing。JFC的出现(1997年首次发布),将GUI推向一个新的境界。
    JFC主要包含五类API:
    (1) Swing
    Swing主要是为开发图形用户界面而设计的,它包含了许多独立于平台的GUI组件,功能比AWT更强。它也是我们要讨论的主要对象。
    (2) Pluggable Look & Feel Support(多种外观的支持)
    让使用Swing组件的程序能够自由地选择looks和feels,而不必在乎程序当前运行的平台是什么。
    (3)Accessibility API 
    提供一些辅助性的功能,如读屏幕,屏幕放大,处理语音等,主要为一些使用非传统输入输出的程序提供支持。
    (4) Java 2D API 
    是一套开发二维图形的工具包, 能使开发者方便地开发出包含高质量的图形、图象和文本的程序。
    (5) Drag and Drop Support 
    提供了Java应用程序和本地的非Java应用程序之间通过拖放(Drag and Drop)来交换数据的能力。2.Swing
    接下来我们主要介绍Swing。
    Swing提供了整套的GUI组件,为了保证可移植性,它们是完全用Java写的(100% Java)。
    Swing的主要特点有:
    (1) Pluggable look and feel
    Swing提供了多种图形用户界面的外观能让开发者和用户来选择,这样,同一程序在Windows环境上运行时可以有Windows的外观,而在UNIX平台运行时又可以有类似 UNIX应用程序的外观,就好象它们分别是在各自的环境中开发的。
    (2) Swing的包
    Swing中的包有很多,具体可参见Swing的API文档,其中最常用的两个包为: 
    javax.swing 和javax.swing.event 。这是Swing1.1最终版以后的名称,以前javax.swing的包名为com.sun.java.swing。
    (3) Swing的体系结构
    Swing提供了比AWT更多和更复杂的组件,这些组件的功能也更强。实际上,Swing是建立在AWT的基础上的,它使用了AWT的许多部分。但与AWT的实现依赖于特定平台不同,Swing不依赖于任何特定平台。
    Swing的体系结构如下:
    Top-level Container:(顶层Container类)
    JApplet:
    +--java.applet.Applet
    |
    +--javax.swing.JApplet
    JFrame:
    +--java.awt.Frame
    |
    +--javax.swing.JFrame
    JWindow:
    +--java.awt.Window
    |
    +--javax.swing.JWindow
    JDialog:
    +--java.awt.Dialog
    |
    +--javax.swing.JDialog
    除top-level Container外,其它Swing组件均是javax.swing.JComponent的子孙类。
    java.awt.Containerjavax.swing.JComponetJTextArea
    JTextComponent JTextField JPasswordField
    HtmlEditorKit
    AbstractButton
    JPanel
    JComboBox JToggleButton JCheckBox
    JLabel JButton JRadioButton
    JList JMenuItem
    JToolBar
    JMenuBar
    JPopupMenu JRadioButtonMenuItem
    JPane JCheckBoxMenuItem
    JScrollBar JMenu
    JScrollPane
    JSlider
    JTable
    JSeparator
    JTree
    JProgressBar
    JRootPane
    JSplitPane
    JTabbedPane(4) Swing组件的功能:
    Swing组件具有一些AWT不具有的功能,如:
    1) Swing的button和label上能显示图象,而不仅仅是文字
    2) 大部分Swing组件可很容易地增加或改变其边界(border)
    3) Swing组件不一定是长方型的,也可以是圆的
    4) 开发者可自由设定Swing的外观。有一种标准的外观选项,称为cross-platform look and feel, 或称Java(Metal) Look & Feel,其它常用的外观选项还有Windows Look & Feel 和CDE/Motif Look & Feel。而AWT 组件的外观一般与所在的平台或环境一致。 
    在程序中,Swing组件不能与AWT组件混用。
    (5) Swing与JDK
    Swing包含在JDK1.2及以后版本中,但不包含在JDK1.1.X中,所以JDK1.2版以后的用户可直接使用Swing的包,而JDK1.1的用户需另外安装Swing软件包,安装后再将相应的库文件(如swing.jar或swingall.jar)的路径加入CLASSPATH。二. 编写Swing程序
    1. 构建Swing的GUI
    通常,每个Swing组件都有一个顶层的Swing Container, 常用的顶层Container有JFrame, JApplet, JWindows和JDialog。这些Container常常是AWT组件的子类,如JFrame就是java.awt.Frame的子类,它们可以包含其它Swing组件。
    除Swing container之外的Swing组件,常称为Lightweight components(轻量控件),如JButton, JPanel和JMenu等。这些组件能加到顶层Container对应的content pane中,而不能直接加到Container里面。content pane也是一个Lightweight components, 典型的如JPanel。
    以下是一个包含两个button,一个text field和一个list的GUI的层次结构:JFrame (a top-level container)
    |
    ...
    |
    content pane 
    |
    JPanel
    |
    +----------+-----------+
    | | |
    JButton JButton JPanel
    |
    +------------+
    | |
    JtextField JList注:若是Applet, 则顶层的Container为Japplet。我们可以将第七章用AWT编写的图形界面的例子用Swing来重写。程序如下:
    import java.awt.*;
    import javax.swing.*;public class SExGui {
    private JFrame f;
    private JButton b1;
    private JButton b2;
    Container contentPane;public static void main(String args[]) {
    SExGui guiWindow = new SExGui();
    guiWindow.go();
    }
    public void go() {
    f = new JFrame("GUI example");
    contentPane = f.getContentPane();
    contentPane.setLayout(new FlowLayout());
    b1= new JButton("Press Me");
    b2 = new JButton("Don't Press Me");
    contentPane.add(b1);
    contentPane.add(b2);
    f.pack();
    f.setVisible(true);
    }
    }程序运行的效果如下:2. Swing应用程序以下是一个Swing应用程序,通过该程序我们可以了解Swing程序的编写方法。import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*; public class SwingSample implements ActionListener {
    private JFrame jFrame;
    private JLabel jLabel;
    private JPanel jPanel;
    private JButton jButton;
    private String labelPrefix = "Number of button clicks: ";
    private int numClicks = 0;public void go() {
    jFrame = new JFrame("HelloSwing");
    jLabel = new JLabel(labelPrefix+"0");
    jButton = new JButton("I am a Swing button!");jButton.addActionListener(this);
    //Set up pane
    jPanel = new JPanel();//Arrange for compts to be in a single column.
    jPanel.setLayout(new GridLayout(0,1));//Put compts in pane,not in JFrame directly.
    jPanel.add(jButton);
    jPanel.add(jLabel);
    jFrame.setContentPane(jPanel);//Set up a WindowListener inner class to handle
    //window's quit button.
    WindowListener w1 = new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    System.exit(0);
    }
    };
    jFrame.addWindowListener(w1);jFrame.pack();
    jFrame.setVisible(true);
    }//Button handling.
    public void actionPerformed(ActionEvent e) {
    numClicks++;
    jLabel.setText(labelPrefix+numClicks);
    }public static void main(String[] args) {HelloSwing helloSwing = new HelloSwing();
    helloSwing.go();
    }
    }上面一个例子包含了以下几步:
    (1) Importing Swing packages 
    (2) Setting up the top-level container 
    (3) Setting up buttons and labels 
    (4) Adding components to containers 
    (5) Handling events