欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    《Java程序设计与应用开发》第6章GUI编程.ppt

    • 资源ID:70009471       资源大小:382.50KB        全文页数:64页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    《Java程序设计与应用开发》第6章GUI编程.ppt

    第6章 GUI编程 现代的用户倾向于使用可以由鼠标方便操作的图形用户界面(GUI-Graphical User Interface)程序。本章的内容就是介绍如何使用JFC(Java Foundation Class)中的Swing组件(Component)来构建GUI应用程序。6.1 Swing起步-Swing概述 l在Java1.0中,已经有一个用于GUI编程的类库AWT(Abstract Window Toolkit),称之为抽象窗口工具箱。遗憾的是,AWT中的组件(例如按钮,类名为Button)在实现中使用了本地代码(Native Code),这些组件的创建和行为是由应用程序所在平台上的本地GUI工具来处理的。因此,AWT组件要在不同的平台上提供给用户一致的行为就受到了很大的限制。同时,AWT组件中还存在很多bug,这就使得使用AWT来开发跨平台的GUI应用程序困难重重。l1996年,SUN公司和Netsacpe公司在一个称为Swing的项目中合作完善了Netsacpe公司原来开发的一套GUI库,也就是现在所谓的Swing组件。Swing组件和原来的AWT组件完全不同,最大的区别就是Swing组件的实现中没有使用本地代码,这样对底层平台的依赖型就大为降低,并且可以给不同平台的用户一致的感觉。此外,和原来的AWT相比,Swing中提供了内容更多、使用更为方便的组件。l读者在阅读一些书籍时,常会遇到名词JFC(Java Foundation Class)。JFC的概念是在1997年的JavaOne开发者大会上首次提出的,是指用于构建GUI的一组API。实际上,Swing只是JFC的一部分,其它的还有二维图形(Java 2D)API以及拖放(Drag and Drop)API等等。Swing概述-续l在GUI编程中,使用什么样的GUI组件固然很重要,但是采用什么事件处理模型同样也很重要。Java 1.0中,AWT的事件处理模型是很不完善的。Java 1.1中使用新的AWT事件处理模型,在此之后,未作变动。在编写本书时,使用的仍旧是1.1的事件处理模型。lSwing并不是完全取代了AWT,Swing只是使用更好的GUI组件(如JButton)代替AWT中相应的GUI组件(如Button),并且增加了一些AWT中原来所没有的GUI组件。并且,Swing仍使用AWT 1.1的事件处理模型。l虽然现在AWT组件仍得到支持,但是建议在你的应用程序中尽量使用Swing组件和1.1的事件模型。6.1.2 一个GUI实例 下面的这个应用程序很简单,只是在屏幕上显示一个框架组件(JFrame):import javax.swing.*;public class FirstGUI public static void main(String args)JFrame f=new JFrame();/创建一个框架对象f f.setTitle(FirstFrame);/设定框架的标题 f.setSize(250,100);/设定框架的大小 f.show();/显示框架 GUI实例续Swing中的组件是“轻量级”(lightweight)组件,并且每个组件都可以是一个容器。可以向任何一个组件中添加其它的组件,但是顶层容器类型的组件不能添加到任何其它组件中。此外,任何一个Swing组件要想在屏幕上显示出来,最终都必须由一个顶层容器来容纳。Swing中组件的类名通常以J开头(如JFrame),以区别于AWT中相应的组件(如Frame)。Swing位于包javax.swing中,javax是java extension的缩写形式,表示Swing包是java的一个扩展包。6.1.3 面板 JPanel 是常用的Swing组件之一。JPanel本身也是一个容器,可以向其中添加其它GUI组件(如按钮JButton);但是JPanel不是顶层容器,因此,要在屏幕上显示JPanel,必须将它添加到一个顶层容器(如JFrame)中。JPanel还具备在自身表面绘制图形的功能,可以通过定制的方式在面板表面绘制各种图形。Swing中允许组件嵌套添加,例如:可以将一个JButton添加到一个JPanel中,再将JPanel添加到JFrame中。在构建复杂的用户界面时,常常需要使用这种嵌套添加的方式。Swing中还允许将一个组件添加到同类型的组件中,例如:可以将一个JPanel添加到另一个JPanel中去。6.1.3.1作为容器 import javax.swing.*;import java.awt.*;public class FirstPanel public static void main(String args)JLabel labOne=new JLabel(这是标签);JTextField txtOne=new JTextField(这是文本框);JPanel p=new JPanel();/生成面板对象 /将标签和文本框添加到面板容器中 p.add(labOne);p.add(txtOne);/给面板增加一个边框 /Border border=BorderFactory.createEtchedBorder();/p.setBorder(border);JFrame f=new JFrame();/创建一个框架对象f f.setSize(300,300);/设定框架的大小 /取得框架的内容窗格 Container contentPane=f.getContentPane();/将面板添加到框架的内容窗格中 contentPane.add(p);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.show();/显示框架 分为两步:(1)将一个标签和一个文本框添加到面板中。(2)再将面板添加到框架中,然后显示框架。6.1.3.2表面重绘lpaintComponent(Graphics g)方法。lrepaint()方法。l在覆盖组件的paintComponent(Graphics g)方法时,记得首先调用super.paintComponent(g)。6.1.4 改变应用程序的观感 lUIManager.setLookAndFeel(String lnfName)方法。lSwingUtilities.updateComponentTreeUI()方法。例如,要设定Windows的观感:tryString lnfName=com.sun.java.swing.plaf.windows.WindowsLookAndFeel;UIManager.setLookAndFeel(lnfName);catch(Exception e)e.printStackTrace();6.2 AWT事件处理 6.2.1事件处理简介 用户对应用程序进行操作时会产生事件(Event),事件源的事件发生后,可以被传递给任何对象,前提是该对象实现(implements)了适当的接口并且注册到该事件源。例如,可以给按钮的动作事件(ActionEvent)注册(Register)一个动作事件侦听器(ActionListener);任何一个实现了ActionListener接口的类所生成的对象都可以注册成为按钮的动作事件侦听器。这样,当按钮的动作事件发生时,动作事件就会传递给已注册的所有侦听器。给事件源注册事件侦听器,使用该事件源中的addXXXListener(aListener)方法。依据事件类型的不同,注册的方法名也不同。例如给按钮注册一个动作事件侦听器:aButton.addActionListener(aActionListener);而给框架注册一个窗口事件侦听器:aFrame.addWindowListener(aWindowListener);一个事件源可以注册多个侦听器,一个侦听器也可以被注册到多个事件源。6.2.2事件处理实例 该程序提供了一个按钮,点击该按钮可以使得应用程序在Windows和Metal观感之间进行切换,源代码见例6.2.1,图6.2.1显示了运行过程中两种不同的观感。在例6.2.1中,内部类LookAndFeelListener实现了动作事件侦听接口ActionListener。接口ActionListener只有一个需要实现的方法public void actionPerformed(ActionEvent e)。在类ActionFrame中,使用语句:ActionListener al=new LookAndFeelListener();创建了对象al,由于内部类LookAndFeelListener实现了接口ActionListener,因此对象al可以被注册到动作事件源btnLookAndFeel:btnLookAndFeel.addActionListener(al);这样,当事件源btnLookAndFeel发生动作事件时,就会调用侦听器al对象中的actionPerformed(ActionEvent e)方法,并且所发生的动作事件以一个ActionEvent类型的对象传递进来。事件处理实例续l不仅是JButton类型的事件源能产生动作事件(ActionEvent),也有其它类型的事件源可以产生动作事件。例如点击菜单(JMenuItem)选项、双击列表框中(JList)的选项以及在文本输入框(JTextField、JPasswordField)中按下回车键等,也会产生动作事件。l本小节介绍了三种(独立的类、内部类以及匿名内部类,具体内容参见教材)方式来注册事件侦听器,希望读者都能够掌握。因为,这三种方式都可能在别的程序员编写的程序中出现,而你很可能需要阅读这样的程序。6.2.3使用事件适配器 前面我们已经知道,在缺省情形下,关闭框架(JFrame)只是使之隐藏。可以通过 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);使得在关闭框架时应用程序退出。由于在关闭框架时,会发生一个窗口事件(WindowEvent),因此也可以通过捕获该事件,然后让应用程序退出。任何实现了WindowListener接 口 的 类 所 生 成 的 对 象 均 可 以 注 册 到 窗 口 事 件 源。由 于WindowListener接口中包含了如下的七个方法:public interface WindowListenervoid windowActivated(WindowEvent e);void windowClosed(WindowEvent e);void windowClosing(WindowEvent e);void windowDeactivated(WindowEvent e);void windowDeiconified(WindowEvent e);void windowIconified(WindowEvent e);使用事件适配器续 因此,一个类要实现WindowListener接口,就必须实现该接口中的所有七个方法。例如,可以按如下方式定义一个WindowExit类,并且实现WindowListener接口:class WindowExit implements WindowListener public void windowActivated(WindowEvent e)public void windowClosed(WindowEvent e)public void windowClosing(WindowEvent e)System.exit(0);/强制应用程序退出 public void windowDeactivated(WindowEvent e)public void windowDeiconified(WindowEvent e)public void windowIconified(WindowEvent e);public void windowOpened(WindowEvent e)然后就可以将WindowExit生成的对象注册为窗口事件侦听器:JFrame f=new JFrame();WindowListener wl=new WindowExit();f.addWindowListener(wl);使用事件适配器续然而,在很多时候我们只对其中某个或是某几个方法感兴趣,例如在本例中,就只对其中的windowClosing(WindowEvent e)方法感兴趣,如果像上面一样直接定义一个类去实现WindowListener接口,对那些不感兴趣的方法也必须实现。尽管只是用空方法去实现那些不感兴趣的方法,这也是一件麻烦的事情。AWT事件模型中使用适配器(Adapter)类来帮助程序员做这件事情:对于那些具有不止一个方法的事件侦听接口(例如WindowListener),都提供了一个用空方法实现接口中全部方法的适配器类(例如WindowAdapter)。这样当程序员只需要继承适配器类,然后覆盖自己感兴趣的方法即可,而不用再去实现接口中所有方法。例如,上面的WindowExit类可以按如下方式来定义:class WindowExit extends WindowAdapter public void windowClosing(WindowEvent e)System.exit(0);/强制应用程序退出 然后使用和前面类似的方式,将WindowExit生成的对象注册为窗口事件侦听器:JFrame f=new JFrame();WindowListener wl=new WindowExit();f.addWindowListener(wl);这样,就大大减少了程序员的编码工作量。6.2.4 AWT事件继承关系 AWT事件模型中事件类的继承关系 AWT事件模型中提供的侦听器接口及对应的适配器类 侦听器接口适配器类ActionListener无AdjustmentListener无ComponentListenerComponentAdapterContainerListenerContainerAdapterFocusListenerFocusAdapterItemListener无KeyListenerKeyAdapterMouseListenerMouseAdapterMouseMotionListenerMouseMotionAdapterMouseWheelListener无TextListener无WindowListenerWindowAdapterWindowFocusListener无WindowStateListener无6.3布局管理 l在Java中,GUI组件在容器中的布局是由容器的布局管理器(Layout Manager)来决定的。每个容器都具有一个缺省的布局管理器。程序设计人员可以方便地改变容器的布局管理器。例如面板的缺省布局管理器是流布局管理器(FlowLayout),内容窗格的缺省布局管理器是边框布局管理器(BorderLayout)。如果面板或是内容窗格的缺省布局管理器不能满足要求,可以调用这两种容器的setLayout(aNewLayout)方法来改变其布局管理器,方法setLayout()的参数是一个布局管理器对象。6.3.1 流式布局 l例6.3.1使用类似方法向一个面板中添加三个按钮,图6.3.1是程序的运行结果。可以发现,这三个按钮是按照被添加到面板中的顺序排列在一行上的。如果将框架的宽度缩小,可以发现三个按钮将排列成两行,如图6.3.2所示。由此可知:使用FlowLayout布局时,GUI组件将按照添加入容器的顺序自左而右排列在一行上,如果一行排不下,另起一行;也就是说组件是按照自左而右、自上而下的顺序进行排列的。lFlowLayout 类提供了三种构建器public FlowLayout()、public FlowLayout(int alignment)和public FlowLayout(int alignment,int horizontalGap,int verticalGap)。alignment参数可以取值FlowLayout.LEFT、FlowLayout.CENTER或是FlowLayout.RIGHT,用于指定组件在一行上的对齐方式。horizontalGap和verticalGap分别表示组件在水平和垂直方向上的间距(以像素为单位)。缺省情况下,alignment取值为FlowLayout.CENTER,horizontalGap和verticalGap均取值为5。6.3.2 边框布局 使用了边框(BorderLayout)布局的容器均提供5个位置用于存放组件,分别是North、South、East、West以及Center,如图所示:下面的语句将一个按钮添加到内容窗格中:contentPane.add(new JButton(North),BorderLayout.NORTH);例子:import javax.swing.*;import java.awt.*;public class BorderLayoutExample public static void main(String args)JFrame f=new JFrame();Container contentPane=f.getContentPane();contentPane.add(new JButton(North),BorderLayout.NORTH);contentPane.add(new JButton(South),BorderLayout.SOUTH);contentPane.add(new JButton(West),BorderLayout.WEST);contentPane.add(new JButton(East),BorderLayout.EAST);contentPane.add(new JButton(Center),BorderLayout.CENTER);f.setSize(300,200);f.show();运行结果l观察运行结果,如果对框架进行缩放,可以发现BorderLayout的特点是:North和South位置的组件在水平方向上会扩张,以填满水平方向的空间,垂直方向不变;West和East位置的组件在垂直方向上会扩张,以填满垂直方向的空间,水平方向不变;而Center位置的组件会在水平和垂直方向均会尽量扩张,填满中部的空间。l此外,如果向同一个位置(比如West)添加多个组件,那么只有最后一个被添加的才是有效的,也就是说BorderLayout布局中的每个位置只能放一个组件。6.3.3 网格布局 网格布局(GridLayout)将容器划分为大小相同的网格,把GUI组件向使用了网格布局的容器中添加时,是按照自左向右,自上而下的位置存放的。GridLayout类提供了两个构建器:public GridLayout(int rows,int columns)public GridLayout(int rows,int columns,int horizontalGap,int verticalGap)rows和columns分别指定划分网格的行数及列数。horizontalGap和verticalGap用于指定组件在水平和垂直方向上的间隔,缺省情况下均为零。阅读例6.3.3 GridWindow.java 的源代码。例6.3.3运行结果l可以发现,添加到使用网格布局容器中的GUI组件,均具有相同的大小。对容器进行缩放后,其中的GUI组件也进行同步的缩放。也就是说,网格布局适合于规则的布局。6.3.4 网格袋布局 在构建复杂的用户界面时,仅仅使用前面所讲的三种布局往往不能达到理想的效果。网格袋布局GridBagLayout是最灵活(也是最复杂的)一种布局管理器,该布局管理器具有强大的功能,非常适合复杂界面的布局。与网格布局类似,网格袋布局也是将用户界面划分为若干个网格(Grid),不同之处在于:(1)网格袋布局中的每个网格的宽度和高度都是可以不一样的。(2)每个组件可以占据一个或是多个网格。(3)可以指定组件在网格中的停靠位置。当将一个GUI组件添加到使用了网格袋布局的容器中时,需要指定该组件的位置、大小以及缩放等一系列约束条件。可以使用一个GridBagConstraints类型的对象来存储这些约束条件,这样,向使用网格袋布局的容器中添加组件的代码框架如下:代码框架:JPanel p=new JPanel();JTextField txtField=new JTextField();p.setLayout(new GridBagLayout();/容器p设置为网格袋布局 /创建约束条件对象 GridBagConstraints constraints=new GridBagConstraints();/设置具体的约束条件 ./按照约束条件constraints将txtField添加到p中 p.add(txtField,constraints);如何设置约束条件,是使用网格袋布局中最重要、也是最困难的步骤。下面,我们通过一个实例来仔细说明约束条件中有哪些参数需要设置以及如何设置。实例:l目标:们想在一个面板上按照图6.3.7所示排列组件,此外,我们还希望面板上的标签在面板缩放时,大小不改变;文本框在面板缩放时,在水平方向上能够相应地缩放,而在垂直方向上大小不改变。参数设置l对于要添加到该面板中的组件,需要有一个GridBagConstraints 类型的约束条件对象constraints。那么,constraints中有如下字段需要设置:lconstraints.gridx和constraints.gridy 这两个字段用于指定组件的起始网格坐标。例如,对于出生日期标签:constraints.gridx=2;constraints.gridy=1;对于备注文本框:constraints.gridx=1;constraints.gridy=2;lconstraints.gridwidth和constraints.gridheight 这两个字段用于指定组件所占网格的列数和行数。对于备注文本框:constraints.gridwidth=2;constraints.gridheight=1;对于出生日期标签:constraints.gridwidth=1;constraints.gridheight=1;lconstraints.fill 组件在网格中的填充方式。GridBagConstraints 中定义了一些常量用于确定组件在网格中的填充方式:GridBagConstraints.HORIZONTAL /水平方向尽量扩张 GridBagConstraints.VERTICAL /垂直方向尽量扩张 GridBagConstraints.BOTH /水平、垂直方向均扩张 GridBagConstraints.NONE /水平、垂直方向均不扩张参数设置lconstraints.insets 该字段是一个Insets类型的对象。该对象用作所添加组件的外部填塞,其大小由该对象中的left、top、right及buttom字段决定。例如:constraints.insetsnew Insets(2,2,2,2);lconstraints.ipadx和constraints.ipady 与constraints.insets字段相对应,这两个字段称为组件的内部填塞。这两个值被加到组件的最小宽度和最小高度上,从而保证组件不会收缩到它的最小尺寸之下。lconstraints.anchor 当组件比所在网格小的时候,可以使用该字段来确定组件在网格中的停靠位置。GridBagConstraints中定义了如下的常量来表示组件的停靠位置:GridBagConstraints.CENTER GridBagConstraints.NORTH GridBagConstraints.NORTHEAST GridBagConstraints.EAST GridBagConstraints.SOUTHEAST GridBagConstraints.SOUTH GridBagConstraints.SOUTHWEST GridBagConstraints.WEST GridBagConstraints.NORTHWEST参数设置lconstraints.weightx和constraints.weighty 这两个字段是组件在水平方向和垂直方向的扩张权重。如果在某个方向上不希望组件扩张,则将该方向上的权重置为0。例如对于出生日期标签,水平、垂直方向均不希望扩张:constraints.weightx=0;constraints.weighty=0;对于备注文本框,水平方向扩张,而垂直方向不扩张:constraints.weightx=1;constraints.weighty=0;理论上权重可以取任意非负值,用以表示扩张的程度。但是实践中我们发现,通过调整权值来设定各个组件扩张意义并不大。一个简单、适用的规律就是:将需要扩张方向上的权重设定为1;不需要扩张方向上的权重设定为0。l特别要小心,权重字段的取值要和fill字段相适应。l源代码见例例6.3.4。6.4 常用GUI组件 l标签(JLabel)通常是用来标识另外一个组件的含义。以在标签上显示文字、图象或是文字图象的组合。JLabel labText=new JLabel(“文本标签”);labText.setText(文本标签);ImageIcon icon=new ImageIcon(image/greenflag20.gif);JLabel labImage=new JLabel(icon);labImage.setIcon(aIcon);如果要在标签上同时显示文本和图象,可以使用JLabel提供的一个构建器JLabel(String text,Icon icon,int horizontalAlignment)。该构建器中,第一个参数是欲显示的文本,第二个参数是欲显示的图象,第三个参数为水平方向上的对齐方式,取值为:SwingConstants.LEFT、SwingConstants.RIGHT或SwingConstants.CENTER。如:JLabel labTextImage=new JLabel(文本图象标签,icon,SwingConstants.LEFT);标签上同时显示文本和图象时,在缺省情况下,文字是显示在图象的右侧的。如果希望文字显示在图象的左侧,可以使用如下方法:labTextImage.setHorizontalTextPosition(SwingConstants.LEFT);类似地,可以设置文本与图象在垂直方向上的相对位置。标签还支持使用HTML类型的文本参数,使用HTML可以方便地在标签上显示丰富多彩的文本,例如:String htmlText=a Red Label;JLabel labHTML=new JLabel(htmlText);6.4.2.1文本框 用户可以在文本框中输入单行文本并且进行编辑。下面的代码生成了一个文本框对象:JTextField txtA=new JTextField();在生成一个文本框对象时初始化文本框中的文本内容:JTextField txtA=new JTextField(abc);指定文本框的列宽度:JTextField txtA=new JTextField(20);同时指定初始文本内容与列宽度:JTextField txtA=new JTextField(abc,20);不要依赖列宽度参数来设定文本框的宽度大小。列宽度参数只是影响到文本框初始大小的设定,最终还是由文本框所在容器的布局管理器来决定的。使用文本框对象的getText()方法,可以取得文本框中的文本内容。setEditable(boolean aValue)方法来设置文本框是否可编辑。6.4.2.2密码框 密码框实际上是一种特殊类型的文本框,用户可以向其中输入文本并加以编辑。和文本框不同的是,向密码框中输入文本时,显示的不是实际输入的文本,而是特殊的回显字符(通常是*)。可以使用setEchoChar(char c)方法来改变缺省的回显字符。需要注意的是,取得文本框中的文本时,使用方法getText(),该方法返回的是一个String类型的对象;而要取得密码框中的文本,使用方法getPassword(),该方法返回的是一个char数组。例如,创建了一个密码框:JPasswordField txtPwd=new JPasswrodField(20);设定该密码框的回显字符为#:txtPwd.setEchoChar(#);取得密码框中的内容:char pwd=txtPwd.getPassword();也可以方便地将char数组转化为String类型的对象:String pwdStr=new String(txtP.getPassword();6.4.2.3文本域l文本域允许用户在其中输入多行文本并进行编辑。创建一个文本域对象:JTextArea txtArea=new JTextArea();l还可以在创建时指定文本域的行数和列数:JTextArea txtArea=new JTextArea(10,30);l需要注意的是,和文本框一样,不要依赖列这两个参数来设定文本域的大小。l文本域对象的setLineWrap(true)方法来将文本域设置为自动换行。l给文本域加上滚动条非常简单,只需要将文本域作为参数创建一个滚动窗格(JScrollPane)即可(不仅仅是文本域,很多其它组件需要增加滚动条时,也是将组件添加到滚动窗格中):JFrame f=new JFrame();JTextArea t=new JTextArea();JScrollPane scroll=new JScrollPane(t);f.getContentPane().add(scroll);l滚动窗格提供了方法用来设定水平或是垂直滚动条的显示策略:setHorizontalScrollBarPolicy(int policy)setVerticalScrollBarPolicy(int policy)参数policy可以取值为(三种策略):JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED/根据需要显示 JScrollPane.VERTICAL_SCROLLBAR_NEVER/从不显示 JScrollPane.VERTICAL_SCROLLBAR_ALWAYS /一直显示6.4.2.4组合框 l使用组合框JComboBox。这样,一方面可以减少用户的输入工作量,另一方面还可以减少用户输入出错的机会。l组合框可以以两种模式工作:可编辑模式与不可编辑模式。在缺省情形下,组合框处于不可编辑的模式。在不可编辑编辑模式下,用户点击组合框后,组合框会提供一个选项列表供用户选择,并且用户只能从该选项列表中选择一项作为组合框的输入。在可编辑模式下,一方面用户可以从选项列表中选择,另一方面还可以直接在组合框中输入并进行编辑。l使用addItem(Object anObject)方法向组合框中添加选项,例如:JComboBox comFont=new JComboBox();comFont.addItem(“宋体”);l如果想在选项列表中插入选项,使用insertItemAt(Object anObject,int index)方法,第一个参数是待插入的选项,第二个参数是插入的位置索引,例如:comFont.insertItemAt(“隶书”,2);l组合框还提供了两种方法用以删除选项列表中的选项:removeItem(Object anObject)和removeItemAt(int anIndex)。例如:comFont.removeItem(宋体);comFont.removeItemAt(0)组合框事件组合框事件l当用户选中了组合框选项列表中的一项,组合框会生成一个动作事件(ActionEvent)。监听该事件,就可以取得当前被选中的选项。在事件侦听器中使用getSelectedItem()方法:Object selectedItem=comFont.getSelectedItem();也可以先使用getSelectedIndex()得到所选中选项的位置索引,然后使用getItemAt(int index)方法来取得选项值:int index=comFont.getSelectedIndex();Object selectedItem=comFont.getItemAt(index);l在可编辑的组合框中,键入回车后,组合框同样发生动作事件。这里需要注意的是:如果用户在组合框中输入的值不是选项列表中的任何一项(以图6.4.8示例),在监听器中使用getSelectedItem()方法,得到的结果是方正姚体:Object selectedItem=comFont.getSelectedItem();/selectedItem为 方正姚体 而如果使用如下方式,则不能正确得到用户的实际输入:int index=comFont.getSelectedIndex();/index的值为-1 Object selectedItem=comFont.getItemAt(index);/selectedItem为 null6.4.3.1单选按钮 l单选按钮(JRadioButton)通常成组(Group)使用,即若干个单选按钮构成一组,并且每次只能有一个按钮被选中,适用于从多个备选选项中选择一项的场合(如图6.4.9所示)。从完成的功能来看,类似于不可编辑的组合框。l当备选选项内容较少时,既可以使用单选按钮,也可以使用组合框。但是当备选选项内容较多时,使用单选按钮就不合适了,因为要占据太多的画面显示空间。l在实际使用时,先生成一组单选按钮,例如:JRadioButton radMSSQL=new JRadioButton(MS SQL Server);JRadioButton radOracle=new JRadioButton(ORACLE Server);JRadioButton radMysql=new JRadioButton(MySQL Server);然后生成一个按钮组(ButtonGroup)对象,并将这些单选按钮添加到其中:ButtonGroup group=new ButtonGroup();group.add(radMSSQL);group.add(radOracle);group.add(radMysql);单选按钮续l当对一组单选按钮进行布局时,是对该组中的每个按钮进行布局,而不是对按钮组对象布局。按钮组对象只是用来控制这一组按钮的行为的,即每次仅有一个按钮能被选中。l和其它类型的按钮一样,点击一个单选按钮时,同样生成动作事件(ActionEvent)。例6.4.4中,使用了三个单选按钮构成一个按钮组。这三个单选按钮分别指示不同的数据库服务器类型。当用户点击单选按钮时,会在一个标签上显示出当前所选定的数据库服务器类型。l阅读例6.4.4 源代码。6.4.3.2复选框 l前面所讲的组合框和单选按钮均只能从备选选项中选择一项,即各个选项之间是互斥的。当需要从备选选项中选择不止一项时,可以使用复选框(JCheckBox)。复选框是一种二状态的GUI组件:重复点击同一个复选框,会在选中和未选中这两种状态之间进行切换。一组复选框中可以同时有多个复选框被选中,如图6.4.10所示。l下面的这条语句生成一个复选框对象,其中的字符串参数用以表示该复选框的含义:JCheckBox chkOperation=new JC

    注意事项

    本文(《Java程序设计与应用开发》第6章GUI编程.ppt)为本站会员(qwe****56)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开