1、单击此处编辑母版标题样式,第一级,第二级,*,Swing,第九章,1,2,回顾,Graphics,类用于在屏幕上绘制诸如文本、线条、矩形和椭圆的对象。,Font,类用于使,Java,程序输出结果中的文本显得更生动。,FontMetrics,类用于获得关于字体的信息。,Color,类用于向应用程序或小应用程序组件添加颜色。,绘图模式决定了对象如何被画在窗口中。,3,目标,描述,Swing,的结构,使用,Swing,GUI,的容器,使用,Swing,文本组件,使用,Swing,中用于选择性输入的常用组件,使用,Swing,菜单,4,简介,许多软件平台都提供“基本类库”(,FC),基本类库简化了设计
2、过程,并减少了在编写代码上花费的时间,Microsoft,基本类(,MFC),和,Java,基本类(,JFC),是两个使用广泛的类库,5,Java,基本类库(,JFC),JFC,通过添加一组,GUI,类库扩展了原始,AWT,JFC,提供附加的可视化组件类以及屏幕设计的独特方式,JFC,是一组,API,,包括以下的一些模块,:,Swing,组件集,可访问性,API,拖放,API,Java 2D API,6,Swing,介绍,Java1.2,引入称为,Swing,的新的,GUI,组件库。,Swing,包括,javax.swing,包及其子包。,Swing,有一个与平台无关的实现,而且具有一个艺术状
3、态的属性集,。,尽管,Swing,独立于,AWT,,,但它是依照基本的,AWT,类实现的。,7,MVC,设计模式,8,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,9,Swing,组件,Swin
4、g,组件独立于本地窗口系统。,Swing,组件除了,AbstractButton,类之外都以,J,开头。,Swing,组件是基于,AWT,构建。,包含,AWT,可视化组件的替代组件,也包含复杂组件-树和表,J,10,Swing,应用程序的容器层次,设计,GUI,时,都有用于放置可视化组件的主窗口。,Container,对象可用于将组件组合在一起。,容器中的组件根据特定布局排列。,Swing,中的容器有两类:,-顶级容器,-中间容器,11,顶级容器,JFrame,:,用于框架窗口的类,此窗口带有边框、标题、用于关闭和最小化窗口的图标等。带,GUI,的应用程序通常至少使用一个框架窗口,。,JDia
5、log,:,用于对话框的类。,JApplet,:,用于使用,Swing,组件的,Java Applet,的类,。,12,中间容器,JPanel,:,最灵活、最常用的中间容器。,JScrollPane,:,与,JPanel,类似,但还可在大的组件或可扩展组件周围提供滚动条。,JTabbedPane,:,包含多个组件,但一次只显示一个组件。用户可在组件之间方便地切换。,JToolBar,:,按行或列排列一组组件(通常是按钮)。,13,Swing GUI,框架,你好,世界,菜单栏,顶级容器,GUI,组件,GUI,组件,内容窗格,14,基本的,Swing,应用程序,import javax.swing
6、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 j
7、ava.awt.*;,import java.awt.event.*;,设置一个,顶级容器,创建一个,Swing,组件,将组件添加到,容器内容窗格,实现了在单击,“,关闭,”,按钮时,,可以关闭窗口。,如果使用的,早期版本的平台,则需要通过事件监听器实现,15,JFrame,是,放置其他,Swing,组件的顶级容器,JFrame,组件用于在,Swing,程序中创建窗体,它的构造函数:,JFrame(),JFrame(String Title),组件必须添加至内容窗格,而不是直接添加至,JFrame,对象,示例:,frame.getContentPane().add(b);,16,JPanel,
8、JPanel,组件是一个中间容器,用于将小型的轻量级组件组合在一起,JPanel,的缺省布局为,FlowLayout,JPanel,具有下列构造函数:,JPanel(),JPanel(LayoutManager lm),17,JButton,Swing,的按钮相对于,AWT,中,Button,类提供了更多的功能。,JButton,类允许用图标、字符串或两者同时构造一个按钮。,构造函数如下:,JButton(),JButton(Icon icon),:icon,表示使用的图标,JButton(String text),:text,表示使用的字符串,JButton(String text,Icon
9、 icon),ImageIcon buttonIcon1=new ImageIcon(on.gif);,JButton b1=new JButton(First Button,buttonIcon1);,b1.setMnemonic(KeyEvent.VK_F);,设置键盘,快捷方式,创建一个带图标的,JButton,18,JPanel,和,JButton,使用示例,import java.awt.*;,import javax.swing.*;,class PanelDemo extends JFrame,public PanelDemo(String title),super(title)
10、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.setVisibl
11、e(true);,19,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);,20,文本组件
12、JtextComponent,为所有,Swing,文本组件的根类,JTextField,JTextComponent,JEditorPane,JTextArea,JTextPane,JPasswordField,21,JTextField,JTextField,组件允许输入或编辑单行文本,此类的构造函数包括:,JTextField(),JTextField(Document doc,String text,int columns),JTextField(int columns),JTextField(String text),JTextField(String text,int column
13、s),Container con=getContentPane();,con.setLayout(new FlowLayout();,JLabel jl=new JLabel(,“,文本域,”,);,con.add(jl);,JTextField tf=new JTextField(20);con.add(tf);,22,JTextArea,JTextArea,组件用于接受来自用户的多行文本,它可实现可滚动界面,JTextArea,组件可使用下列构造函数创建:,JTextArea(),JTextArea(int rows,int cols),JTextArea(String text),JTe
14、xtArea(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);,23,选择性输入,为了简化表单填写过程,通常为用户提供多种可供选择的选项,而无需用户写出他们的响应。常用于选择性输入的组件有:,复选框,单选按钮,列表框,组合框,24,复选框,复选框
15、用于为用户提供一组选项,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),25,单选按钮,单选按钮允许用户从多个选项中选择其中一个,ButtonGroup,用于在,Swing
16、中创建组,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),26,JCheckBox,和,JRadioButton,使用示例,
17、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 JRadioBut
18、ton(,硕士,);,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()
19、getContentPane().add(new Hobby();,setSize(300,200);setVisible(true);,public static void main(String args),new Hobbytest();,27,列表,在可供选择的选项很多时,可向用户呈现一个列表来供他们选择,JList,组件依次排列项目列表,这些项目可以单选或多选,JList,类既可显示字符串,也可显示图标,JList,不支持双击,MouseListener,可用于解决双击问题,28,JList,构造函数,public JList(),:,使用空模型构造,JList,public J
20、List(ListModel dataModel),:,构造一个列表,,用它显示指定模型中的元素。,public JList(Object listData),:,构造一个列表以显示指定数组,listData,的元素。,JList,不支持滚动。要启用滚动,可使用下列代码:,JScrollPane myScrollPane=new JScrollPane();,myScrollPane.getViewport().setView(dataList);,String stars=,安东尼奥.班德拉斯,来昂纳多.迪卡普尼奥,桑德拉.布洛克,休.格兰特,朱莉亚.罗伯茨,;,JList moviesta
21、rs=new JList(stars);,29,组合框,文本域和下拉列表的组合,在,Swing,中,组合框由,JComboBox,表示,构造函数如下:,public JComboBox(),:,此构造函数使用缺省数据模型创建,JComboBox,public JComboBox(ComboBoxModel asModel),:,使用现有,ComboBoxModel,中的项目的组合框,public JComboBox(Object items),:,包含指定数组元素的组合框,String names=,弗雷德里克,.,福西斯,约翰,.,克里沙姆,玛丽,.,希金斯,.,克拉克,帕特丽夏,.,康威尔
22、JComboBox authors=new JComboBox(names);,30,菜单显示项目列表,指明各种任务。,选择或单击某个选项时会打开另一个列表或子菜单。,Swing,菜单由菜单栏、菜单和菜单项构成。,菜单栏是所有菜单和菜单项的根,菜单,31,JFC,菜单组件,JMenuBar,JPopupMenu,AbstractButton,JSeperator,JMenuItem,JMenu,JCheckBoxMenuItem,JRadioButtonMenuItem,JComponent,Container,Component,Object,32,JMenuBar,JMenuBar,
23、是可通过,JFrame、JWindow,或,JInternalFrame,的根窗格添加至容器的组件。,由多个,JMenu,组成,每个,JMenu,在,JMenubar,中都表示为字符串。,JMenuBar,需要两个附加类:,SingleSelectionModel,类:跟踪当前选定的菜单,LookAndFeel,类:负责绘制菜单栏以及对在其中发生的事件作出响应,33,JMenu,JMenu,在,JMenuBar,下以文本字符串形式显示,而在用户单击它时,则以弹出式菜单显示。,JMenu,具有两个附加类:,JPopupMenu:,用于显示,JMenu,的菜单项,LookAndFeel:,负责绘制
24、菜单栏中的菜单以及对在其中发生的所有事件作出响应,34,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(),确定鼠标事件是否为平台的弹出触发器,35,JMenuItem,JMenu,或,JPo
25、pupMenu,中的一个组件,以文本字符串形式显示,可以具有图标,JMenuItem,的外观可以修改,如字体、颜色、背景、边框等,除字符串外,在,JMenuItem,中还可以添加图标,36,JCheckBoxMenuItem,将复选框作为其项目,复选框是使用,JCheckBox,类创建的,可有文本字符串和(或)图标,在单击并释放,JCheckBoxMenuItem,时,菜单项的状态会变为选定或取消选定,37,JRadioButtonMenuItem,除了在任何时间点都只能选择一个单选按钮外,其他的与复选框类似,可有文本字符串和(或)图标,单击选定的单选按钮不会改变其状态,单击未选定的单选按钮时
26、将取消选定此前选定的单选按钮,38,菜单使用示例,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);,file
27、Menu.add(,退出,);,pullRightMenu.add(new JCheckBoxMenuItem(,早上好!,);,pullRightMenu.add(new JCheckBoxMenuItem(,下午好!,);,pullRightMenu.add(new JCheckBoxMenuItem(,晚安!,再见!,);,mb.add(fileMenu);setJMenuBar(mb);,39,总结 2-1,Java,基本类是作为,AWT,的扩展而开发的,Swing,是,JFC,下的一组类,提供轻量级可视化组件,可用于创建美观的,GUI,Swing,中的容器有两类:顶级容器、中间容器,通过,Swing,标签既可以显示文本,也可以显示图像,40,总结 2-2,JTextComponent,是,Swing,文本组件的根类,Swing,中用于选择性输入的常用组件有:,JCheckBox,、,JRadioButton,、,JList,、,JComboBox,菜单是,GUI,中非常有用的一部分,