javaGUI程序设计.ppt

上传人:w****2 文档编号:22692920 上传时间:2021-05-30 格式:PPT 页数:83 大小:764.50KB
收藏 版权申诉 举报 下载
javaGUI程序设计.ppt_第1页
第1页 / 共83页
javaGUI程序设计.ppt_第2页
第2页 / 共83页
javaGUI程序设计.ppt_第3页
第3页 / 共83页
资源描述:

《javaGUI程序设计.ppt》由会员分享,可在线阅读,更多相关《javaGUI程序设计.ppt(83页珍藏版)》请在装配图网上搜索。

1、JAVA 语言 第 10讲 JAVA的图形用户界面设计 JAVA 语言 第 10讲 2020年 11月 12日 上一讲回顾 输入 /输出流的概念和类层次结构 字节流、字符流的定义和使用 节点流与过滤流的定义和使用 文件管理以及文件操作 对象串行化的概念和实现方法 JAVA 语言 第 10讲 2020年 11月 12日 学习要点 了解 AWT和 Swing组件的基础知识 理解如何创建框架窗口 理解如何向框架窗口添加组件 使用各种布局管理器创建复杂的窗口 理解 Java的事件处理机制 创建 GUI对象,以及各 GUI对象的事件 处理 JAVA 语言 第 10讲 2020年 11月 12日 4 Gr

2、aphics User Interface GUI-Graphics User Interface。 GUI程序给用户提供了一个视觉上更加直 观,操作更加方便、快捷的用户环境。 在 Java中为方便 GUI程序的开发,专门 提供多种进行图形用户程序开发的程序包。 如抽象窗口工具包 AWT和 Swing等。 JAVA 语言 第 10讲 2020年 11月 12日 5 10.1 GUI类 Java提供了帮助创建图形用户界面 程序的丰富的类库 : 容器类: JFrame,JPanel,JApplet UI组件类 : JButton,JTextField, JComboBox, JList, JMen

3、u等 帮助类 :Graphics,Color,Font,Demision, LayoutManager等 JAVA 语言 第 10讲 2020年 11月 12日 用这些类库中的类(框架、面板、标签、 按钮、文本框、组合框、复选按钮、菜 单、滚动条等)构造用户界面,这些类 又称为 GUI类。 GUI类存放在 java.awt和 javax.swing 包中,编程时需要导入。 import java.awt.*; 或 import javax.swing.*; JAVA 语言 第 10讲 2020年 11月 12日 设计 GUI应用程序的流程: ( 1)引用需要的包和类。 ( 2)设臵一个顶层的容

4、器。 ( 3)根据需要为容器设臵布局管理器或使用默 认布局管理器。 ( 4)将组件添加到容器内,位臵自行设计。 ( 5)为响应事件的组件编写事件处理代码。 JAVA 语言 第 10讲 2020年 11月 12日 10.2 框架 创建图形用户界面程序的第一步是创建一 个容器类,以容纳其他要显示的组件 主界面 (框架 )。 在这个容器中放入其他一 些图形用户界面组件从而组成一个功能完 善的程序。 在 Java程序中可用于主界面的类主要有两 个: 简单窗口类 JWindow 框架窗口类 JFrame类 JAVA 语言 第 10讲 2020年 11月 12日 JFrame . Content pane

5、 JPanel JButton JLabel 中间层容器 Swing件组层次关系 顶层容器 JAVA 语言 第 10讲 2020年 11月 12日 10.2.1 创建框架 JFrame Swing应用程序的窗口组件类,是 Swing中最常使用 的容器组件,可以添加其它容器和添加其它组件 JFrame类构造方法: public JFrame() public JFrame(String Title) JFrame类常用方法: public Container getContentPane() public void setDefaultCloseOperation(int operation)

6、JAVA 语言 第 10讲 2020年 11月 12日 方法 setDefaultCloseOperation( int operation)的参数 operation取以下 4个 常量之一: DO_NOTHING_ON_CLOSE HIDE_ON_CLOSE(默认 ) DISPOSE_ON_CLOSE EXIT_ON_CLOSE JAVA 语言 第 10讲 2020年 11月 12日 JFrame类常用方法 (2) setIconImage 窗口最小化 。 setTitle 设置窗口中标题栏的文字 。 setResizable 设置用户是否可以改变框 架大小 。 dispose方法 关闭窗口

