单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第18讲 Java Swing,18.1 Swing 入门,18.2 容器,18.3 布局管理,18.4 根本组件,18.5 本讲小结,18.1 Swing入门,GUI编程的步骤:,1创立容器;,2为容器设置布局;,3创立组件,把其添加到容器中;,4为组件添加事件处理代码。,18.1.2 显示框架,drawString(String s,int x,int y)从参数x、y指定的坐标位置处,从左向右绘制参数s指定的字符串。,drawChars(char data,int offset,int length,int x,int y)绘制data数组中的局部字符,length指定数组中要连续绘制的字符的个数,offset是首字符在数组中的位置。,18.2 容器,容器是用来盛装其它,GUI,组件的,GUI,组件,,AWT,中的容器类有,Window,、,Panel,、,Applet,、,Frame,、,dialog,等,而,Swing,容器类有,JFrame,、,JWindow,、,JDialog,、,JApplet,、,JPanel,等。本节介绍几种常用的,Swing,容器。,18.2.1 顶层容器,Swing中的JFrame、JDialog、JApplet和JWindow直接继承了AWT组件,它们是重量级的,被称为顶层容器。,1JFrame继承自AWT中的Frame类,通常作为主窗体使用。,2JDialog用于创立对话框,对话框不能单独存在,必须借助于窗体。,3JApplet可作为Java小应用程序的窗体,被嵌入到网页中运行。,4JWindow与JFrame类似,所不同的是JWindow没有用于默认关闭操作或是菜单栏的属性。,18.2.2 中间层容器,有些容器不能直接显示到电脑屏幕上,必须放置到顶层容器或其它容器中,它们存在的目的是放置各种组件。常用的中间层容器有,JPanel,、,JScrollPane,、,JSplitPane,、,JToolBar,、,JInternalFrame,、,JLayeredPane,、,JRootPane,、,JTabbedPane,1JPanel,JPanel面板常用来放置其它轻量级组件。默认状态下,它不绘制任何东西,可以很容易的为其设置边框,也可以嵌套使用。,2JScrollPane,JScrollPane滚动面板JScrollPane包括九个局部:一个中心显示区、四个角和四条边,3JSplitPane,JSplitPane分割面板是一个可以被分成两个显示区域的面板,分割方式可以是水平分割,也可以是垂直分割。如果设置了动态拖拽功能,那么拖动分割线时两边组件会随着拖拽动态改变大小。通常先把组件放到JScrollPane中,再把JScrollPane放到JSplitPane中,这样每个窗口都可以拖动滚动条看到组件的全部内容。,4JTabbedPane,JTabbedPane页签面板可以在窗体上显示多个控件。可以将不同类别的控件放到不同的Tab页上,然后通过需要点击相应的Tab页。可以通过setTabComponentAt方法将控件放到Tab上。,5JLayeredPane,6JInternalFrame,JInternalFrame内部窗体具有最大化、最小化、关闭、参加菜单等功能。JInternalFrame是轻量级组件,不能单独显示,为了方便管理,一般会将JInternalFrame参加JDesktopPane中,JDesktopPane是一种特殊的分层面板,是JLayeredPane子类,用来建立虚拟桌面(VitualDesktop).它可以显示并管理众多JInternalFrame之间的层次关系。,7JOptionPane,JOptionPane选择面板能够方便地弹出满足用户要求的各种类型对话框。此类中包含showXxxDialog()方法:,1showConfirmDialog()方法:显示确认对话框;,2showInputDialog()方法:显示输入对话框;,3showMessageDialog()方法:显示消息对话框;,4showOptionDialog()方法:显示选择对话框。,18.3 布局管理,Java,为了实现跨平台的特性并且获得动态的布局效果,采用布局管理器对容器中的组件进行布局。,Java,定义了多种布局管理器,通过布局管理器之间的组合,能够设计出复杂的界面,而且在不同操作系统平台上都能够有一致的显示界面。,18.3.1 BorderLayout,BorderLayout 是JFrame的默认布局,可以直接通过add()方法为其添加组件,默认情况下组件被放在JFrame的中心位置,并且组件向四周扩展,占满整个JFrame,BorderLayout的特点:,1把容器分为五个方位:东、西、南、北、中,组件按照方位被添加到容器。,2组件的大小占满整个所属方位,组件的大小随着容器的变化而变化。,3如果不指定方位,组件默认被添加到容器的中心位置,并且占满整个容器。,18.3.2 FlowLayout,FlowLayout是JPanel的默认布局方式。使用FlowLayout布局方式的容器中,组件按照参加的先后顺序按照设置的对齐方式居中、左对齐、右对齐从左向右排列,一行排满后再从下一行开始继续排列。,在这种布局方式中,组件的大小不会随着容器大小的变化而改变,其位置可能会发生改变。,18.3.3 GirdLayout,GridLayout是把容器分成MN个网格,M是行数,N是列数,M和N的值可以在创立GridLayout的对象时确定。组件按照从左到右,从上到下的顺序放入容器,容器大小改变时,组件的相对位置不变,大小会改变。,18.3.4 CardLayout,CardLayout,是把容器分成多张卡片,每个组件占用一张卡片,组件之间的关系就像一副牌,叠在一起。初始时显示第一张卡片,通过,CardLayout,类提供的,first(),方法可以切换到第一张卡片,,last(),方法可以切换到最后一张卡片,,next(),方法可以切换到下一张卡片,18.3.5 BoxLayout,BoxLayout 可以通过参数 X_AXIS、Y_AXIS把控件进行水平或者垂直排列布局,X_AXIS 表示水平排列,Y_AXIS 表示垂直排列。BoxLayout 的构造函数有两个参数,一个参数定义使用该 BoxLayout 的容器,另一个参数是指定 BoxLayout 是采用水平还是垂直排列。,当BoxLayout进行布局时,假设布局的整个水平或者垂直空间的尺寸不能放下所有控件,那么BoxLayout会试图调整各个控件的大小来填充整个布局的水平或者垂直空间。,BoxLayout往往和Box这个容器结合在一起使用,Box类的静态方法createHorizontalBox()可以获得一个水平存放组件的Box对象。静态方法createVerticalBox()可以获得一个可以竖直存放组件的Box对象。,18.3.6 绝对布局,每个组件包括容器都是一个矩形区域,该矩形区域的左上角为坐标原点0,0,x轴向右增大,y轴向下增大,使用绝对布局的操作步骤:,1首先利用setLayout(null)语句将容器的布局设置为null布局空布局;,2再调用组件的setBounds(int x,int y,int width,int height)方法,设置组件在容器中的大小和位置,单位均为像素。,18.4 根本组件,因为所有轻量级组件类都继承于JComponent,而JComponent类又是Container类的子类,因此,所有的Swing组件都可作为容器使用。本节只介绍常用的几种根本组件。,18.4.1 AbstractButton,Swing中许多类型的按钮,包括复选框、单项选择按钮等,都是从AbstractButton类继承而来的。可以使用setBorder()方法为组件添加边框,还可以把单项选择按钮添加到按钮组中。,18.4.2 菜单,下拉式菜单也是从,AbstractButton,继承而来,而弹出式菜单继承于,JComponent,类。在使用下拉式菜单时,必须为容器设置菜单条,然后把菜单添加到菜单条上,把菜单项添加到菜单上。在使用弹出式菜单时,必须结合鼠标事件显示,。,18.4.3 标签和文本编辑组件,JLabel标签用于显示文本或图像。可以通过设置垂直和水平对齐方式,指定标签显示区中标签内容在何处对齐。默认情况下,只显示文本的标签是开始边对齐,而只显示图像的标签那么水平居中对齐。,18.4.4 组合框和列表框,用户可以从JComboBox组合框,也称下拉列表中列出的一组元素中选择一个,而且只能选一个。而JList列表框与组合框完全不同,可以进行多重选择,并且其在屏幕上可以占据固定行数的空间,JList 不实现直接滚动。要创立一个滚动的列表,要将它添加到 JScrollPane中。,18.4.5 滑块和进度条,通过JSlider滑块的前后移动来控制数据的输入有时能使某种操作更直观,如音量的控制。JProgressBar进度条能够动态的显示的数据的状态。,18.4.6 选择框,JFileChooser文件对话框支持翻开和保存文件,使文件操作更方便,但要真正翻开和保存文件,还要结合I/O操作。,JColorChooser颜色选择对话框是Java中已经定义好的颜色选择器,通过它可以很方便的得到各种颜色。,18.4.7 表格和树,JTable表格是数据的视图。,JTree树一个JTree对象只是提供了数据的视图,通过查询其数据模型可获得数据。,树中显示的每一行包含一项数据,称之为节点node。每颗树有一个根节点root node,其他节点都是它的子孙。,分支节点可以有任意多个孩子。,18.5 本讲小结,本讲首先讲述了Swing的根底知识,然后对容器、布局管理进行了介绍,最后讲述了几种常用的组件。,讲后练习,1,、编写程序实现下面的界面。,