第26章  Swing
本书的第3部分介绍了如何使用AWT开发用户界面。本章将介绍一个新的可以替代AWT的图形界面类Swing。Swing是AWT的扩展,它提供了更强大和更灵活的组件集合。除了我们已经熟悉的组件如按钮、复选框和标签外,Swing还包括许多新的组件,如选项板、滚动窗口、树、表格。许多一些开发人员已经熟悉的组件,如按钮,在Swing都增加了新功能。而且,按钮的状态改变时按钮的图标也可以随之改变。
与AWT组件不同,Swing组件实现不包括任何与平台相关的代码。Swing组件是纯Java 代码,因此与平台无关。一般用轻量级(lightweight)这个术语描述这类组件。
在Swing包中的类和接口的数量众多,本章只对其中的一部分简要描述。Swing包是开发人员希望自己仔细研究的部分。
下面是本书介绍的Swing组件:
类描述
AbstractButton 按钮的抽象类
ButtonGroup 封装一组互斥的按钮
ImageIcon 封装图标
JApplet Swing版的Applet
JButton Swing 的按钮类
JCheckBox Swing的复选框类
JComboBox 封装组合框(下拉式菜单和文本框的组合).
JLabel Swing版的标记
JRadioButton Swing版的单选按钮
JScrollPane 封装滚动窗口
JTabbedPane 封装选项窗口
JTable 封装表格控件
JTextField Swing版的文本域
Jtree 封装树型控件
与Swing相关的类包含在javax.swing包及其子包中,如。其他与Swing 相关的类和接口,本章都未加描述。
本章的其余部分介绍各个Swing组件,并通过小应用程序的例子进行说明。
26.1  JApplet
Swing的基础是JApplet类,Japplet扩展了Applet类。使用Swing的小应用程序必须是
第26章  Swing 619
JApplet的子类。JApplet增加了许多Applet没有的功能。例如,JApplet支持多种窗格,如内容窗格,透明窗格和根窗格。本章中的例子并没有使用太多的JApplet增强功能。但是必须强调Applet和JApplet的一个不同之处,因为本章的小应用程序例子使用到这个特性。这就是,在JApplet实例中增加一个组件,不是调用小应用程序的add()方法,而是先调用add( )增加一个内容窗格。可以通过如下方法得到内容窗格:
Container getContentPane( )
然后使用容器的add( )方法在内容窗格中增加一个组件。方法如下所示:
void add(comp)
这里,comp是增加到内容窗格中的组件。
26.2  图标和标记
在Swing中,图标由ImageIcon类封装,这个类负责将一个图片制成图标。ImageIcon类的两个构造函数如下所示:
ImageIcon(String filename)
ImageIcon(URL url)
第一个构造函数使用名为filename的文件中的图片。第二个使用资源定位符url所指示的图片。
ImageIcon类实现Icon接口,其方法如下所示:
方法描述
int getIconHeight( ) 返回图标的高度,以像素为单位
int getIconWidth( ) 返回图标的宽度,以像素为单位
void paintIcon(Component comp, Graphics g,                        int x, int y) 在图形上下文g的x, y 位置显示图标。在组件comp中提供关于制作图标的附加信息
Swing标记是Jlabel类的实例,Jlabel类是JComponent类的子类,它可以显示文字和/或图标。Jlabel类的构造函数如下所示:
JLabel(Icon i)
Label(String s)
JLabel(String s, Icon i, int align)
其中,s和i是标记使用的文字和图标。参数align为LEFT, RIGHT, CENTER, LEADING, 或者 TRAILING。这些常数和其他Swing类使用的常数定义在SwingConstants接口中。
与标记相关的文字和图标由下列方法读写:
Icon getIcon( )
String getText( )
void setIcon(Icon i)
void setText(String s)
620 第3部分  Java软件开发技术
其中,i和s分别是图标和文字。
下面的例子说明如何创建并显示包含一个图标和一个字符串的标记。首先小应用程序获取内容窗格,然后利用france.gif文件创建ImageIcon对象。这个对象实例是JLabel构造函数的第二个参数。JLabel构造函数的第一个参数和最后一个参数是标记的文字和其排列方式。最后将标记加入内容窗格。
import java.awt.*;
import javax.swing.*;
/*
<applet code="JLabelDemo" width=250 height=150>
</applet>
*/
public class JLabelDemo extends JApplet {
public void init() {
// Get content pane
Container contentPane = getContentPane();
// Create an icon
ImageIcon ii = new ImageIcon("france.gif");
// Create a label
JLabel jl = new JLabel("France", ii, JLabel.CENTER);
// Add label to the content pane
contentPane.add(jl);
}
}
这个小应用程序的输出如下所示:
26.3  文本域
Swing的文本域被封装为JTextComponent类,JTextComponent类是JComponent的子类。它提供了Swing文本组件的公共功能。它的一个子类是JTextField, JtextField类可以编辑单行文本,它的构造函数如下所示:
第26章  Swing 621 JTextField( )
JTextField(int cols)
JTextField(String s, int cols)
JTextField(String s)
其中,s 是要显示的字符串,cols是文本域中的列数。
下面的例子说明如何创建一个文本域。小应用程序获得内容窗格,然后分配一个流布局作为布局管理器。接着,创建一个JTextField对象,将其加入内容窗格。
import java.awt.*;
import javax.swing.*;
/*
<applet code="JTextFieldDemo" width=300 height=50>
</applet>
*/
public class JTextFieldDemo extends JApplet {
JTextField jtf;
javaswing和javafxpublic void init() {
// Get content pane
Container contentPane = getContentPane();
contentPane.setLayout(new FlowLayout());
// Add text field to content pane
jtf = new JTextField(15);
contentPane.add(jtf);
}
}
这个小应用程序的输出如下所示:
26.4  按钮
Swing的按钮相对于AWT中Button类提供了更多功能。例如,可以用一个图标修饰Swing 的按钮。Swing的按钮是AbstractButton的子类,AbstractButton类扩展JComponent类。AbstractButton类包含多种方法,用于控制按钮行为,检查复选框和单选按钮。例如,当按钮被禁止,按下或选择时,可以将其显示为不同的图标。还可以定义一个图标为“rollover”图标,当鼠标移动到按钮上时显示。下面是控制这类行为的方法:
void setDisabledIcon(Icon di)
void setPressedIcon(Icon pi)
622 第3部分  Java软件开发技术
void setSelectedIcon(Icon si)
void setRolloverIcon(Icon ri)
其中,di,pi,si和ri是不同状态下使用的图标。
可以通过下列方法读写与按钮相关的文字:
String getText( )
void setText(String s)
其中,s是与按钮相关的文字。
AbstractButton抽象类的子类在按钮被按下时生成行为事件。通过如下的方法注册和注销这些事件的:
void addActionListener(ActionListener al)
void removeActionListener(ActionListener al)
其中,al是动作。
AbstractButton是按钮、复选框和单选按钮的父类。按钮、复选框和单选按钮将在下面的章节中介绍。
26.4.1  JButton类
JButton类提供一个按钮的功能。JButton类允许用图标,或字符串或两者同时与下压式按钮相关联的功能。类的构造函数如下所示:
JButton(Icon i)
JButton(String s)
JButton(String s, Icon i)
其中s和i是按钮使用的字符串和图标。
下面的例子显示四个按钮和一个文本域。每个按钮显示为一个图标,使用的图标是一个国家的国旗。当按下按钮时,在文本域中显示国家的名字。小应用程序程序先获取内容窗格,然后设置窗格的布局管理器。创建四个图形按钮,加入内容窗格。然后,小应用程序注册接收按钮产生的事件。创建文本域,将其加入小应用程序。最后,动作事件的处理程序将与按钮相关的命令字符串显示在文本域中。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/*
<applet code="JButtonDemo" width=250 height=300>
</applet>
*/
public class JButtonDemo extends JApplet
implements ActionListener {
JTextField jtf;
public void init() {
// Get content pane

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。