7、 , 并回收该窗口 的所有资源 。 setLocation 设置组件的位置 。 setBounds 重新设置组件的大小和位置 。 setVisible 设置框架是否可视 JAVA 语言 第 10讲 2020年 11月 12日 【例 10.1】 显示一个空框架 FirstFrame.java import javax.swing.*; public class FirstFrame public static void main(String args) SimpleFrame frame = new SimpleFrame(); /设臵用户关闭框架时的响应动作 frame.setDefault

8、CloseOperation( JFrame.EXIT_ON_CLOSE); /显示该框架 frame.show(); class SimpleFrame extends JFrame public SimpleFrame() /设臵框架大小 setSize(WIDTH, HEIGHT); public static final int WIDTH = 300; public static final int HEIGHT = 200; 运行结果 JAVA 语言 第 10讲 2020年 11月 12日 ch10TestFrame.java JAVA 语言 第 10讲 2020年 11月 12日

9、 容器的分类 1、容器 (Container类 ) 容器通过使用一些设计管理器 ,主要负责布臵它 所包含的组件的位臵。 Container类允许别的 Component对象嵌套在的 Container类对象中。 2、顶层容器 JFrame:一个使用 Swing的独立图形用户界面应用程 序至少有一个使用 JFrame作为根的包含层次 JApplet:基于 Swing的 Applet至少有一个包含层次, 其根是 JApplet 3、中间层容器 JAVA 语言 第 10讲 2020年 11月 12日 10.2.2 在框架内添加组件 如果需要将一些图形用户界面元素加入到框架中 , 则 要在面板组件 (

10、 JPanel) 中进行绘制 , 然后将该面板组 件加入到框架的内容窗格 ( ContentPane) 中: /得到 JFrame的内容窗格对象 Container contentPane = getContentPane(); Component c = .; /将组件加入到内容窗格中 contentPane.add(c); 面板 JPanel类本身是容器 , 它可以容纳其他图形用户界 面元素 , 如按钮 、 菜单等 。 JAVA 语言 第 10讲 2020年 11月 12日 /TestFrame.java class SimpleFrame extends JFrame public st

11、atic final int WIDTH = 300; public static final int HEIGHT = 200; public SimpleFrame(String title) super(title); /设臵框架大小 setSize(WIDTH, HEIGHT); JButton btnOk=new JButton(确定 ); getContentPane().add(btnOk); JAVA 语言 第 10讲 2020年 11月 12日 10.3 布局管理 为了使图形用户界面具有良好的平台无关性, 提供了专门用来管理组件在容器中的布局的 工具。 Java的 GUI组件

12、被放臵在容器中,然后由 容器的布局管理器对它们的位臵和大小进行 管理。 在程序中,如果没有指定布局管理器,默认 的布局管理器就将组件其放臵到框架的中央。 JAVA 语言 第 10讲 2020年 11月 12日 Java共有 6种基本的布局管理器,它们分别为: - FlowLayout( 流式布局) - GridLayout(网格布局) - BorderLayout (边界布局) - CardLayout (卡片布局) - GridBagLayout(网格包布局) - null (空布局) 。 容器类默认的 布局管理器为 FlowLayout。 JAVA 语言 第 10讲 2020年 11月 1

13、2日 10.3.1 FlowLayout布局管理器 组件从左上角开始按从左到右、从上到下的方式排 列 FlowLayout的构造函数: - FlowLayout( ):生成一个默认的流式布局 - FlowLayout(int alignment):可以设定每一行 组件的对齐方式 - FlowLayout(int alignment,int horz,int vert):可以设定组件间的水平和垂直距离 Applet和面板的缺省布局: FlowLayout mylayout = new FlowLayout(); FlowLayout exLayout = new FlowLayout(FlowL

14、ayout.RIGHT); setLayout(exlayout); / 为容器设置新布局 Container contentPane = getContentPane(); /增加相应的按钮 for (int i = 0; i buttons; i+ ) JButton addButton = new JButton(add + i); contentPane.add(addButton); JAVA 语言 第 10讲 2020年 11月 12日 ch10TestLayoutFrame.java JAVA 语言 第 10讲 2020年 11月 12日 10.3.2 GridLayout布局管

