1、第9章 图形用户界面了解Java GUI的发展历史掌握常用Swing组件的功能和应用掌握eclipse可视化开发环境下图形用户界面的设计方法理解Java的事件处理机制学习目标学习目标:n9.1生成图形化用户界面生成图形化用户界面n9.2框架框架n9.3Java布局管理布局管理n9.4 Java事件处理事件处理n9.5常用常用Swing组件的使用组件的使用n9.6实训:简易聊天界面实训:简易聊天界面n9.7习题习题 第第9章章 图形图形用户界面用户界面9.1.1GUI概述概述9.1.2 Java图形用户界面的构成图形用户界面的构成9.1生成生成图形化用户界面图形化用户界面 图形用户界面可以为应用
2、程序提供想要的“外观”或表示,然后对其添加必要的业务逻辑程序,以便使它们能够发挥效用。在该界面下用户往往只需通过单击、双击、拖曳鼠标和简单的文字键入就可以轻松地操作计算机完成任务。图形用户界面生动形象、操作直观简便。图形用户界面(Graphics User Interface,简称GUI)是指以图形的方式实现人与计算机之间的交互。用户与这些组件(例如按钮、文本、列表等)进行交互,为系统提供信息和从系统获取信息,以便完成客户的需求。1.AWT 当Java在1995年的春天第一次发布的时候,它包含了一个叫AWT(Abstract Windowing Toolkit)的库,用来构建图形用户界面应用程
3、序。Java很有雄心的宣言write once,run anywhere许诺:一个具有下拉菜单,命令按钮,滚动条以及其他常见的GUI控件的应用程序将能够在各种操作系统上运行而不必重新编译成针对某一平台的二进制代码。9.1.1 GUI概述概述 为了方便用Java构建图形用户界面,Sun最初提供了一个在所有平台下具有的独特Java外观的图形界面库。Sun在applet技术策略方面的首要伙伴Netscape提出applets应该维持和运行时平台一样的外观。他们希望applets在某一平台下在显示和行为上能够像其他应用程序一样。为了实现Netscape的本地外观的目标,在JDK的第一个发布版中包含了A
4、WT这个库。但是当利用AWT来构建图形用户界面的时候,实际上是在利用本地操作系统所提供的图形库,也就是说AWT所提供的图形设计功能是有一定局限性的。使用AWT开发出来的图形用户界面在使用上非常的不灵活。比如AWT所包含的组件,其外观是固定的,无法改变,这就使得开发出来的界面非常死板。2Swing 由于awt包的不足表现,SUN公司于1998年针对它存在的问题,对其进行了扩展,开发出新的GUI组件叫做Swing。Swing是Java语言提供的第二代设计工具,它以AWT为基础,提供了比AWT更多的特性和工具,用于建立更复杂的图形用户界面。Swing开发人员只用很少的代码就可以利用Swing丰富、灵
5、活的功能和模块化组件来创建优雅的用户界面。工具包中所有的包都是以swing作为名称,例如javax.swing,javax.swing.event。现在常采用Swing组件来开发GUI应用程序。Java图形用户界面主要由容器、标准组件和用户自定义成分构成。容器是用来组织其他界面成分和元素的单元。一般一个图形用户界面对应一个复杂容器。标准组件是图形用户界面的最小单位,它里面不再包含其他的成分。GUI组件是图形用户界面标准化的结果。常用的组件有(1)选择类:单选按钮、复选按钮、下拉列表;(2)文字处理类的:文本框、文本区域;(3)命令类的:按钮、菜单等。GUI组件的作用是完成与用户的交互。包括接收
6、用户的命令、文本或选择输入,向用户显示一段文本或一个图形等。9.1.2 Java图形用户界面的图形用户界面的构成构成 用户自定义成分是指编程人员根据用户需要设计一些用户自定义的图形界面成分,如显示文字、绘制图形、显示图象等。但用户自定义成分不能像标准组件一样被系统识别和承认,只起装饰作用。不能响应用户的动作,不具有交互功能。如图9-1所示。9.2.1 构建框架构建框架9.2.2 添加组件添加组件9.2 框架框架 在应用程序中,使用框架作为容器,在框架中放置组件。SWING组件从功能上分为:容器和基本组件;容器又分为顶层容器和中间层容器。(1)顶层容器:JFrame、JDialog、JApple
7、t。用于构造图形用户界面的窗口,并容纳其它容器和组件,它们可以独立存在。(2)中间层容器:JPanel、JScrollPane、JToolBar等。容纳其它组件,但是不能独立存在,需要添加到其它容器中。通常用来按功能组织基本组件。基本组件:按钮JButton、文本框JTextField等等。是图形用户界面的基本组成单位,不能独立存在,必须将其添加到一定的容器中。在Java中,顶层窗口被称为框架。在AWT中这个类被称为Frame,在Swing中称为JFrame,它扩展于Frame类。JFrame创建的框架窗口可以独立存在,并且带有边框、标题及用于关闭和最大化、最小化窗口的图标按钮。【例9-1】创
8、建一个框架窗口举例。解题思路:每一个Java的GUI程序都必须至少包含一个顶层容器组件作为窗口。代码:程序JFrameDemo.javaJFrameDemo.javaimport javax.swing.*;public class JFrameDemo extends JFrame public JFrameDemo()super(JFrame窗口);9.2.1 构建框架构建框架setBounds(50,50,300,120);setDefaultCloseOperation(EXIT_ON_CLOSE);setVisible(true);public static void main(St
9、ring args)JFrameDemo f=new JFrameDemo();运行结果如图9-2所示。图9-2 一个窗口运行结果 【说明】public void setBounds(int x,int y,int width,int height)是设置出现在屏幕上时的初始位置为(x,y),即距屏幕左面x个像素,距屏幕上方y个像素;width是窗口的宽,height是高。构成图形用户界面的各种元素称为组件。容器是图形用户界面中容纳组件的部分,一个容器可容纳一个或多个组件,甚至可以容纳其他容器。【例9-2】在窗口中添加组件举例。解题思路:放在“JFrame”中的每个一信息都是一个组件。代码:程
10、序FrameEx.javaFrameEx.javaimport java.awt.*;import javax.swing.*;public class FrameEx public void go()9.2.2添加组件添加组件 JFrame win=new JFrame(JFrame);Container contentPane=win.getContentPane();contentPane.setLayout(new GridLayout(5,1);JLabel labOne=new JLabel(Swing组件学习,JLabel.CENTER);JLabel labTwo=new JL
11、abel(计算机学院,JLabel.CENTER);JButton queding=new JButton(确定);contentPane.add(labOne);contentPane.add(labTwo);contentPane.add(queding);win.setSize(200,200);win.setVisible(true);public static void main(String arg)FrameEx fe=new FrameEx();fe.go();运行结果如图9-3所示。【说明】第1行和第2行的作用就是将awt包和swing包引入到该程序中,因为该程序中要用到aw
12、t包和swing包中的类。例如Container类和GridLayout类都属于awt包。其他以“J”开头的类都属于swing包。Containe类是Java语言的开发者事先定义好的类。关于这个类的一些功能也是设定好的。作为使用者,只要将这个类用import的方式引入到自己的程序中就可以使用它了。这两个包的引用会在图形用户界面的程序中经常用到。9.3.1BorderLayout9.3.2FlowLayout9.3.3GridLayout9.3.4CardLayout9.3.5案例案例1:常用布局管理器:常用布局管理器设计计算器界面设计计算器界面9.3 Java布局布局管理管理 组件在被放到容器
13、中时,要遵循一定的布局方式。在Java的图形用户界面中,有专门的类来管理组件的布局,称这些类为布局管理器。在“JFrame”中每一条信息都是一个组件,这些组件应该如何安排就是由布局管理器负责的。所谓的布局管理器,实际上就是能够对组件进行布局管理的类。用吃饭的例子就能很好的说明容器、组件和布局之间的关系。容器就是吃饭的桌子,组件就是一盘盘的菜。我们吃饭时要安排菜应该放在什么位置,这就是布局管理器。BorderLayout又称边界布局管理器,它将窗口划分为东、西、南、北、中五个区域,这五个区域分别用英文East、West、South、North、Center表示。用参数BorderLayout.E
14、AST、BorderLayout.WEST、BorderLayout.SOUTH、BorderLayout.NORTH和BorderLayout.CENTER来表示。在窗口中添加组件时,系统会根据参数将组件摆放到窗口的相应位置。【例9-3】应用BorderLayout布局举例。解题思路:通过setLayout()方法可以完成BorderLayout布局管理器的设置,语句为:contentPane.setLayout(new BorderLayout();9.3.1BorderLayout代码:程序BorLayDemo.javaBorLayDemo.javaimport java.awt.*;i
15、mport javax.swing.*;public class BorLayDemo extends JFrame private JButton myButton1,myButton2,myButton3,myButton4,myButton5;public BorLayDemo()super(BorderLayout布局);setBounds(50,50,300,120);setLayout(new BorderLayout();/设置窗口为边界布局setDefaultCloseOperation(EXIT_ON_CLOSE);setVisible(true);myButton1=new
16、 JButton(东按钮);myButton2=new JButton(南按钮);myButton3=new JButton(西按钮);myButton4=new JButton(北按钮);myButton5=new JButton(中间按钮);add(East,myButton1);/添加按钮到窗口指定方位add(South,myButton2);add(West,myButton3);add(North,myButton4);add(Center,myButton5);public static void main(String args)BorLayDemo f=new BorLayDe
17、mo();运行结果如图9-4所示。图9-4 BorderLayout布局运行结果【说明】在窗口中添加组件时,系统会根据参数将组件摆放到窗口的相应位置。如果当中央位置没有摆放组件时,位置被空缺,其他位置的组件不会占用中央的位置。FlowLayout是一个最简单的布局管理器,这个布局管理器的功能就是将容器中的组件从左到右,从上到下的排列。因此,它又被称为流布局管理器。【例9-4】应用FlowLayout布局举例。解题思路:采用FlowLayut布局管理器,所有组件是按照添加时的顺序,按从左到右,从上到下的顺序排列的。代码:程序FlowLayDemo.javaFlowLayDemo.javaimpo
18、rt java.awt.*;import javax.swing.*;public class FlowLayDemo extends JFrame private JButton myButton1,myButton2,myButton3,myButton4,myButton5;9.3.2FlowLayoutpublic FlowLayDemo()/FlowLayDemo类的构造方法 super(FlowLayout布局);setBounds(60,60,200,150);setLayout(new FlowLayout();/设置窗口为流式布局setDefaultCloseOperatio
19、n(EXIT_ON_CLOSE);setVisible(true);myButton1=new JButton(按钮1);/生成按钮对象myButton2=new JButton(按钮2);myButton3=new JButton(按钮3);myButton4=new JButton(按钮4);myButton5=new JButton(按钮5);add(myButton1);/添加按钮到窗口上图7.4(a)流式布局add(myButton2);add(myButton3);add(myButton4);add(myButton5);public static void main(Strin
20、g args)FlowLayDemo f=new FlowLayDemo();运行结果如图9-5所示。图9-5 FlowLayout布局运行结果 【说明】默认情况下,第一个被添加的组件摆放在第1行居中位置,其后添加的组件摆放在第一个组件的后面。当第1行再也放不下组件的时候,其后的组件从第2行开始从左到右摆放。以此类推,直到添加完所有组件。GridLayout又称网格布局管理器。相对于FlowLayout和BorderLayout来说,GridLayout局管理器是比较灵活的一种管理器。它可以通过行数和列数的设置,把窗口划分成若干个单元格,将组件放在这些单元格里。【例9-5】应用GridLayo
21、ut布局举例。解题思路:GridLayout的括号中两个参数的含义就是(行数,列数)。通过改变这两个参数的值,将窗口划分成不同的单元格。代码:程序GridLayDemo.javaGridLayDemo.javaimport java.awt.*;import javax.swing.*;public class GridLayDemo extends JFrame 9.3.3GridLayoutprivate String names=按钮a,按钮b,按钮c,按钮d,按钮e,按钮f;public GridLayDemo()super(GridLayout布局);setBounds(60,60,
22、300,200);setLayout(new GridLayout(3,3);/设置三行三列网格布局setDefaultCloseOperation(EXIT_ON_CLOSE);setVisible(true);for(int i=0;inames.length;i+)add(new JButton(namesi);/依次添加各个按钮public static void main(String args)GridLayDemo f=new GridLayDemo();运行结果如图9-6所示。图9-6 GridLayout布局运行结果【说明】GridLayout布局管理器也可以不设置行数和列数
23、,这时系统会默认行数和列数均为1。如果要摆放的组件大于GridLayout所设置的单元格个数,多出来的组件也会被摆放在窗口中,但是会破坏原来的单元格样式。CardLayout又称卡片布局。使用CardLayout容器可以容纳多个组件,但是实际上同一时刻容器只能从这些组件中选出一个来显示,就像一叠“扑克牌”每次只能显示最上面的一张一样,这个被显示的组件将占据所有的容器空间。【例9-5】应用CarLayout布局举例。解题思路:在选项卡窗格中添加5个按钮,并设置相对应的选项卡的文本提示,然后将选项卡窗格添加到窗体的内容面板中。代码:程序CardLayDemo.javaCardLayDemo.jav
24、aimport java.awt.*;import javax.swing.*;9.3.4CardLayoutpublic class CardLayDemo extends JFrame JTabbedPane p;Icon icon;private String imageName=a.jpg,b.jpg,c.jpg,d.jpg,e.jpg;public CardLayDemo()super(CardLayout布局);setBounds(100,100,500,300);setVisible(true);icon=new IconimageName.length;for(int i=0;
25、iicon.length;i+)iconi=new ImageIcon(imageNamei);p=new JTabbedPane(JTabbedPane.LEFT);for(int i=0;iicon.length;i+)int m=i+1;p.add(观看第+m+个图片,new JButton(iconi);p.validate();add(p,BorderLayout.CENTER);validate();setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);public static void main(String args)CardLa
26、yDemo f=new CardLayDemo();运行结果如图9-7所示。图9-7 CarLayout布局运行结果【说明】本例中用了嵌套JTabbedPane的窗体。解题思路:对窗体应用边界布局,在NORTH上放置一个文本框,在CENTER上放置一个面板,面板上放置计算器的相应按钮。代码:GridFrame.javaGridFrame.javaimport java.awt.*;import javax.swing.*;class GridFrame extends JFrame /定义面板,并设置为网格布局,4行4列,组件水平、垂直间距均为3 JPanel p=new JPanel(new
27、 GridLayout(4,4,3,3);JTextArea t=new JTextArea();/定义文本框 /定义字符串数组,为按钮的显示文本赋值 String 9.3.5案例案例1:常用布局管理器:常用布局管理器设计计设计计算器算器界面界面str=7,8,9,/,4,5,6,*,1,2,3,-,0,.,=,+;public GridFrame(String s)super(s);/为窗体名称赋值 setLayout(new BorderLayout();/定义窗体布局为边界布局 JButton btn;/声明按钮数组 btn=new JButtonstr.length;/创建按钮数组 f
28、or(int i=0;istr.length;i+)btni=new JButton(stri);p.add(btni);getContentPane().add(t,BorderLayout.NORTH);/将文本框放置在窗体NORTH位置 getContentPane().add(p,BorderLayout.CENTER);/将面板放置在窗体CENTER位置 setVisible(true);setSize(250,200);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setLocationRelativeTo(null);/让窗体居中显
29、示 public static void main(String args)GridFrame gl=new GridFrame(一个简单的计算器);运行结果如图9-8所示。9.4.1事件和事件源事件和事件源9.4.2事件监听器事件监听器9.4.3监听器接口监听器接口9.4 Java事件处理事件处理从JDK1.1开始起,Java语言采用基于代理的事件处理模型。当用户在文本框中键入文本后按回车键、单击按钮、在一个下拉式列表中选择一个条目等操作时,都发生界面事件。基于代理事件处理模型是引进了监听器接口,每个事件类都有相关联的监听器接口。GUI组件如果注册了相关的监听器对象,监听器对象会一直监听已注
30、册的组件对象是否有事件发生。当监听器对象监听到组件有相对应的事件发生,就会调用监听器对象中方法,即事件处理器来实现一定的动作。就这样,通过对目标监听器对象的相关Java方法调用,实现事件从事件源到监听者的传递。在学习处理事件时,必须很好的掌握事件源、监听器和处理事件的接口这三个概念。事件是程序运行中出现的行为和动作的反映。典型的事件包括:单击按钮、在文本框输入数据等。当用户移动鼠标,单击按钮时,一个事件就产生了。可能产生事件的组件称为事件源,不同事件源上发生的事件种类是不同的。例如:按钮JButton button=new JButton();图形界面都是事件驱动的,即当用户和界面进行交互通信
31、时产生事件,并由此触发事件处理程序。9.4.1事件和事件事件和事件源源 若希望事件源上引发的事件被程序处理,需要将事件源注册这 种事件类型的监听器。监听器具有监听和处理某类事件的功能。例如,可以给按钮的动作事件(ActionEvent)注册一个动作事件监听器(ActionListener)。通过注册监听器,我们可以监听事件源产生的事件,从而在事件处理程序中处理我们所需要处理的用户行为。当用户单击这个按钮时,标签里的文字由“HELLO!”变成“你好!”程序如下:9.4.2事件事件监听器监听器事件处理过程:(1)利用addActionListener方法为JButton按钮添加了一个监听器;(2)
32、当事件源button发生动作事件时,即用户单击按钮,按钮就会自动调用监听器对象中的actionPerformed(ActionEvent arg0)方法,并且所发生的动作事件以一个ActionEvent类型的对象传递进来。一个事件监听器可以处理一类事件,要使监听器具有处理某一类事件的能力,就需要让监听器实现相应的事件监听器接口,即一个监听器对象是一个实现了特定监听器接口的类的实例。一般语法形式如下:9.4.3监听器监听器接口接口【例9-6】一个文字框的文字颜色设置的程序举例。解题思路:导入事件处理的软件包java.awt.event,然后定义文本框组件和按钮组件;再将按钮组件注册相应的监听器对
33、象。代码:程序SimpleEventHandling.javaSimpleEventHandling.javaimport java.awt.*;import javax.swing.*;import java.awt.event.*;public class SimpleEventHandling extends JFrame implements ActionListener /实现接口JTextField text;/定义文本框textJButton colorButton;/定义选颜色的按钮colorButtonContainer container;public SimpleEven
34、tHandling()super(颜色版);container=getContentPane();container.setLayout(new FlowLayout();text=new JTextField(我可以变颜色);colorButton=new JButton(请选择你喜欢的颜色);colorButton.addActionListener(this);/注册监听器container.add(text);container.add(colorButton);pack();setVisible(true);public void actionPerformed(ActionEven
35、t e)/实现接口ActionListener的方法actionPerformed()if(e.getSource()=colorButton)Color colorstyle=Color.black;colorstyle=JColorChooser.showDialog(this,选择颜色,colorstyle);text.setForeground(colorstyle);colorButton.setForeground(colorstyle);public static void main(String args)SimpleEventHandling seh=new SimpleEv
36、entHandling();seh.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);运行结果如图9-9所示。图9-9 运行结果【说明】本例是实现一个ActionListener接口,所以,注册按钮组件到实现该接口的实例对象。为了能出现颜色的选择处理,对ActionListener接口的方法actionPerformed()进行定义,实现颜色选择的动作。Java语言中提供事件处理的包主要有java.awt.event和javax.swing.event包。其中,java.awt.event包提供了对awt包和swing包常见组件的支持,与事件处理相关
37、常见的的事件类和事件监听器接口见表9-1。通过实现监听器接口来编写一个监听器类的时候,接口中所定义的所有抽象方法都需要被实现,即使对处理某个事件的方法不感兴趣,仍然要编写一个空方法体。这样在某些情况会很繁琐。为了解决这个问题,AWT提供了与监听器接口配套的适配器类。对于监听器接口里定义的每个抽象方法,在适配器类中都有一个空的实现方法,这样可以减少编程的繁琐。java.awt.event中的适配器类见表9-2。【例9-7】菜单事件举例。解题思路:菜单项是JMenuItem对象,可以通过点击动作来激活动作事件;菜单项是JCheckBoxMenuItem对象,可以采用选项事件处理的方式进行处理。菜单
38、项是JRadioButtonMenuItem对象,则可以选择用动作事件或选项事件处理。代码:程序SimpleMenu.javaSimpleMenu.javaimport java.awt.*;import javax.swing.*;import java.awt.event.*;public class SimpleMenu extends JFrame JMenuBar b;/定义菜单条 JMenu menua,menub,menuc;/定义菜单 JCheckBoxMenuItem a1;/定义复选菜单项 JCheckBoxMenuItem b2;/定义复选菜单项 JRadioButton
39、MenuItem c3;/定义单选菜单项 ButtonGroup group;/定义按钮组 JTextArea displayArea;/定义文本区public SimpleMenu()super(院系导航);Container c=getContentPane();b=new JMenuBar();/创建菜单条menua=new JMenu(计算机学院);/创建菜单a1=new JCheckBoxMenuItem3;/创建菜单项for(int i=0;ia1.length;i+)a1i=new JCheckBoxMenuItem(计算机学院系+(i+1);menua.add(a1i);a1i
40、.addItemListener(new CheckBoxListener();menub=new JMenu(外语学院);b2=new JCheckBoxMenuItem3;group=new ButtonGroup();for(int i=0;ib2.length;i+)b2i=new JCheckBoxMenuItem(外语学院系+(i+1);menub.add(b2i);b2i.addItemListener(new CheckBoxListener();menuc=new JMenu(管理学院);c3=new JRadioButtonMenuItem3;for(int i=0;ic3
41、.length;i+)c3i=new JRadioButtonMenuItem(管理学院系+(i+1);c3i.addItemListener(new RadioListener();group.add(c3i);menuc.add(c3i);b.add(menua);b.add(menub);b.add(menuc);/菜单条上添加菜单setJMenuBar(b);displayArea=new JTextArea(35,35);c.add(displayArea,BorderLayout.CENTER);setSize(200,200);setVisible(true);class Che
42、ckBoxListener implements ItemListener /定义复选菜单监视器public void itemStateChanged(ItemEvent e)JMenuItem item=(JMenuItem)e.getSource();if(e.getStateChange()=e.SELECTED)displayArea.append(item.getText()+n);class RadioListener implements ItemListener /定义单选菜单监视器public void itemStateChanged(ItemEvent e)JMenuI
43、tem item=(JMenuItem)e.getSource();if(e.getStateChange()=e.SELECTED)displayArea.append(item.getText()+n);public static void main(String args)SimpleMenu e=new SimpleMenu();e.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);运行结果如图9-10所示。图9-10 运行结果【说明】对菜单处理可以通过菜单项的类型不同而展开。【例9-8】鼠标事件举例。解题思路:将一个窗口的隐性层监听起来,那
44、么在这个隐性层上所有鼠标操作都会触发MouseEvent事件。代码:程序SimpleMouse.javaSimpleMouse.javaimport java.awt.*;import javax.swing.*;import java.awt.event.*;public class SimpleMouse implements MouseListener JFrame a=new JFrame(鼠标事件演示窗口);Container contentPane=a.getContentPane();JLabel label=new JLabel(初始状态,JLabel.CENTER);publ
45、ic void go()contentPane.addMouseListener(this);contentPane.add(label);a.setSize(250,200);a.setVisible(true);public void mousePressed(MouseEvent e)label.setText(按下鼠标按钮);public void mouseReleased(MouseEvent e)label.setText(释放鼠标按钮);public void mouseEntered(MouseEvent e)label.setText(鼠标光标进入按钮);public vo
46、id mouseExited(MouseEvent e)label.setText(鼠标光标离开按钮);public void mouseClicked(MouseEvent e)label.setText(点击鼠标);public static void main(String args)SimpleMouse b=new SimpleMouse();b.go();运行结果如图9-11所示。图9-11 运行结果【说明】本例程序来主要演示MouseListener监听器对鼠标事件处理的情况。9.5.1标签标签9.5.2 按钮按钮9.5.3文本组件文本组件9.5.4 选择组件选择组件9.5.5
47、组合框组合框9.5.6列表框列表框9.5.7菜单组件菜单组件9.5.8工具栏工具栏9.5.9滚动面板滚动面板9.5.10面板面板9.5.11案例案例29.5 常用常用Swing组件的使用组件的使用 Swing组件类一般都是J开头。这些组件配合布局管理可以组合出丰富多彩的图形用户界面。这些界面再加上事件处理,就构成了完整的用户界面的编程。标签用于在窗口界面上显示一行提示性或说明性的文字。标签只能显示信息,不能用于输入。JLabel类比较常用的方法有:String getText():获取标签上的文字。void setText(String text):设置标签显示的文字为text。void se
48、tFont(Font f):设置标签文字的字体。9.5.1标签标签按钮是图形用户界面中最常见的组件,用来控制程序运行的方向。用户单击按钮时会产生ActionEvent事件,计算机将相应地执行一系列命令完成一定功能。JButton类比较常用的方法有:void setText(String text):设置按钮上的标识文字为text。String getText():获得按钮上的标识文字。9.5.2 按钮按钮1文本框是一个单行文本编辑框,用于接收用户输入的一行文字,也可以显示一行文字。JTextField类比较常用的方法有:String getText():获得文本框中的文本内容。void set
49、Text(String text):设置文本框的文本内容。2文本区是一个多行文本编辑框,用于接收用户输入的多行文字,也可以显示多行文字。当文本区的内容装满时不会自动产生滚动条,需要将文本区组件添加到JScrollPane(滚动面板)上才能实现滚动条效果。JTextArea类具有JTextField类的相同方法,另外其比较常用的方法还有:String getSelected():获取被选中的文本。void append(String text):在文本区尾部添加文本text。9.5.3文本文本组件组件1单选按钮只有“选中”和“未选中”两种状态,通常用一组单选按钮实现“多选一”的功能。在java中
50、必须使用按钮组类(javax.swing.ButtonGroup)实现将多个单选按钮位于同一组中。注意,ButtonGroup仅仅是一个逻辑分组,不是物理分组,在Palette组件板上并不存在该组件,因此需要自行定义ButtonGroup类的对象,并调用该类的add()方法将多个JRadioButton对象一一添加到ButtonGroup类对象中。JRadioBunon类比较常用的方法有:void setSelected(boolean b):设置一个单选按钮的状态,b为true表明选中。9.5.4 选择选择组件组件void setText(String text):设置单选按钮上显示的文字。