Designed by Chiyong,?20051
Java2 网络编程基础
Swing
第九章
Designed by Chiyong,?20052
回顾
Graphics 类用于在屏幕上绘制诸如文本、
线条、矩形和椭圆的对象。
Font 类用于使 Java 程序输出结果中的文本显得更生动。
FontMetrics 类用于获得关于字体的信息。
Color 类用于向应用程序或小应用程序组件添加颜色。
绘图模式决定了对象如何被画在窗口中。
Designed by Chiyong,?20053
目标
描述 Swing 的结构
使用 Swing GUI 的容器
使用 Swing文本组件
使用 Swing中用于选择性输入的常用组件
使用 Swing菜单
Designed by Chiyong,?20054
简介
许多软件平台都提供“基本类库” (FC)
( Foundation Class)
基本类库简化了设计过程,并减少了在编写代码上花费的时间
Microsoft 基本类 (MFC) 和 Java 基本类 (JFC) 是两个使用广泛的类库
Designed by Chiyong,?20055
Java 基本类库 (JFC)
JFC 通过添加一组 GUI 类库扩展了原始 AWT
JFC提供附加的可视化组件类以及屏幕设计的独特方式
JFC 是一组 API的集合,包括以下的一些模块,
抽象窗口工具包( Abstract Window Toolkit)
新 GUI类库( swing)
支持二维模型的类库( Java 2D)
支持拖放的类库( Drag and Drop)
支持易用性的类库( Accessibility)
Designed by Chiyong,?20056
Swing介绍
Java1.2引入称为 Swing的新的 GUI组件库,是 Sun公司用来描述下一代图形界面的标准。
Swing继承了 AWT,但它是 100%纯 Java代码实现,
不依赖于任何平台,并且可以自由设置和改变界面的整体风格( pluggable look and feel,PL&F)。
尽管 Swing是从 AWT中派生下来的,但 Swing并不使用 AWT组件,这保证了 Swing界面在各种平台显示的一致性。
Swing包括 javax.swing包及其子包。
Designed by Chiyong,?20057
MVC设计模式模型-视图-控制 体系
模型,存储定义组件的数据。
视图,维护组件的可视化表示,即外观。
控制,用于处理用户和组件的交互。
例如,Swing的改变应用程序的可视化外观功能,目录树结构的实现等,都是基于 MVC模式实现的
Designed by Chiyong,?20058
Swing 结构
Object
Component
JFrame
Container
Window
Frame Dialog
JDialog
JText
JComboBox
JLabel
JList
JMenuBar
JOptionPane
JPanel
JScrollBar
AbstractButton
JToggleButton JMenuItem JButton
JCheckBox JRadioButton
JComponent
JMenu
Designed by Chiyong,?20059
Swing 组件
Swing 组件独立于本地窗口系统。
Swing组件类大部分都以 J 开头。
Swing 组件是基于 AWT 构建,包含了
AWT 可视化组件的替代组件,也包含了其它复杂组件 - 树和表
Designed by Chiyong,?200510
Swing 应用程序的容器层次
设计 GUI 时,都有用于放置可视化组件的主窗口。
Container 对象可用于将组件组合在一起。
容器中的组件根据特定布局排列。
Swing 中的容器有两类:
- 顶级容器
- 中间容器
Designed by Chiyong,?200511
顶级容器
JFrame,用于框架窗口的类,此窗口带有边框、标题、用于关闭和最小化窗口的图标等。带 GUI 的应用程序通常至少使用一个框架窗口 。
JDialog,用于对话框的类。
JApplet,用于使用 Swing 组件的 Java
Applet 的类 。
Designed by Chiyong,?200512
中间容器
JPanel,最灵活、最常用的中间容器。
JScrollPane,与 JPanel 类似,但还可在大的组件或可扩展组件周围提供滚动条。
JTabbedPane,包含多个组件,但一次只显示一个组件。用户可在组件之间方便地切换。
JToolBar,按行或列排列一组组件(通常是按钮)。
Designed by Chiyong,?200513
Swing GUI框架顶级容器
JToolBar组件
JTabbedPane
组件
JScrollPane
组件
Designed by Chiyong,?200514
基本的 Swing 应用程序
import javax.swing.*;
public class HelloSwing {
public static void main(String[] args) {
JFrame frame = new JFrame("HelloSwing");
JLabel label = new JLabel("你好,Swing");
frame.getContentPane().add(label);
frame.setDefaultCloseOperation
(JFrame.EXIT_ON_CLOSE);
frame.setSize(300,200);
frame.setVisible(true);
}
}
导入必要的包,一般还需导 入:
import java.awt.*;
import java.awt.event.*;设置一个顶级容器创建一个
Swing组件将组件添加到容器 内容窗格实现了在单击,关闭,按钮时,
可以关闭窗口。如果使用的早期版本的平台,则需要通过事件监听器实现
Designed by Chiyong,?200515
JFrame
是 放置其他 Swing 组件的顶级容器
JFrame 组件用于在 Swing 程序中创建窗体
它的构造函数:
JFrame()
JFrame(String Title)
组件必须添加至内容窗格,而不是直接添加至 JFrame 对象,示例:
frame.getContentPane().add(b);
Designed by Chiyong,?200516
JPanel
JPanel 组件是一个中间容器
用于将小型的轻量级组件组合在一起
JPanel 的缺省布局为 FlowLayout
JPanel 具有下列构造函数:
JPanel()
JPanel(LayoutManager lm)
Designed by Chiyong,?200517
JButton
Swing 的按钮相对于 AWT中 Button类提供了更多的功能。
JButton类允许用图标、字符串或两者同时构造一个按钮。
构造函数如下:
JButton()
JButton(Icon icon),icon表示使用的图标
JButton(String text),text表示使用的字符串
JButton(String text,Icon icon)
…
ImageIcon buttonIcon1 = new ImageIcon("on.gif");
JButton b1 = new JButton("First Button",buttonIcon1);
b1.setMnemonic(KeyEvent.VK_F);
… 设置键盘快捷方式创建一个带图标 的 JButton
Designed by Chiyong,?200518
JPanel和 JButton使用示例
import java.awt.*;
import javax.swing.*;
class PanelDemo extends JFrame {
public PanelDemo( String title){
super(title);
Container c=getContentPane();
JPanel cpane = new JPanel();
JButton ok = new JButton("确定 ");
cpane.add(ok);
JButton cancel = new JButton("取消 ");
cpane.add(cancel);
c.add(cpane,BorderLayout.SOUTH);
}
public static void main(String args[]) {
PanelDemo pd=new PanelDemo("JPanel测试 ");
pd.setSize(300,200);
pd.setVisible(true);
}
}
Designed by Chiyong,?200519
JLabel
它既可以显示文本也可以显示图像
构造函数如下:
JLabel(Icon icon),icon表示使用的图标
JLabel(String text,Icon icon,int align),text表示使用的字符串 ; icon表示使用的图标 ;align表示水平对齐方式,其值可以为,LEFT,RIGHT、
CENTER。
…
ImageIcon icon = new ImageIcon("Calv.gif");
JLabel calv_label = new JLabel(" 这是 Calvin",icon,
SwingConstants.LEFT);
…
Designed by Chiyong,?200520
文本组件
JtextComponent 为所有 Swing 文本组件的根类
JTextField
JTextComponent JEditorPane
JTextArea
JTextPane
JPasswordField
Designed by Chiyong,?200521
JTextField
JTextField 组件允许输入或编辑单行文本
此类的构造函数包括:
JTextField()
JTextField(Document doc,String text,int
columns)
JTextField(int columns)
JTextField(String text)
JTextField(String text,int columns)
…
Container con = getContentPane();
con.setLayout(new FlowLayout());
JLabel jl = new JLabel(“文本域,); con.add(jl);
JTextField tf = new JTextField(20); con.add(tf);
…
Designed by Chiyong,?200522
JTextArea
JTextArea 组件用于接受来自用户的多行文本
它可实现可滚动界面
JTextArea 组件可使用下列构造函数创建:
JTextArea()
JTextArea(int rows,int cols)
JTextArea(String text)
JTextArea(String text,int rows,int cols)
JTextArea(Document doc)
JTextArea(Document doc,String text,int rows,
int cols)
…
JLabel jl = new JLabel(“文本区,);
con.add(jl);
JTextArea ta = new JTextArea(5,10);
con.add(ta);
…
Designed by Chiyong,?200523
选择性输入
为了简化表单填写过程,通常为用户提供多种可供选择的选项,而无需用户写出他们的响应。常用于选择性输入的组件有:
复选框
单选按钮
列表框
组合框
Designed by Chiyong,?200524
复选框
复选框用于为用户提供一组选项
JCheckBox 类具有下列构造函数:
JCheckBox()
JCheckBox(Icon icon)
JCheckBox(Icon icon,boolean selected)
JCheckBox(String text)
JCheckBox(String text,boolean selected)
JCheckBox(String text,Icon icon)
JCheckBox(String text,Icon icon,boolean
selected)
Designed by Chiyong,?200525
单选按钮
单选按钮允许用户从多个选项中选择其中一个
ButtonGroup 用于在 Swing 中创建组
JRadioButton 对象可使用下列构造函数创建:
- JRadioButton()
- JRadioButton(Icon icon)
- JRadioButton(Icon,boolean selected)
- JRadioButton(String text)
- JRadioButton(String text,boolean selected)
- JRadioButton(String text,Icon icon)
- JRadioButton(String text,Icon icon,boolean selected)
Designed by Chiyong,?200526
JCheckBox和 JRadioButton使用示例
import java.awt.*;
import javax.swing.*;
class Hobby extends JPanel {
JCheckBox c1 = new JCheckBox("阅读 ",false);
JCheckBox c2 = new JCheckBox("音乐 ",false);
JCheckBox c3 = new JCheckBox("绘画 ",false);
JRadioButton rad1 = new JRadioButton("大专 ");
JRadioButton rad2 = new JRadioButton("本科 ");
JRadioButton rad3 = new JRadioButton("硕士 ");
JLabel jl = new JLabel("您有什么爱好? " );
JLabel j2 = new JLabel("您的最高学历? " );
JButton exitbtn = new JButton("退出 ");
public Hobby( ) {
setLayout(new GridLayout(9,1));
add(jl); add(c1); add(c2); add(c3);
add(j2); add(rad1); add(rad2); add(rad3); add(exitbtn);
}
}
public class Hobbytest extends JFrame {
Hobbytest() {
super();
getContentPane().add(new Hobby());
setSize(300,200); setVisible(true);
}
public static void main(String args[]) {
new Hobbytest(); }
}
Designed by Chiyong,?200527
列表
在可供选择的选项很多时,可向用户呈现一个列表来供他们选择
JList 组件依次排列项目列表,这些项目可以单选或多选
JList 类既可显示字符串,也可显示图标
JList 不支持双击
MouseListener 可用于解决双击问题
Designed by Chiyong,?200528
JList 构造函数
public JList(),使用空模型构造 JList
public JList(ListModel dataModel),构造一个列表,用它显示指定模型中的元素。
public JList (Object [] listData),构造一个列表以显示指定数组 listData的元素。
JList 不支持滚动。要启用滚动,可使用下列代码,
JScrollPane myScrollPane=new JScrollPane();
myScrollPane.getViewport().setView(dataList);
…
String stars[] = {"安东尼奥,班德拉斯 ","来昂纳多,迪卡普尼奥 ","桑德拉,布洛克 ","休,格兰特 ","朱莉亚,罗伯茨 "};
JList moviestars = new JList(stars);
…
Designed by Chiyong,?200529
组合框
文本域和下拉列表的组合
在 Swing 中,组合框由 JComboBox 表示
构造函数如下:
public JComboBox(),此构造函数使用缺省数据模型创建 JComboBox
public JComboBox(ComboBoxModel asModel),使用现有 ComboBoxModel 中的项目的组合框
public JComboBox(Object [] items),包含指定数组元素的组合框
…
String names[] = {"弗雷德里克,福西斯 ","约翰,克里沙姆
","玛丽,希金斯,克拉克 ","帕特丽夏,康威尔 "};
JComboBox authors = new JComboBox(names);
…
Designed by Chiyong,?200530
菜单显示项目列表,指明各种任务。
选择或单击某个选项时会打开另一个列表或子菜单。
Swing 菜单由菜单栏、菜单和菜单项构成。
菜单栏是所有菜单和菜单项的根菜单
Designed by Chiyong,?200531
JFC 菜单组件
JMenuBar JPopupMenu AbstractButton JSeperator
JMenuItem
JMenu JCheckBoxMenuItem JRadioButtonMenuItem
JComponent
Container
Component
Object
Designed by Chiyong,?200532
JMenuBar
JMenuBar 是可通过 JFrame,JWindow 或
JInternalFrame 的根窗格添加至容器的组件。
由多个 JMenu 组成,每个 JMenu 在
JMenubar 中都表示为字符串。
JMenuBar 需要两个附加类:
- SingleSelectionModel类,跟踪当前选定的菜单
- LookAndFeel类,负责绘制菜单栏以及对在其中发生的事件作出响应
Designed by Chiyong,?200533
JMenu
JMenu 在 JMenuBar 下以文本字符串形式显示,而在用户单击它时,则以弹出式菜单显示。
JMenu 具有两个附加类:
- JPopupMenu,用于显示 JMenu 的菜单项
- LookAndFeel,负责绘制菜单栏中的菜单以及对在其中发生的所有事件作出响应
Designed by Chiyong,?200534
JPopupMenu 的函数方法 用途
public JMenuItem add(JMenuItem
menuItem)
将指定菜单项附加至菜单末尾
public JMenuItem add(String s) 使用指定文本新建菜单项,并将其添加至菜单末尾
public void show(Component c,int x,
int y)
在组件 c的坐标 (x,y) 位置显示弹出式菜单
public boolean isPopupTrigger() 确定鼠标事件是否为平台的弹出触发器
Designed by Chiyong,?200535
JMenuItem
JMenu 或 JPopupMenu 中的一个组件,以文本字符串形式显示,可以具有图标
JMenuItem 的外观可以修改,如字体、颜色、背景、边框等
除字符串外,在 JMenuItem 中还可以添加图标
Designed by Chiyong,?200536
JCheckBoxMenuItem
将复选框作为其项目
复选框是使用 JCheckBox 类创建的
可有文本字符串和(或)图标
在单击并释放 JCheckBoxMenuItem 时,
菜单项的状态会变为选定或取消选定
Designed by Chiyong,?200537
JRadioButtonMenuItem
除了在任何时间点都只能选择一个单选按钮外,其他的与复选框类似
可有文本字符串和(或)图标
单击选定的单选按钮不会改变其状态
单击未选定的单选按钮时将取消选定此前选定的单选按钮
Designed by Chiyong,?200538
菜单使用示例
import javax.swing.*;
import java.awt.*;
public class Menutest extends JApplet {
public void init() {
JMenuBar mb = new JMenuBar();
JMenu fileMenu = new JMenu("显示 ");
JMenu pullRightMenu = new JMenu(“问好 ");
fileMenu.add("欢迎 ");
fileMenu.addSeparator();
fileMenu.add(pullRightMenu);
fileMenu.add("退出 ");
pullRightMenu.add(new JCheckBoxMenuItem("早上好! "));
pullRightMenu.add(new JCheckBoxMenuItem("下午好! "));
pullRightMenu.add(new JCheckBoxMenuItem("晚安! 再见! "));
mb.add(fileMenu); setJMenuBar(mb);
}
}
Designed by Chiyong,?200539
总结 2-1
Java 基本类是作为 AWT 的扩展而开发的
Swing 是 JFC 下的一组类,提供轻量级可视化组件,可用于创建美观的 GUI
Swing 中的容器有两类:顶级容器、中间容器
通过 Swing标签既可以显示文本,也可以显示图像
Designed by Chiyong,?200540
总结 2-2
JTextComponent是 Swing文本组件的根类
Swing中用于选择性输入的常用组件有:
JCheckBox,JRadioButton,JList、
JComboBox
菜单是 GUI 中非常有用的一部分
Designed by Chiyong,?200541
Java2 网络编程基础
Swing
第九章
Designed by Chiyong,?20052
回顾
Graphics 类用于在屏幕上绘制诸如文本、
线条、矩形和椭圆的对象。
Font 类用于使 Java 程序输出结果中的文本显得更生动。
FontMetrics 类用于获得关于字体的信息。
Color 类用于向应用程序或小应用程序组件添加颜色。
绘图模式决定了对象如何被画在窗口中。
Designed by Chiyong,?20053
目标
描述 Swing 的结构
使用 Swing GUI 的容器
使用 Swing文本组件
使用 Swing中用于选择性输入的常用组件
使用 Swing菜单
Designed by Chiyong,?20054
简介
许多软件平台都提供“基本类库” (FC)
( Foundation Class)
基本类库简化了设计过程,并减少了在编写代码上花费的时间
Microsoft 基本类 (MFC) 和 Java 基本类 (JFC) 是两个使用广泛的类库
Designed by Chiyong,?20055
Java 基本类库 (JFC)
JFC 通过添加一组 GUI 类库扩展了原始 AWT
JFC提供附加的可视化组件类以及屏幕设计的独特方式
JFC 是一组 API的集合,包括以下的一些模块,
抽象窗口工具包( Abstract Window Toolkit)
新 GUI类库( swing)
支持二维模型的类库( Java 2D)
支持拖放的类库( Drag and Drop)
支持易用性的类库( Accessibility)
Designed by Chiyong,?20056
Swing介绍
Java1.2引入称为 Swing的新的 GUI组件库,是 Sun公司用来描述下一代图形界面的标准。
Swing继承了 AWT,但它是 100%纯 Java代码实现,
不依赖于任何平台,并且可以自由设置和改变界面的整体风格( pluggable look and feel,PL&F)。
尽管 Swing是从 AWT中派生下来的,但 Swing并不使用 AWT组件,这保证了 Swing界面在各种平台显示的一致性。
Swing包括 javax.swing包及其子包。
Designed by Chiyong,?20057
MVC设计模式模型-视图-控制 体系
模型,存储定义组件的数据。
视图,维护组件的可视化表示,即外观。
控制,用于处理用户和组件的交互。
例如,Swing的改变应用程序的可视化外观功能,目录树结构的实现等,都是基于 MVC模式实现的
Designed by Chiyong,?20058
Swing 结构
Object
Component
JFrame
Container
Window
Frame Dialog
JDialog
JText
JComboBox
JLabel
JList
JMenuBar
JOptionPane
JPanel
JScrollBar
AbstractButton
JToggleButton JMenuItem JButton
JCheckBox JRadioButton
JComponent
JMenu
Designed by Chiyong,?20059
Swing 组件
Swing 组件独立于本地窗口系统。
Swing组件类大部分都以 J 开头。
Swing 组件是基于 AWT 构建,包含了
AWT 可视化组件的替代组件,也包含了其它复杂组件 - 树和表
Designed by Chiyong,?200510
Swing 应用程序的容器层次
设计 GUI 时,都有用于放置可视化组件的主窗口。
Container 对象可用于将组件组合在一起。
容器中的组件根据特定布局排列。
Swing 中的容器有两类:
- 顶级容器
- 中间容器
Designed by Chiyong,?200511
顶级容器
JFrame,用于框架窗口的类,此窗口带有边框、标题、用于关闭和最小化窗口的图标等。带 GUI 的应用程序通常至少使用一个框架窗口 。
JDialog,用于对话框的类。
JApplet,用于使用 Swing 组件的 Java
Applet 的类 。
Designed by Chiyong,?200512
中间容器
JPanel,最灵活、最常用的中间容器。
JScrollPane,与 JPanel 类似,但还可在大的组件或可扩展组件周围提供滚动条。
JTabbedPane,包含多个组件,但一次只显示一个组件。用户可在组件之间方便地切换。
JToolBar,按行或列排列一组组件(通常是按钮)。
Designed by Chiyong,?200513
Swing GUI框架顶级容器
JToolBar组件
JTabbedPane
组件
JScrollPane
组件
Designed by Chiyong,?200514
基本的 Swing 应用程序
import javax.swing.*;
public class HelloSwing {
public static void main(String[] args) {
JFrame frame = new JFrame("HelloSwing");
JLabel label = new JLabel("你好,Swing");
frame.getContentPane().add(label);
frame.setDefaultCloseOperation
(JFrame.EXIT_ON_CLOSE);
frame.setSize(300,200);
frame.setVisible(true);
}
}
导入必要的包,一般还需导 入:
import java.awt.*;
import java.awt.event.*;设置一个顶级容器创建一个
Swing组件将组件添加到容器 内容窗格实现了在单击,关闭,按钮时,
可以关闭窗口。如果使用的早期版本的平台,则需要通过事件监听器实现
Designed by Chiyong,?200515
JFrame
是 放置其他 Swing 组件的顶级容器
JFrame 组件用于在 Swing 程序中创建窗体
它的构造函数:
JFrame()
JFrame(String Title)
组件必须添加至内容窗格,而不是直接添加至 JFrame 对象,示例:
frame.getContentPane().add(b);
Designed by Chiyong,?200516
JPanel
JPanel 组件是一个中间容器
用于将小型的轻量级组件组合在一起
JPanel 的缺省布局为 FlowLayout
JPanel 具有下列构造函数:
JPanel()
JPanel(LayoutManager lm)
Designed by Chiyong,?200517
JButton
Swing 的按钮相对于 AWT中 Button类提供了更多的功能。
JButton类允许用图标、字符串或两者同时构造一个按钮。
构造函数如下:
JButton()
JButton(Icon icon),icon表示使用的图标
JButton(String text),text表示使用的字符串
JButton(String text,Icon icon)
…
ImageIcon buttonIcon1 = new ImageIcon("on.gif");
JButton b1 = new JButton("First Button",buttonIcon1);
b1.setMnemonic(KeyEvent.VK_F);
… 设置键盘快捷方式创建一个带图标 的 JButton
Designed by Chiyong,?200518
JPanel和 JButton使用示例
import java.awt.*;
import javax.swing.*;
class PanelDemo extends JFrame {
public PanelDemo( String title){
super(title);
Container c=getContentPane();
JPanel cpane = new JPanel();
JButton ok = new JButton("确定 ");
cpane.add(ok);
JButton cancel = new JButton("取消 ");
cpane.add(cancel);
c.add(cpane,BorderLayout.SOUTH);
}
public static void main(String args[]) {
PanelDemo pd=new PanelDemo("JPanel测试 ");
pd.setSize(300,200);
pd.setVisible(true);
}
}
Designed by Chiyong,?200519
JLabel
它既可以显示文本也可以显示图像
构造函数如下:
JLabel(Icon icon),icon表示使用的图标
JLabel(String text,Icon icon,int align),text表示使用的字符串 ; icon表示使用的图标 ;align表示水平对齐方式,其值可以为,LEFT,RIGHT、
CENTER。
…
ImageIcon icon = new ImageIcon("Calv.gif");
JLabel calv_label = new JLabel(" 这是 Calvin",icon,
SwingConstants.LEFT);
…
Designed by Chiyong,?200520
文本组件
JtextComponent 为所有 Swing 文本组件的根类
JTextField
JTextComponent JEditorPane
JTextArea
JTextPane
JPasswordField
Designed by Chiyong,?200521
JTextField
JTextField 组件允许输入或编辑单行文本
此类的构造函数包括:
JTextField()
JTextField(Document doc,String text,int
columns)
JTextField(int columns)
JTextField(String text)
JTextField(String text,int columns)
…
Container con = getContentPane();
con.setLayout(new FlowLayout());
JLabel jl = new JLabel(“文本域,); con.add(jl);
JTextField tf = new JTextField(20); con.add(tf);
…
Designed by Chiyong,?200522
JTextArea
JTextArea 组件用于接受来自用户的多行文本
它可实现可滚动界面
JTextArea 组件可使用下列构造函数创建:
JTextArea()
JTextArea(int rows,int cols)
JTextArea(String text)
JTextArea(String text,int rows,int cols)
JTextArea(Document doc)
JTextArea(Document doc,String text,int rows,
int cols)
…
JLabel jl = new JLabel(“文本区,);
con.add(jl);
JTextArea ta = new JTextArea(5,10);
con.add(ta);
…
Designed by Chiyong,?200523
选择性输入
为了简化表单填写过程,通常为用户提供多种可供选择的选项,而无需用户写出他们的响应。常用于选择性输入的组件有:
复选框
单选按钮
列表框
组合框
Designed by Chiyong,?200524
复选框
复选框用于为用户提供一组选项
JCheckBox 类具有下列构造函数:
JCheckBox()
JCheckBox(Icon icon)
JCheckBox(Icon icon,boolean selected)
JCheckBox(String text)
JCheckBox(String text,boolean selected)
JCheckBox(String text,Icon icon)
JCheckBox(String text,Icon icon,boolean
selected)
Designed by Chiyong,?200525
单选按钮
单选按钮允许用户从多个选项中选择其中一个
ButtonGroup 用于在 Swing 中创建组
JRadioButton 对象可使用下列构造函数创建:
- JRadioButton()
- JRadioButton(Icon icon)
- JRadioButton(Icon,boolean selected)
- JRadioButton(String text)
- JRadioButton(String text,boolean selected)
- JRadioButton(String text,Icon icon)
- JRadioButton(String text,Icon icon,boolean selected)
Designed by Chiyong,?200526
JCheckBox和 JRadioButton使用示例
import java.awt.*;
import javax.swing.*;
class Hobby extends JPanel {
JCheckBox c1 = new JCheckBox("阅读 ",false);
JCheckBox c2 = new JCheckBox("音乐 ",false);
JCheckBox c3 = new JCheckBox("绘画 ",false);
JRadioButton rad1 = new JRadioButton("大专 ");
JRadioButton rad2 = new JRadioButton("本科 ");
JRadioButton rad3 = new JRadioButton("硕士 ");
JLabel jl = new JLabel("您有什么爱好? " );
JLabel j2 = new JLabel("您的最高学历? " );
JButton exitbtn = new JButton("退出 ");
public Hobby( ) {
setLayout(new GridLayout(9,1));
add(jl); add(c1); add(c2); add(c3);
add(j2); add(rad1); add(rad2); add(rad3); add(exitbtn);
}
}
public class Hobbytest extends JFrame {
Hobbytest() {
super();
getContentPane().add(new Hobby());
setSize(300,200); setVisible(true);
}
public static void main(String args[]) {
new Hobbytest(); }
}
Designed by Chiyong,?200527
列表
在可供选择的选项很多时,可向用户呈现一个列表来供他们选择
JList 组件依次排列项目列表,这些项目可以单选或多选
JList 类既可显示字符串,也可显示图标
JList 不支持双击
MouseListener 可用于解决双击问题
Designed by Chiyong,?200528
JList 构造函数
public JList(),使用空模型构造 JList
public JList(ListModel dataModel),构造一个列表,用它显示指定模型中的元素。
public JList (Object [] listData),构造一个列表以显示指定数组 listData的元素。
JList 不支持滚动。要启用滚动,可使用下列代码,
JScrollPane myScrollPane=new JScrollPane();
myScrollPane.getViewport().setView(dataList);
…
String stars[] = {"安东尼奥,班德拉斯 ","来昂纳多,迪卡普尼奥 ","桑德拉,布洛克 ","休,格兰特 ","朱莉亚,罗伯茨 "};
JList moviestars = new JList(stars);
…
Designed by Chiyong,?200529
组合框
文本域和下拉列表的组合
在 Swing 中,组合框由 JComboBox 表示
构造函数如下:
public JComboBox(),此构造函数使用缺省数据模型创建 JComboBox
public JComboBox(ComboBoxModel asModel),使用现有 ComboBoxModel 中的项目的组合框
public JComboBox(Object [] items),包含指定数组元素的组合框
…
String names[] = {"弗雷德里克,福西斯 ","约翰,克里沙姆
","玛丽,希金斯,克拉克 ","帕特丽夏,康威尔 "};
JComboBox authors = new JComboBox(names);
…
Designed by Chiyong,?200530
菜单显示项目列表,指明各种任务。
选择或单击某个选项时会打开另一个列表或子菜单。
Swing 菜单由菜单栏、菜单和菜单项构成。
菜单栏是所有菜单和菜单项的根菜单
Designed by Chiyong,?200531
JFC 菜单组件
JMenuBar JPopupMenu AbstractButton JSeperator
JMenuItem
JMenu JCheckBoxMenuItem JRadioButtonMenuItem
JComponent
Container
Component
Object
Designed by Chiyong,?200532
JMenuBar
JMenuBar 是可通过 JFrame,JWindow 或
JInternalFrame 的根窗格添加至容器的组件。
由多个 JMenu 组成,每个 JMenu 在
JMenubar 中都表示为字符串。
JMenuBar 需要两个附加类:
- SingleSelectionModel类,跟踪当前选定的菜单
- LookAndFeel类,负责绘制菜单栏以及对在其中发生的事件作出响应
Designed by Chiyong,?200533
JMenu
JMenu 在 JMenuBar 下以文本字符串形式显示,而在用户单击它时,则以弹出式菜单显示。
JMenu 具有两个附加类:
- JPopupMenu,用于显示 JMenu 的菜单项
- LookAndFeel,负责绘制菜单栏中的菜单以及对在其中发生的所有事件作出响应
Designed by Chiyong,?200534
JPopupMenu 的函数方法 用途
public JMenuItem add(JMenuItem
menuItem)
将指定菜单项附加至菜单末尾
public JMenuItem add(String s) 使用指定文本新建菜单项,并将其添加至菜单末尾
public void show(Component c,int x,
int y)
在组件 c的坐标 (x,y) 位置显示弹出式菜单
public boolean isPopupTrigger() 确定鼠标事件是否为平台的弹出触发器
Designed by Chiyong,?200535
JMenuItem
JMenu 或 JPopupMenu 中的一个组件,以文本字符串形式显示,可以具有图标
JMenuItem 的外观可以修改,如字体、颜色、背景、边框等
除字符串外,在 JMenuItem 中还可以添加图标
Designed by Chiyong,?200536
JCheckBoxMenuItem
将复选框作为其项目
复选框是使用 JCheckBox 类创建的
可有文本字符串和(或)图标
在单击并释放 JCheckBoxMenuItem 时,
菜单项的状态会变为选定或取消选定
Designed by Chiyong,?200537
JRadioButtonMenuItem
除了在任何时间点都只能选择一个单选按钮外,其他的与复选框类似
可有文本字符串和(或)图标
单击选定的单选按钮不会改变其状态
单击未选定的单选按钮时将取消选定此前选定的单选按钮
Designed by Chiyong,?200538
菜单使用示例
import javax.swing.*;
import java.awt.*;
public class Menutest extends JApplet {
public void init() {
JMenuBar mb = new JMenuBar();
JMenu fileMenu = new JMenu("显示 ");
JMenu pullRightMenu = new JMenu(“问好 ");
fileMenu.add("欢迎 ");
fileMenu.addSeparator();
fileMenu.add(pullRightMenu);
fileMenu.add("退出 ");
pullRightMenu.add(new JCheckBoxMenuItem("早上好! "));
pullRightMenu.add(new JCheckBoxMenuItem("下午好! "));
pullRightMenu.add(new JCheckBoxMenuItem("晚安! 再见! "));
mb.add(fileMenu); setJMenuBar(mb);
}
}
Designed by Chiyong,?200539
总结 2-1
Java 基本类是作为 AWT 的扩展而开发的
Swing 是 JFC 下的一组类,提供轻量级可视化组件,可用于创建美观的 GUI
Swing 中的容器有两类:顶级容器、中间容器
通过 Swing标签既可以显示文本,也可以显示图像
Designed by Chiyong,?200540
总结 2-2
JTextComponent是 Swing文本组件的根类
Swing中用于选择性输入的常用组件有:
JCheckBox,JRadioButton,JList、
JComboBox
菜单是 GUI 中非常有用的一部分
Designed by Chiyong,?200541