15、理器 GridLayout的构造函数: - GridLayout():生成一个单列的网格布局 - GridLayout(int row,int col):生成一个指定行数 和列数的网格布局 , 水平和垂直间距为 0 - GridLayout(int row,int col,int horz,int vert): 生成一个指定行数和列数的网格布局及组件的水平 和垂直间隔 。 用于将容器区域划分为一个矩形 网格组件按行和列排列 . . . Button btn; / 声明按钮数组 String str=1,2,3,4,5,6,7,8,9; setLayout(new GridLayout(3,3)

16、; btn=new Buttonstr.length; / 创建按钮数组 for(int i=0;istr.length;i+) btni=new Button(stri); add(btni); JAVA 语言 第 10讲 2020年 11月 12日 ch10TestGridLayout.java JAVA 语言 第 10讲 2020年 11月 12日 10.3.3 BorderLayout布局管理器 BorderLayout的构造函数: - BorderLayout( ):生成默认的边界布局 - BorderLayout(int horz,int vert): 可以设定组 件间的 水平和垂

17、直距离 窗口 、 框架和对话框等的缺省布局 组件被臵于容器的北、南、东、西或中间位臵 . . . setLayout(new BorderLayout(); Button btnEast=new Button(东 ); Button btnWest=new Button(西 ); Button btnNorth=new Button(北 ); Button btnSouth=new Button(南 ); Button btnCenter=new Button(中 ); add(btnEast,BorderLayout.EAST); add(btnWest,BorderLayout.WEST)

18、; add(btnNorth,BorderLayout.NORTH); add(btnSouth,BorderLayout.SOUTH); add(btnCenter,BorderLayout.CENTER); JAVA 语言 第 10讲 2020年 11月 12日 ch10TestBorderLayout.java JAVA 语言 第 10讲 2020年 11月 12日 10.3.4 CardLayout布局管理器 可存储几个不同的布局。 每个布局就像是一个卡片组中的一张卡片。 在一个给定的时间总会有一张卡片在顶层。 卡片通常为一个 JPanel 对象。 每当需要许多面板切换,而每个面板需要

19、显 示为不同布局时,可以使用卡片布局。 JAVA 语言 第 10讲 2020年 11月 12日 CardLayout提供了两种构造函数: CardLayout( ) CardLayout(int horz, int vert) 第一种形式生成了一个默认的卡片布局管理器 。 第二种形式分别在 horz和 vert中设定控件之间 的水平和垂直间隔 。 JAVA 语言 第 10讲 2020年 11月 12日 主要方法 void add(Component panelObj, Object name); 在生成一副牌之后,通过调用由 CardLayout 定义的下列方法之一来激活一张卡片: void

20、first(Container deck) void last(Container deck) void next(Container deck) void previous(Container deck) void show(Container deck, String cardName) 演示 TestCardLayout.java JAVA 语言 第 10讲 2020年 11月 12日 10.3.5 GridBagLayout布局管理器 每个 GridBagLayout 对象维持一个动态的 矩形单元网格,每个组件占用一个或多个这 样的单元,称为显示区域。 构造函数: GridBagLay

21、out( ) 使用 GridBagLayout和 GridBagConstaints辅助 类 GridBagLayout管理的每个组件都与 GridBagConstaints对 象关联 JAVA 语言 第 10讲 2020年 11月 12日 GridBagConstraints 类中包含 用来定位及 调整组件大小所需的全部信息。 组件大小不必相同 组件按行和列排列 放置顺序不一定为从左至右和由上至下 获得 GridBagLayout: GridBagLayout gb=new GridBagLayout(); ContainerName.setLayout(gb); 要使用此布局,必须提供各组

22、件的大小和布局 等信息。 JAVA 语言 第 10讲 2020年 11月 12日 GridBagConstraints 类 2-1 成员变量列表: - gridx, gridy : 指定组件放臵于哪个单元中 - gridwidth, gridheight : 指定组件将占用多少行 和多少列 - weightx, weighty : 指定在一个 GridBagLayout 中应如何分配空间 ,这些变量的缺省值为 0 - ipadx, ipady : 指定组件的最小高度和宽度 JAVA 语言 第 10讲 2020年 11月 12日 成员变量列表: - fill : 指定在单元大于组件的情况下 ,

23、组件如 何填充此单元 ,共有 4可选值。缺省值为: GridBagConstraints.NONE - anchor : 指定将组件放臵在单元中的位臵, 共有 9个可选值。缺省值为: GridBagConstraints.CENTER GridBagConstraints 类 2-2 JAVA 语言 第 10讲 2020年 11月 12日 这十个组件的每一个都将与其相关的 GridBagConstraints 对象的 fill 字段设臵为 GridBagConstraints.BOTH。 此外, 这些组件还有以下非默认值约束 (Constraints): Button1、 Button2、 B

24、utton3: weightx = 1.0 Button4: weightx = 1.0、 gridwidth = GridBagConstraints.REMAINDER Button5: gridwidth = GridBagConstraints.REMAINDER Button6: gridwidth = GridBagConstraints.RELATIVE Button7: gridwidth = GridBagConstraints.REMAINDER Button8: gridheight = 2、 weighty = 1.0 Button9、 Button 10: gridw

25、idth = GridBagConstraints.REMAINDER JAVA 语言 第 10讲 2020年 11月 12日 创建复杂界面 TestGridBagLayout.java JAVA 语言 第 10讲 2020年 11月 12日 10.3.6 Null布局管理器 在某些情况下 , 用户不想使用布局管 理器 , 需要自己设臵组件的位臵和大 小 , 这时应取消容器的布局管理器 , 然后再进行设臵 , 否则用户自定义设 臵将会被布局管理器覆盖 。 取消布局管理器的方法是: setLayout(null); JAVA 语言 第 10讲 2020年 11月 12日 用户使用 setLoca

26、tion()、 setSize()、 setBounds()等方法为组件设臵位臵和大 小。 需要注意的是,这种方法会导致程序与 系统相关,如不同的分辨率会产生不同 的效果。 TestNULLLayout.java JAVA 语言 第 10讲 2020年 11月 12日 10.4 面板容器 一个面板实质上是一个 “ 窗口内的窗 口 ” 。它是能够被放入其他容器中的 容器。 面板通常用来简化创建复杂的图形用 户界面的过程。 例如,我们要在一个框架窗口中放臵 16个按钮,和一个文本框。 JAVA 语言 第 10讲 2020年 11月 12日 JPanel 主要用于放置 Swing轻量级组件,不能独立

27、 显示, JPanel的对象可以作为顶层容器的内 容面板来使用。 JPanel类构造方法: public JPanel( ) public JPanel( LayoutManager layout ) 示例 JPanelDemo.java JAVA 语言 第 10讲 2020年 11月 12日 创建面板及复杂布局 参见 JPanelDemo.java JAVA 语言 第 10讲 2020年 11月 12日 10.5 事件 目前为止,所有程序都是面向对象的,但 是都是以过程化次序执行的。使用了判断 和循环语句控制执行流,即程序规定了执 行流。 Java GUI编程是事件驱动的。 在事件驱动编程中

28、,当事件发生 点击 按钮,或者鼠标移动 时执行代码。本 节介绍 Java的事件模型。 JAVA 语言 第 10讲 2020年 11月 12日 10.5.1 事件和事件源 事件与事件处理: 事件处理的 3要素: 事件源:产生事件的组件 事件(对象):用户对组件的操作所触发的事件对象 事件监听器:负责处理事件的对象,也可称为事件处理器 Java的事件类和监听器接口大多在 java. awt. event包中,一些 Swing组件所特有的事件监 听器接口则在 javax. swing. event中声明 JAVA 语言 第 10讲 2020年 11月 12日 事件层次结构 2-1 事件类 说明 事件

29、源 ActionEvent 通常按下按钮,双击列表项或选 中一个菜单项时,就会生成此事 件。 Button、 List、 MenuItem、 TextField AdjustmentEvent 操纵滚动条时会生成此事件。 Scrollbar ComponentEvent 当一个组件移动、隐藏、调整大 小或成为可见时会生成此事件。 Component ItemEvent 单击复选框或列表项时,或者当 一个选择框或一个可选菜单的项 被选择或取消时生成此事件。 Checkbox、 CheckboxMenuItem、 Choice、 List FocusEvent 组件获得或失去键盘焦点时会生 成此事

30、件。 Component JAVA 语言 第 10讲 2020年 11月 12日 事件层次结构 2-2 事件类 说明 事件源 KeyEvent 接收到键盘输入时会生成此事件。 Component MouseEvent 拖动、移动、单击、按下或释放 鼠标或在鼠标进入或退出一个组 件时,会生成此事件。 Component ContainerEvent 将组件添加至容器或从中删除时 会生成此事件。 Container TextEvent 在文本区或文本域的文本改变时 会生成此事件 。 TextField、 TextArea WindowEvent 当一个窗口激活、关闭、 失效、 恢复、最小化、打开或

31、退出时会 生成此事件。 Window JAVA 语言 第 10讲 2020年 11月 12日 10.5.2事件监听 Java 最新的事件处理方法是基于授权事件模型 当事件来源对象因用户的操作(鼠标或键盘),系统 会自动触发此事件类对象 E, 并通知所授权的事件监听 者 A( 若来源对象已向 A注册),事件监听者 A中有处 理各种事件的方法 (事件处理者 1n)便会处理此事件 E 的各种状况 。 JAVA 语言 第 10讲 2020年 11月 12日 授权事件模型: 组件(事件源)都不处理自己的事件,而是将事件处理委托给外部 的处理实体(监听器),这种事件处理模型称为 事件的授权处理模 型 。不

32、同的事件,可以交由不同类型的监听器去处理 采用授权事件模型进行事件处理的一般步骤为: 第一 确定 Event Source, 知道什么组件要被处理 第二 确定 Event, 知道什么样的事件要被处理 第三 实现 Event Listener, 即编写实现 Event Listener的事件处理代码 第四 将事件监听器对象与事件源的某种事件关联起来 将事件监听器对象与事件源的某种事件关联起来,这 个关联的过程称为向事件源注册( Registering) 事 件监听器。 在一个监听器类中可以实现多个监听器接口,通过它 可以同时监听同一个事件源上发生的多种事件,同时, 通过事件可以获得事件的详细信息

33、 JAVA 语言 第 10讲 2020年 11月 12日 授权事件模型 -模型图 授权事件模型图 JAVA 语言 第 10讲 2020年 11月 12日 10.5.3 事件处理方法 一 1.首先给组件注册监听器,使用下列方法: addxxxListener(事件监听器对象 ); 2.实现事件,重写接口中的方法。 public void actionPerformed ( ActionEvent e) public void keyPressed(KeyEvent e) DynamicButtonDemo.java JAVA 语言 第 10讲 2020年 11月 12日 事件处理方法 二 1。定

34、义事件类,且要实现 listener interface接口。 private class ColorAction implements ActionListener 2。注册事件类,并给他们发送 event object ColorAction redAction = new ColorAction(Color.RED); yellowButton.addActionListener(yellowAction); JAVA 语言 第 10讲 2020年 11月 12日 使用实现事件监听器接口的方法处理事件时,必须重 写监听器接口中的所有方法,尽管有些方法不会用到。 JDK1.1为某些监听器接

35、口提供了 适配器类 ( XXXAdapter),当需要对某种事件进行处理时,只 需让事件处理类继承事件所对应的适配器类,只重写需 要关注的方法即可,而无关的方法就不必实现了。 继承事件适配器类,只需要重写所需要的方法即可。 适配器是一个类而不是接口,因而处理事件的类只能继 承一个适配器。当该类需要处理多种事件时,通过继承 适配器类的方式是不行的。但可以基于适配器类,用内 嵌类( Inner Class)的方法来处理这种情况。 addKeyListener(new CharType(); 为事件源注册事件监听器的方法同上 。 public class CharType extends KeyAd

36、apter public void keyPressed(KeyEvent e) /大括号中为处理事件的代 码 事件处理方法 二 -事件适配器 JAVA 语言 第 10讲 2020年 11月 12日 例子: ch10CallByKey.java ch10ButtonTest.java ch10KeyEventDemo.java JAVA 语言 第 10讲 2020年 11月 12日 10.6 用户界面对象( UI) 许多 Java的编译器提供了可视化地创建 图形用户界面。 JAVA 语言 第 10讲 2020年 11月 12日 10.6.1 常用容器组件 JPanel 组件是一个中间容器,用于

37、将小 型的轻量级组件组合在一起 JPanel 的缺省布局为 FlowLayout JAVA 语言 第 10讲 2020年 11月 12日 10.6.1 常用容器组件 3-3 容器 JApplet继承自 Applet类 , 与 Applet 不同的是 , 它默认的布局管理器是 JAppletBorderLayout, 而 Applet默认 的布局管理器是 FlowLayout。 可直接向 Applet窗口中添加组件 , 但 JApplet添加组件时必须添加到其内容窗 格中 。 得到内容窗格使用方法: getContentPane(); JAVA 语言 第 10讲 2020年 11月 12日 10

38、.6.2 标签 (JLabel) 既可以显示文本也可以显示图像构造函数如下: JLabel(Icon icon): icon表示使用的图标 JLabel(String text,Icon icon,int align): align表示水平对齐方式,其值可以为: LEFT、 RIGHT、 CENTER。 其它常用方法 getText() setText(String text) JAVA 语言 第 10讲 2020年 11月 12日 10.6.3 按钮 (JButton) 可以使用以下任一构造函数来创建按钮: - JButton() : 新建一个空的按钮 - JButton(Icon icon

39、) - JButton(String text) - JButton(String text, Icon icon) JButton btnOk=new JButton(确定 ! ); JButton btnCancel=new JButton(取消 ! ); getContentPane.add(btnOk); getContentPane.add(btnCancel); JAVA 语言 第 10讲 2020年 11月 12日 10.6.4 文本框 -JTextField JTextField 组件允许输入或编辑单行文本 此类的构造函数包括: JTextField() JTextField(

40、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); JAVA 语言 第 10讲

41、2020年 11月 12日 Ch10/ButtonDemo.java JAVA 语言 第 10讲 2020年 11月 12日 10.6.4 文本框 -JPasswordField JPasswordField 组件允许输入或编辑单 行文本,并且文本被其他字符代替。 此类的构造函数与单行文本框类似。 其它方法: char getPassword() char getEchoChar() void setEchoChar(char c) JAVA 语言 第 10讲 2020年 11月 12日 Ch10/DemoPassword.java JAVA 语言 第 10讲 2020年 11月 12日 10

42、.6.4 文本框 -JTextArea JTextArea 组件用于接受来自用户的多行文本 ,可 实现可滚动界面 JTextArea 组件可使用下列构造函数创建: JTextArea() JTextArea(int rows, int cols) JTextArea(String text) JTextArea(String text, int rows, int cols) JLabel jl = new JLabel(“文本区 ” ); con.add(jl); JTextArea ta = new JTextArea(5,10); con.add(ta); JAVA 语言 第 10讲 2

43、020年 11月 12日 10.6.5 复选框 -JCheckBox 复选框用于为用户提供一组选项 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) JAVA 语言

44、 第 10讲 2020年 11月 12日 ch10JCheckBoxDemo.java JAVA 语言 第 10讲 2020年 11月 12日 10.6.6 单选按钮 -JRadioButton 单选按钮允许用户从多个选项中选择其中一个 ButtonGroup 用于在 Swing 中创建组 JRadioButton 对象可使用下列构造函数创建: - JRadioButton() - JRadioButton(Icon icon) - JRadioButton(Icon, boolean selected) - JRadioButton(String text) - JRadioButton(S

45、tring text, boolean selected) - JRadioButton(String text, Icon icon) - JRadioButton(String text, Icon icon, boolean selected) JAVA 语言 第 10讲 2020年 11月 12日 ch10CheckAndRaidoDemo.java JAVA 语言 第 10讲 2020年 11月 12日 10.6.7 列表框 -JList public JList() public JList(ListModel dataModel) public JList (Object lis

46、tData) JList 不支持滚动。要启用滚动,可使用下 列代码 : JScrollPane myScrollPane=new JScrollPane(); myScrollPane.getViewport().setView(dat aList); String stars = 安东尼奥 .班德拉斯 ,来昂纳多 .迪卡 普尼奥 , 桑德拉 .布洛克 ,休 .格兰特 ,朱莉亚 .罗伯茨 ; JList moviestars = new JList(stars); JAVA 语言 第 10讲 2020年 11月 12日 10.6.8 组合框 -JComboBox 文本域和下拉列表的组合 在 S

47、wing 中,组合框由 JComboBox 表示 构造函数如下: public JComboBox() : 此构造函数使用缺省数据模 型创建 JComboBox public JComboBox(ComboBoxModel asModel) : 使用现有 ComboBoxModel 中的项目的组合框 public JComboBox(Object items) : 包含指定 数组元素的组合框 String names = 弗雷德里克 .福西斯 , 约翰 .克里沙姆 , 玛丽 .希金斯 .克拉克 ,帕特丽夏 .康威尔 ; JComboBox authors = new JComboBox(nam

48、es); JAVA 语言 第 10讲 2020年 11月 12日 ch10ComboDemo.java JAVA 语言 第 10讲 2020年 11月 12日 10.6.9菜单以及弹出式菜单 典型的菜单: Swing 菜单由 菜单栏 、 菜单和菜单项 构成 。 JAVA 语言 第 10讲 2020年 11月 12日 10.6.9 菜单 3-2 JMenuBar 是可通过 JFrame的根窗格添加 至容器的组件。由多个 JMenu 组成,每个 JMenu 在 JMenuBar 中都表示为字符串。 JMenu 在 JMenuBar 下以文本字符串形式 显示,而在用户单击它时,则以弹出式菜单 显示。

49、 JMenuItem为 JMenu 中的一个组件,以文 本字符串形式显示,可以具有图标,外观可 以修改,如字体、颜色、背景、边框等 。 JAVA 语言 第 10讲 2020年 11月 12日 1 创建菜单步骤 ( a) 创建菜单栏,并将菜单栏加入到框架中。 JMenuBar menuBar = new JMenuBar(); setJMenuBar(menuBar); ( b) 创建 “ File”菜单、 “ Edit”菜单和 “ View”菜 单。 JMenu fileMenu = new JMenu(File); JMenu editMenu = new JMenu(Edit); JMen

50、u viewMenu = new JMenu(View); JMenu optionMenu = new JMenu(Option); ( c) 创建子菜单。 JMenuItem pasteItem = new JMenuItem(Paste, P); JAVA 语言 第 10讲 2020年 11月 12日 ( d) 将菜单项加入到子菜单或菜单中,将子菜 单加入到菜单中,将菜单加入到菜单栏中。 fileMenu.add(newItem); editMenu.add(pasteItem); viewMenu.add(optionMenu); menuBar.add(fileMenu); menu

51、Bar.add(editMenu); menuBar.add(viewMenu); JAVA 语言 第 10讲 2020年 11月 12日 2创建复选框和单选按钮菜单项 创建单选按钮菜单项 “ Forward”, 并将 “ Forward”菜单项加入到 “ Search”菜单中。 ButtonGroup group = new ButtonGroup(); forwardItem = new JRadioButtonMenuItem( Forward); group.add(forwardItem); searchMenu.add(forwardItem); 创建复选框菜单项 “ ToolBa

52、r”, 并加入到子 菜单中。 JCheckBoxMenuItem toolItem = new JCheckBoxMenuItem (ToolBar); optionMenu.add(toolItem); JAVA 语言 第 10讲 2020年 11月 12日 3 菜单项的使用状态 /初始设置 “ Save”菜单项为禁用状态。 saveItem.setEnabled(false); 4 快捷键和加速器 快捷键显示为带有下划线的字母,加速器则显示 为菜单项旁边的组合键。 /设置菜单的快捷键。 fileMenu.setMnemonic(F); /设置 “ Exit”菜单项的快捷键为 “ T”。 J

53、MenuItem exitItem = new JMenuItem(Exit, T); /设置 “ Exit”菜单项的加速器为 “ Ctrl T”。 exitItem.setAccelerator(KeyStroke.getKeyStroke(K eyEvent.VK_T, InputEvent.CTRL_MASK); JAVA 语言 第 10讲 2020年 11月 12日 5 弹出式菜单 弹出式菜单的创建和菜单的创建基本相同 , 也需要新建一个弹出式菜单后再加入菜单项 。 /弹出式菜单 。 popup = new JPopupMenu(); /新建弹出式菜单中的 “ Cut”菜单项和监听器

54、。 cutItemPop = new JMenuItem(Cut, C); popup.add(cutItemPop); JAVA 语言 第 10讲 2020年 11月 12日 菜单示例 菜单的用法 。 程序代码见 MenuExample.java。 运行结果如下: JAVA 语言 第 10讲 2020年 11月 12日 ch10MenuDemo.java JAVA 语言 第 10讲 2020年 11月 12日 10.6.10 对话框 1. 模式对话框和无模式对话框 。 在 Swing中 , 提供了四种简单的对话框: showMessageDialog: 显示一条消息等待用户 点击 OK; s

55、howConfirmDialog: 显示一条消息并等待确 认; showOptionDialog: 显示一条消息并等待用户 在一组自定义选项中的选择; showInputDialog: 显示一条消息并等待用户的 输入 。 JAVA 语言 第 10讲 2020年 11月 12日 以 showConfirmDialog为例: int selection = JOptionPane.showConfirmDialog( DialogFrame.this, /父窗口 Are you sure?, Logout, /消息以及对话框 标题 JOptionPane.OK_CANCEL_OPTION, /底部

56、按钮 类型 JOptionPane.WARNING_MESSAGE); /消息类型 底部按钮的类型和对话框有密切的关系 。 对于 showConfirmDialog, 按钮可以包括四种: DEFAULT_OPTION, YES_NO_OPTION, YES_NO_CANCEL_OPTION, OK_CANCEL_OPTION。 JAVA 语言 第 10讲 2020年 11月 12日 对话框示例 :要求当单击 “ 退出 ” 按钮时 , 将弹 出对话框 , 同时原先的框架窗口将不能被激活 , 必须 选择对话框中的一个选项才能够退出对话框 。 程序代码见 DialogExample.java。 运行

57、结果如下: JAVA 语言 第 10讲 2020年 11月 12日 2 JFileChooser对话框 提供了标准的文件的打开、保存对话框。 JAVA 语言 第 10讲 2020年 11月 12日 小结 1、 GUI常用的容器。 2、 GUI常用的布局管理器。 3、 GUI的事件处理机制。 4、 GUI常用的组件。 JAVA 语言 第 10讲 2020年 11月 12日 课外任务 1、为大作业设计应用程序界面,要求: ( 1)加入菜单系统; ( 2)通过 “ 编辑 ” 菜单项,调用数据编辑界面; ( 3)通过 “ 保存 ” 菜单项,将数据编辑界面上录入的当前记录,存储到文 件 Sys_dat.

58、dat中,试用 2种方法实现:文件流、对象串行化。 2、 P221,9 13. 3、带文件选择功能的译码器 *输入方式:文本框多行输入,从菜单栏的 “ 文件 ” 菜单中 “ 打开 ” 菜单项 选择要打开的文件 *输入内容的格式:中文,英文字符 *输出方式:文本框多行输出(注意:要用到滚动条),从菜单栏的 “ 文件 ” 菜单中 “ 保存 ” 菜单项指定输出文本框中内容要保存到的文件名,并将 输出文本框中内容存入其中 *输出内容的格式:输入内容及与之对应的 Unicode编码 *附加需求:当输出文本框中没有内容的时候, “ 文件 ” 下的 “ 保存 ” 选项 禁用,而输出文本框中一旦有内容的时候, “ 文件 ” 下的 “ 保存 ” 选项 应当可用 JAVA 语言 第 10讲 2020年 11月 12日 课堂测试 1、求 S=1+(1+2)+(1+2+3)+.+(1+2+3 +.+100)的值。 2、求解 0500之间被 7整除的数之和。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!