版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1第九章第九章 Swing图形用户界面图形用户界面n9.1 概述概述n9.2 容器组件容器组件n9.3 基本组件基本组件n9.4 布局管理器布局管理器n9.5 事件处理模型事件处理模型n9.6 本章小结本章小结29.1 概述概述n图形用户界面图形用户界面(GUI)lCommand Line Graphics User Interfacel数据的图形显示形式数据的图形显示形式l友好的交互方式友好的交互方式l简化计算机软件的学习过程简化计算机软件的学习过程lGUI示例示例jdk1.7demojfcSwingSet2GUI组件组件: Labels, Text fields, Buttons等等等等3
2、9.1 概述概述n在在Java语言中,有两个包(语言中,有两个包(java.awt和和javax.swing)囊括)囊括了实现图形用户界面的所有基本元素,这些基本元素主要了实现图形用户界面的所有基本元素,这些基本元素主要包括包括容器、组件、绘图工具和布局管理器容器、组件、绘图工具和布局管理器等。等。 njava.awt是是java1.1用来建立用来建立GUI的图形包,的图形包, awt是抽象窗是抽象窗口工具包(口工具包(Abstract Window Toolkit)的缩写,其中的组)的缩写,其中的组件常被称为件常被称为AWT组件。组件。njavax.swing是是Java2提出的提出的AWT
3、的改进包,主要改善了组的改进包,主要改善了组件的显示外观,增强了组件的控制能力。件的显示外观,增强了组件的控制能力。49.1 概述概述n早期版本的早期版本的AWTAWT组件组件l在在java.awtjava.awt包里,包括包里,包括ButtonButton、CheckboxCheckbox、ScrollbarScrollbar等,等,都是都是ComponentComponent类的子类类的子类l大部分含有大部分含有native codenative code,所以随操作系统平台的不同会,所以随操作系统平台的不同会显示出不同的样子,而不能进行更改,是重量级组件显示出不同的样子,而不能进行更改,
4、是重量级组件(heavyweight components)(heavyweight components)l没有弹性、缺乏效率没有弹性、缺乏效率559.1 概述概述nAWT与与Swingljava.awt包中的类及相互关系可以用下图来描述:包中的类及相互关系可以用下图来描述:事件类字体类GraphicsComponent颜色类布局管理类java.lang.ObjectCheckboxContainerButtonWindowPanelAppletDialogFrameList图像类菜单类Scrollpane69.1 概述概述n较新的较新的SwingSwing组件组件l其名称都是在原来其名称都
5、是在原来AWTAWT组件名称前加上组件名称前加上J J,例如,例如JButtonJButton、JCheckBoxJCheckBox、JScrollbarJScrollbar等,都是等,都是JComponentJComponent类的子类类的子类lJava1.2Java1.2推出,架构在推出,架构在 AWT AWT 之上,是之上,是AWTAWT的扩展而不的扩展而不是取代是取代, AWT, AWT仍然是仍然是SwingSwing的一个必备补充。的一个必备补充。l完全是由完全是由javajava语言编写的语言编写的,其外观和功能不依赖于任何,其外观和功能不依赖于任何由宿主平台的窗口系统所提供的代码
6、,是轻量级组件由宿主平台的窗口系统所提供的代码,是轻量级组件(lightweight componentslightweight components)l可提供更丰富的视觉感受,被越来越多地使用可提供更丰富的视觉感受,被越来越多地使用79.1 概述概述nSwing组件组件l在在javax.swing包中,包中,源于源于AWT(package java.awt)的)的组件组件l定义了两种类型的组件:定义了两种类型的组件:顶层容器顶层容器(JFrame,JApplet,JDialog和和JWindow)轻量级组件轻量级组件(JComponent)lSwing组件都是组件都是AWT的的Contain
7、er类的直接子类和间接类的直接子类和间接子类。子类。lSwing组件以组件以J开头,除了有与开头,除了有与AWT类似的按钮类似的按钮(JButton)、标签(标签(JLabel)、复选框(复选框(JCheckBox)、菜单(菜单(JMenu)等基本组件外,还增加了一个丰富的高等基本组件外,还增加了一个丰富的高层组件集合,如表格(层组件集合,如表格(JTable)、)、树(树(JTree)。)。89.1 概述概述nAWT与与Swing顶层窗口类之间的关系顶层窗口类之间的关系99.1 概述概述nSwing组件组件109.1 概述概述nSwing的组件和容器层次的组件和容器层次lJComponent
8、类是除了顶层容器以外所有类是除了顶层容器以外所有Swing组件的基类,根据组件的基类,根据继承关系,我们可以在每个基类中找到大多数继承关系,我们可以在每个基类中找到大多数GUI组件的常见操组件的常见操作作lComponent 类类包含paint、repaint方法,可以在屏幕上绘制组件大多数GUI组件直接或间接扩展ComponentlContainer 类类容纳相关组件包括add方法,用来添加组件包括setLayout方法,这个方法可用来设置布局,以帮助Container对象对其中的组件进行定位和设置组件大小lJComponent 类类多数多数Swing组件的超类组件的超类可抽换的外观和感觉,
9、即可根据需求定制外观和感觉。快捷键 (通过键盘直接访问GUI组件)一般的事件处理功能119.1 概述概述 - Swing的组件和容器层次的组件和容器层次n通常将通常将javax.swing包里的包里的Swing组件归为三个层次组件归为三个层次l顶层容器顶层容器l中间层容器中间层容器l基本组件基本组件n容器层次结构容器层次结构l是一个以是一个以顶层容器顶层容器为根的树状组件集合为根的树状组件集合l为了显示在屏幕上,每个组件必须是一套为了显示在屏幕上,每个组件必须是一套容器层次结构容器层次结构的一部分的一部分n每个组件只能放置在某个容器内一次每个组件只能放置在某个容器内一次l如果某个组件已经在一个
10、容器中,又将它加到另外一个容器中,如果某个组件已经在一个容器中,又将它加到另外一个容器中,这个组件就会从第一个容器中清除这个组件就会从第一个容器中清除容器本身也是一种组件容器本身也是一种组件129.1 概述概述 - Swing的组件和容器层次的组件和容器层次n顶层容器顶层容器lSwing提供三个顶层容器的类提供三个顶层容器的类JFrame 实现单个主窗口实现单个主窗口JDialog 实现一个二级窗口实现一个二级窗口(对话框对话框)JApplet 在浏览器窗口中实现一个在浏览器窗口中实现一个applet显示区域显示区域l必须和操作系统打交道,必须和操作系统打交道,所以都是重量级组件所以都是重量级
11、组件l从继承结构上来看,它们分别是从原来从继承结构上来看,它们分别是从原来AWT组件的组件的Frame、Dialog和和Applet类继承而来。类继承而来。l每个使用每个使用Swing组件的组件的Java程序都必须至少有一个顶层程序都必须至少有一个顶层容器,别的组件都必须放在这个顶层容器上才能显现出容器,别的组件都必须放在这个顶层容器上才能显现出来。来。139.1 概述概述- Swing的组件和容器层次的组件和容器层次n中间层容器中间层容器l其存在的目的仅仅是为了容纳别的组件,其存在的目的仅仅是为了容纳别的组件,使界面有条理,使界面有条理,美观,易于控制。美观,易于控制。l分为两类分为两类一般
12、用途的一般用途的JPanelJScrollPaneJSplitPaneJTabbedPaneJToolBar特殊用途的特殊用途的JInternalFrameJRootPanel可以直接从顶层容器中获得一个可以直接从顶层容器中获得一个JRootPane对象来直接对象来直接使用,而别的中间容器使用的时候需要新建一个对象。使用,而别的中间容器使用的时候需要新建一个对象。149.1 概述概述- Swing的组件和容器层次的组件和容器层次n基本组件基本组件l通常是在图形用户界面中和用户进行交互的组件通常是在图形用户界面中和用户进行交互的组件l基本功能是和用户交互信息,而不像前两种组件那样是基本功能是和用
13、户交互信息,而不像前两种组件那样是用来容纳别的组件的用来容纳别的组件的l根据功能的不同,可被分为三类根据功能的不同,可被分为三类显示不可编辑信息的显示不可编辑信息的JLabel、JProgressBar、JToolTip有控制功能、可以用来输入信息的有控制功能、可以用来输入信息的JButton、JCheckBox、JRadioButton、JComboBox、JList、JMenu、JSlider、JSpinner、JTexComponent等能提供格式化的信息并允许用户选择的能提供格式化的信息并允许用户选择的JColorChooser、JFileChooser、JTable、JTree159
14、.1 概述概述- Swing的组件和容器层次的组件和容器层次n三层容器结构示例三层容器结构示例import javax.swing.*;import java.awt.*;public class Ex10_1 public static void main(String args) JFrame.setDefaultLookAndFeelDecorated(true); JFrame frame=new JFrame(Swing Frame); Container contentPane=frame.getContentPane(); JPanel panel=new JPanel(); p
15、anel.setBorder(BorderFactory.createLineBorder(Color.black,5); panel.setLayout(new GridLayout(2,1); JLabel label=new JLabel(Label,SwingConstants.CENTER); JButton button=new JButton(Button); panel.add(label); panel.add(button); contentPane.add(panel); frame.pack();/对组件进行排列对组件进行排列 frame.show();/显示显示 fr
16、ame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 169.1 概述概述- Swing的组件和容器层次的组件和容器层次n运行结果运行结果n程序说明程序说明n首先创建一个首先创建一个JFrame类类顶级容器顶级容器framen然后获得顶级容器的内容面板然后获得顶级容器的内容面板contentPane,只有通过它才能加,只有通过它才能加入其他组件。入其他组件。n然后创建一个然后创建一个JPanel类类的中间容器的中间容器panel,并设置边框以及布局,并设置边框以及布局n然后创建基本控制组件然后创建基本控制组件Label,button,并将它们添
17、加到中间容,并将它们添加到中间容器上器上n然后将中间容器通过内容面板添加到顶层容器上,并对组件进行然后将中间容器通过内容面板添加到顶层容器上,并对组件进行排列排列 17基于基于Swing的的Java GUI设计思路设计思路n基本的基本的java程序的程序的GUI设计工具。主要包括下述几个概念:设计工具。主要包括下述几个概念:n组件组件Component n容器容器Containern布局管理器布局管理器LayoutManagern事件处理事件处理n在在Java中,开发一个中,开发一个GUI程序,通常需要以下几步:程序,通常需要以下几步:l构建构建一个顶层容器一个顶层容器;通常是;通常是JFra
18、me或或JApplet l构建构建若干个组件若干个组件,组件可以是其它容器;,组件可以是其它容器; l设定设定容器的布局管理器容器的布局管理器;用容器的;用容器的add方法将这些组件加入到这个方法将这些组件加入到这个容器中;容器中;l设置组件设置组件事件事件;并将组件事件与代码关联。;并将组件事件与代码关联。18第九章第九章 Swing图形用户界面图形用户界面n9.1 概述概述n9.2 容器组件容器组件n9.3 基本组件基本组件n9.4 布局管理器布局管理器n9.5 事件处理模型事件处理模型n9.6 本章小结本章小结199.2 容器组件容器组件nJFramenJDialognJAppletnJ
19、PanelnJScrollPanenJSplitPanenJTabbedPanenJToolBar209.2 容器组件容器组件nSwing提供了提供了3个顶层容器类:个顶层容器类:lJFrame、JApplet、 JDialogl都是重量级组件,分别继承了都是重量级组件,分别继承了AWT组件组件Frame、Applet和和Dialogl每个顶层容器都有一个内容面板,通常直接或间接的容每个顶层容器都有一个内容面板,通常直接或间接的容纳别的可视组件纳别的可视组件l可以有选择地为顶层容器添加菜单,菜单被放置在顶层可以有选择地为顶层容器添加菜单,菜单被放置在顶层容器上容器上219.2 容器组件容器组件
20、 JFramen框体框体(JFrame)lJFrame是一种是一种具有边框具有边框的容器,它是的容器,它是Java Application程序的图形用户界面的最外层容器。程序的图形用户界面的最外层容器。l特点:特点:(1)有边框)有边框(2)能被移动、缩放和关闭)能被移动、缩放和关闭(3)作为最外层容器,不能被其它容器所包含)作为最外层容器,不能被其它容器所包含(4)默认布局:边界布局()默认布局:边界布局(BorderLayout)229.2 容器组件容器组件 JFramen类类 JFrame 是是java.awt.Frame的子类的子类n在在Swing的组件中的组件中, JFrame 并不
21、全是由并不全是由Java编写的编写的l是一种与平台关系比较密切的组件是一种与平台关系比较密切的组件(Heavyweight component)java.lang.Object | +-java.awt.Component | +-java.awt.Container | +-java.awt.Window | +-java.awt.Frame | +-javax.swing.Jframel每个包含每个包含Swing 组件的主窗口都应用组件的主窗口都应用JFrame 来实现来实现239.2 容器组件容器组件 JFramen构造函数构造函数lJFrame(); 建立一个无标题的建立一个无标题的F
22、ramelJFrame(String title); 建立一个标题为建立一个标题为title的的Frame。n常用方法常用方法lString getTitle(); 获取窗口标题获取窗口标题lvoid setTitle(String s); 设置窗口标题设置窗口标题lvoid setVisible(boolean b); 设置窗口可见性设置窗口可见性lvoid setBounds(int a, int b, int width, int height); 设置窗口位置和设置窗口位置和大小大小lvoid setBackground(Color c); 设置窗口背景颜色设置窗口背景颜色lvoid
23、pack(); 用紧凑方式显示窗口用紧凑方式显示窗口lvoid setSize(int width , int height); 设置窗口大小设置窗口大小lvoid setLocation(int x, int y); 设置初始位置。其中设置初始位置。其中x, y是窗口左是窗口左上角在屏幕上的坐标值。上角在屏幕上的坐标值。249.2 容器组件容器组件 JFramen常用方法常用方法l通过通过setDefaultCloseOperation(int operation)方法设置方法设置关闭行为。关闭行为。 l其中其中operation的取值可以是以下几种:的取值可以是以下几种:DO_NOTHIN
24、G_ON_CLOSE:当窗口关闭时,不做:当窗口关闭时,不做任何处理;任何处理;HIDE_ON_CLOSE:当窗口关闭时,隐藏这个窗口;:当窗口关闭时,隐藏这个窗口;DISPOSE_ON_CLOSE:当窗口关闭时,隐藏并处:当窗口关闭时,隐藏并处理这个窗口;理这个窗口;EXIT_ON_CLOSE:当窗口关闭时,退出程序。:当窗口关闭时,退出程序。默认是默认是HIDE_ON_CLOSE。 259.2 容器组件容器组件 JFramen创建窗体有两种方式:创建窗体有两种方式:l直接创建直接创建JFrame的对象,适合于简单框体;的对象,适合于简单框体;l继承继承JFrame类,在继承类中编写代码对框
25、体进行详细类,在继承类中编写代码对框体进行详细的刻画,适合框体比较复杂的情况。的刻画,适合框体比较复杂的情况。l大多数情况下开发人员都用第二种方法。大多数情况下开发人员都用第二种方法。n注意:框体创建以后是不可见的,必须调用注意:框体创建以后是不可见的,必须调用Window类的类的show( )方法或方法或Component类的类的setVisible( )方法显示该方法显示该框体框体n见以下两个例子:见以下两个例子:269.2 容器组件容器组件 JFramen直接创建直接创建JFrame的对象的对象import javax.swing.import javax.swing.* *; ;pub
26、lic class Sample10_2 public class Sample10_2 public static void main(String args)public static void main(String args) / / 创建一个框体对象创建一个框体对象 JFrame myWindow = new JFrame();JFrame myWindow = new JFrame(); / / 向框体中添加一个标签向框体中添加一个标签 myWindowmyWindow.add(new JLabel(“.add(new JLabel(“这是一个框体,演示了这是一个框体,演示了JFr
27、ameJFrame类的基本功能类的基本功能);); / / 设置框体的标题设置框体的标题 myWindowmyWindow.setTitle(“.setTitle(“自定义的框体自定义的框体);); / / 设置框体的大小设置框体的大小 myWindowmyWindow.setBounds(80,80,480,180);.setBounds(80,80,480,180); / / 根据接收的根据接收的booleanboolean设置框体是否可以调整大小设置框体是否可以调整大小 myWindowmyWindow.setResizable(false); .setResizable(false);
28、 / / 设置框体的可见性设置框体的可见性 myWindowmyWindow.setVisible(true);.setVisible(true); 279.2 容器组件容器组件 JFramen继承继承JFrame类类import javax.swing.*;class MyWindow extends JFrameclass MyWindow extends JFrame/ 定义无参构造函数public MyWindow()public MyWindow(boolean b)/ 向框体中添加一个标签this.add(new JLabel(“这是一个框体,演示了JFrame类的基本功能);/
29、设置框体的标题this.setTitle(“自定义的框体);/ 设置框体的大小this.setBounds(80,80,480,180);/ 根据接收的boolean设置框体是否可以调整大小this.setResizable(b); / 设置框体的可见性this.setVisible(true);public class Sample10_2public class Sample10_2public static void main(String args)/ 创建MyWindow类的对象,并传递False值使得框体不能调整大小new MyWindow(false);289.2 容器组件容器组
30、件 JFramen继承继承JFrame类类import javax.swing.*;public class MyWindow extends JFramepublic class MyWindow extends JFrame/ 定义无参构造函数public MyWindow()public MyWindow(boolean b)/ 向窗体中添加一个标签this.add(new JLabel(这是一个窗体,演示了JFrame类的基本功能);/ 设置窗体的标题this.setTitle(自定义的窗体);/ 设置窗体的大小this.setBounds(80,80,480,180);/ 根据接收的
31、boolean设置窗体是否可以调整大小this.setResizable(b); / 设置窗体的可见性this.setVisible(true);public static void main(String args)new MyWindow(false);299.2 容器组件容器组件 JFramen在在JFrame中加入组件的方法中加入组件的方法l用用getContentPane( )方法获得方法获得JFrame的内容面板,再对其加入组的内容面板,再对其加入组件:件: Container c=frame.getContentPane() c.add(childComponent)l建立一个建
32、立一个JPanel或或 JDesktopPane之类的中间容器,把组件添加到之类的中间容器,把组件添加到容器中,用容器中,用setContentPane()方法把该容器置为方法把该容器置为JFrame的内容面板:的内容面板:JPanel contentPane=new JPanel( );/把其它组件添加到把其它组件添加到Jpanel中中;frame.setContentPane(contentPane); /把把contentPane对象设置成为对象设置成为frame的内容面板的内容面板 309.2 容器组件容器组件nJFramenJDialognJAppletnJPanelnJScroll
33、PanenJSplitPanenJTabbedPanenJToolBar319.2 容器组件容器组件 JDialogn对话框(对话框(JDialog)n对话框(对话框(JDialog)与)与JFrame一样,都是有一样,都是有边框和标题的独立使用的容器,不能被其它边框和标题的独立使用的容器,不能被其它容器所包容。容器所包容。n与与JFrame的不同之处的不同之处:不能作为程序的最:不能作为程序的最外层容器,它外层容器,它必须属于某个必须属于某个JFrame,由该,由该JFrame弹出。弹出。n对话框可以接受用户的输入,实现与用户的对话框可以接受用户的输入,实现与用户的交互作用。交互作用。329
34、.2 容器组件容器组件 JDialognJDialogJDialog的继承结构的继承结构java.lang.Object | +-java.awt.Component | +-java.awt.Container | +-java.awt.Window | +-java.awt.Dialog | +-javax.swing.JDialogl要实现对话框,需要从要实现对话框,需要从JDialog派生一个类派生一个类339.2 容器组件容器组件 JDialogn构造函数构造函数lJDialog(Frame owner)JDialog(Frame owner) 功能:建立无标题的通用对话框,它属于窗
35、口功能:建立无标题的通用对话框,它属于窗口ownerowner,可以响应,可以响应其它窗口。其它窗口。lJDialog(Frame owner,b oolean d)JDialog(Frame owner,b oolean d) 功能:建立无标题的通用对话框,它属于窗口功能:建立无标题的通用对话框,它属于窗口ownerowner,若,若d d为为truetrue则不能响应其它窗口。则不能响应其它窗口。lJDialog(Frame owner, String txt)JDialog(Frame owner, String txt) 功能:建立标题为功能:建立标题为txttxt的通用对话框,它属于
36、窗口的通用对话框,它属于窗口ownerowner,可以响应,可以响应其它窗口。其它窗口。lJDialog(Frame owner, String txt, boolean d)JDialog(Frame owner, String txt, boolean d) 功能:建立标题为功能:建立标题为txttxt的通用对话框,它属于窗口的通用对话框,它属于窗口ownerowner,若,若d d为为truetrue则不能响应其它窗口。则不能响应其它窗口。349.2 容器组件容器组件 JDialogn常用方法常用方法 表列出了通用对话框表列出了通用对话框JDialogJDialog类的几个常用的方法。类
37、的几个常用的方法。方 法说 明Container getContentPane()Container getContentPane()返回该通用对话框的contentPanelvoid setLayout(LayoutManagervoid setLayout(LayoutManagermanager)manager)设置布局管理器Component add(ComponentComponent add(Componentcomp)comp)在对话框中添加组件void setBackground(Color c)void setBackground(Color c)设置对话框的背景色void
38、setLocation(int x, int y)void setLocation(int x, int y)设置对话框的显示位置void setSize(int width, int height)void setSize(int width, int height)设置对话框的大小void setVisible(boolean b)void setVisible(boolean b)设置对话框是否可见359.2 容器组件容器组件nJFramenJDialognJAppletnJPanelnJScrollPanenJSplitPanenJTabbedPanenJToolBar369.2 容器
39、组件容器组件 JAppletnJApplet的继承结构的继承结构java.lang.Object | +-java.awt.Component | +-java.awt.Container | +-java.awt.Panel | +-java.awt.Applet | +-javax.swing.JAppletn每个包含每个包含Swing 组件的组件的Applet 都应作为都应作为JApplet 的子类的子类来实现来实现nJApplet类的顶层容器由浏览器提供,通常不需要自己产类的顶层容器由浏览器提供,通常不需要自己产生一个生一个JApplet类的对象。类的对象。nJFrame和和JDial
40、og通过构造方法进行创建。通过构造方法进行创建。379.2 容器组件容器组件nJFramenJDialognJAppletnJPanelnJScrollPanenJSplitPanenJTabbedPanenJToolBar389.2 容器组件容器组件 JPaneln面板面板JPanelJPanelnSwing的JPanel,它替代了AWT的画布(Canvas)和面板(Panel),兼有二者的功能。n是一种经常使用的轻量级中间容器n在默认状态下,除了背景色外它并不绘制任何东西n很容易地设置边框和绘制特性,可以把它设置为顶层容器contentPane。有效地利用JPanel可以使版面管理更为容易
41、nJPanel不能象JFrame那样能够在桌面上浮动。399.2 容器组件容器组件 JPaneln可以通过setLayout方法来改变其布局n也可以在创建一个JPanel对象时就为它确定某种布局方式。n在默认状态下panel使用FlowLayout布局,将各组件布局在一行n对于复杂GUI,可以添加各种组件(包括面板组件)面板(JPanel)的大小由它所包含的组件决定当组件个数增加,面板(JPanel)也会随之而增大409.2 容器组件容器组件 JPaneln常用方法常用方法名称名称说明说明JPanel()JPanel()创建一个创建一个JPanelJPanel,默认布局是,默认布局是FlowL
42、ayoutFlowLayoutJPanel(LayoutManager layout)JPanel(LayoutManager layout)创建一个指定布局的创建一个指定布局的JPanelJPanelvoid add(Component comp)void add(Component comp)添加组件添加组件void add(Component comp, int index) void add(Component comp, int index) 把组件添加到特定位置上把组件添加到特定位置上int getComponentCount()int getComponentCount()获得这
43、个获得这个panelpanel里所有组件的数量里所有组件的数量Component getComponent(int index)Component getComponent(int index)获得指定序号的某个组件获得指定序号的某个组件Component getComponentAt(int x, int y)Component getComponentAt(int x, int y)获得指定位置的某个组件获得指定位置的某个组件void remove(Component)void remove(Component)移除某个组件移除某个组件void removeAll()void remove
44、All()移除所有组件移除所有组件void setLayout(LayoutManager layout)void setLayout(LayoutManager layout)设置布局设置布局LayoutManager getLayout()LayoutManager getLayout()得到现有布局得到现有布局void setBorder(Border border)void setBorder(Border border)设置边框设置边框419.2 容器组件容器组件 JPaneln利用利用JPanel创建界面创建界面import java.awt.*;import javax.swin
45、g.*;public class JPanelDemo extends JFrame public JPanel getGUI() JPanel p=new JPanel(); p.add(new JButton(Press me); return p; public static void main(String args) JPanelDemo jp=new JPanelDemo(); jp.setTitle(JPanel Demo); jp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jp.setContentPane(jp.getGU
46、I(); jp.setSize(200,200); jp.setVisible(true);429.2 容器组件容器组件nJFramenJDialognJAppletnJPanelnJScrollPanenJSplitPanenJTabbedPanenJToolBar439.2 容器组件容器组件 JScrollPanenJScrollPane( (滚动窗口面板滚动窗口面板) )l当容器内要容纳的内容大于容器大小的时候,我们希望容器能够当容器内要容纳的内容大于容器大小的时候,我们希望容器能够有一个滚动条,通过拖动滑块,就可以看到更多的内容。有一个滚动条,通过拖动滑块,就可以看到更多的内容。JSc
47、rollPane就是能够实现这种功能的特殊容器就是能够实现这种功能的特殊容器l由九个部分组成,包括一个中心显示地带、四个角和四条边。由九个部分组成,包括一个中心显示地带、四个角和四条边。nJScrollPane主要是通过移动主要是通过移动JViewport(视角视角)来实现的。来实现的。nJViewport是一种特殊的对象,用于查看基层组件,滚动是一种特殊的对象,用于查看基层组件,滚动条实际就是沿着组件移动视口,同时描绘出它在下面条实际就是沿着组件移动视口,同时描绘出它在下面看看到到的内容。的内容。449.2 容器组件容器组件 JScrollPanenJScrollPane常用常用API名称名
48、称说明说明static int HORIZONTAL_SCROLLBAR_ALWAYS水平滚动条策略常数:总是显示水平滚动条策略常数:总是显示static int HORIZONTAL_SCROLLBAR_AS_NEEDED水平滚动条策略常数:当显示内容水平滚动条策略常数:当显示内容水平区域大于显示区域时才出现水平区域大于显示区域时才出现static int HORIZONTAL_SCROLLBAR_NEVER水平滚动条策略常数:总是不显示水平滚动条策略常数:总是不显示static int VERTICAL_SCROLLBAR_ALWAYS垂直滚动条策略常数:总是显示垂直滚动条策略常数:总是显
49、示static int VERTICAL_SCROLLBAR_AS_NEEDED垂直滚动条策略常数:当显示内容垂直滚动条策略常数:当显示内容垂直区域大于显示区域时才出现垂直区域大于显示区域时才出现static int VERTICAL_SCROLLBAR_NEVER垂直滚动条策略常数:总是不显示垂直滚动条策略常数:总是不显示JScrollPane()建立一个空的建立一个空的JScrollPane对象对象JScrollPane(Component view)建立一个显示组件的建立一个显示组件的JScrollPane对对象,当组件内容大于显示区域时,象,当组件内容大于显示区域时,自动产生滚动条自动
50、产生滚动条459.2 容器组件容器组件 JScrollPanenJScrollPane常用常用API名称名称说明说明void setViewportView(Component)设置设置JscroollPane要中心地带要显示的组件要中心地带要显示的组件void setVerticalScrollBarPolicy(int)int getVerticalScrollBarPolicy()设置或者读取垂直滚动条策略常数设置或者读取垂直滚动条策略常数void setHorizontalScrollBarPolicy(int)int getHorizontalScrollBarPolicy()设置或
51、者读取水平滚动条策略常数设置或者读取水平滚动条策略常数void setViewportBorder(Border)Border getViewportBorder()设置或者读取中心显示地带的边框设置或者读取中心显示地带的边框void setWheelScrollingEnabled(Boolean)Boolean isWheelScrollingEnabled()设置或者读取是否随着鼠标滚轮滚动出现设置或者读取是否随着鼠标滚轮滚动出现或隐藏滚动条,默认状态下为真或隐藏滚动条,默认状态下为真void setColumnHeaderView(Component)void setRowHeader
52、View(Component)设置显示在上面的边上的组件设置显示在上面的边上的组件设置显示在左面的边上的组件设置显示在左面的边上的组件void setCorner(String key, Component corner)设置要显示在指定角上的组件设置要显示在指定角上的组件Component getCorner(String key)获得指定角上的组件获得指定角上的组件469.2 容器组件容器组件nJFramenJDialognJAppletnJPanelnJScrollPanenJSplitPanenJTabbedPanenJToolBar479.2 容器组件容器组件 JSplitPanen
53、JSplitPanel可以把两个组件显示在两个显示区域内,且随着区域间可以把两个组件显示在两个显示区域内,且随着区域间分隔线的拖动,区域内组件的大小也随之发生变动分隔线的拖动,区域内组件的大小也随之发生变动l它允许设置水平分割或者垂直分割;它允许设置水平分割或者垂直分割;l也允许设置动态拖曳功能(拖动分界线时两边组件是否也允许设置动态拖曳功能(拖动分界线时两边组件是否会随着拖曳动态改变大小还是在拖曳结束后才改动)会随着拖曳动态改变大小还是在拖曳结束后才改动)l通常先把组件放到通常先把组件放到Scroll Pane中,再把中,再把Scroll Pane放到放到Split Pane中。这样在每部分
54、窗口中,都可以拖动滚动中。这样在每部分窗口中,都可以拖动滚动条看到组件的全部内容条看到组件的全部内容489.2 容器组件容器组件 JSplitPanenJSplitPane常用常用API名称名称说明说明static int HORIZONTAL_SPLIT水平分割常数水平分割常数static int VERTICAL_SPLIT垂直分割常数垂直分割常数JSplitPane()创建一个创建一个JSplitPane,以水平方向排列,两,以水平方向排列,两边各是一个边各是一个button,没有动态拖曳功能,没有动态拖曳功能JSplitPane(int newOrientation)建立一个指定分割方
55、向的建立一个指定分割方向的JSplitPane,没有,没有动态拖曳功能,参数为两个分割常数之一动态拖曳功能,参数为两个分割常数之一JSplitPane(int newOrientation, Boolean newContinuousLayout)指定分割方向,并可指定是否有动态拖曳指定分割方向,并可指定是否有动态拖曳功能功能JSplitPane(int newOrientation, Boolean newContinuousLayout, Component newLeftComponent, Component newRightComponent)指定分割方向、是否具有动态拖曳功能,指定
56、分割方向、是否具有动态拖曳功能,和两侧组件和两侧组件499.2 容器组件容器组件 JSplitPanenJSplitPane常用常用API名称名称说明说明JSplitPane(int newOrientation,Component newLeftComponent, Component newRightComponent)指定分割方向和两侧组件,无自动拖曳指定分割方向和两侧组件,无自动拖曳功能功能void setOrientation(int newOrientation)int getOrientation()设置或获得分割方向设置或获得分割方向void setDividerSize(in
57、t)int getDividerSize()设置或读取分隔线条的粗细设置或读取分隔线条的粗细void setContinuousLayout(boolean nCL)boolean isContinuousLayout()设置或读取是否使用动态拖曳功能设置或读取是否使用动态拖曳功能void setOneTouchExpandable(Boolean oTE)boolean is OneTouchExpandable()设置或读取是否在分隔线上显示一个控设置或读取是否在分隔线上显示一个控键来完全扩展和完全压缩单侧内容。键来完全扩展和完全压缩单侧内容。void remove(Component c
58、omp)void add(Component comp)删除或添加组件。只可以添加两个组件删除或添加组件。只可以添加两个组件509.2 容器组件容器组件 JSplitPanenJSplitPaneDemo.javaimport java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;import java.util.*;public class SplitPaneDemo implements ListSelectionListener private Vector imageName
59、s; private JLabel picture; private JList list; private JSplitPane splitPane; public SplitPaneDemo() ResourceBundle imageResource; try /Read image names from a properties file imageResource = ResourceBundle.getBundle(imagenames); String imageNamesString = imageResource.getString(images); imageNames =
60、 parseList(imageNamesString); catch (MissingResourceException e) System.exit(1); 519.2 容器组件容器组件 JSplitPaneDemo.java list = new JList(imageNames); list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); list.setSelectedIndex(0); list.addListSelectionListener(this); JScrollPane listScrollPane = ne
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 乙肝母婴传播随州妇幼吴俊超课件
- 第三单元:秦汉时期统一多民族国家的建立和巩固课件-湖南省2026年中考一轮复习
- 肝脏功能课件
- 2026年财务报表分析与解读
- 酒吧店长职业发展规划
- 暑期安全警示通知讲解
- 建设安全讲话讲解
- 谭铁牛AI:学术前沿
- 中国医患关系英文汇报
- 医患关系讲座报道范例
- 民办学校退费管理制度
- CJ/T 3066-1997内磁水处理器
- 院内急重症快速反应小组
- 湖南省省情试题及答案
- T/CIE 115-2021电子元器件失效机理、模式及影响分析(FMMEA)通用方法和程序
- 红岩中考试题及答案
- 智能路灯项目立项申请报告模板
- 临时用电变压器安装方案
- 2025年包头职业技术学院单招职业技能测试题库完整版
- 2024-2025学年浙江省杭州市余杭区五年级(上)期末数学试卷(含答案)
- 养老护理员的睡眠照料
评论
0/150
提交评论