大连交通大学软件学院第9章组件及事件处理配合例子源代码一起使用Java语言程序设计辽宁省教育软件大赛参赛作品第2页2020/1/19导读主要内容−JavaSwing概述−窗口−常用组件与布局−处理事件−使用MVC结构−对话框−发布GUI程序重点和难点−重点:Swing包中的各种组件,各种布局和事件处理器的应用−难点:各种事件处理器的使用第3页2020/1/19§9.1JavaSwing概述通过图形用户界面(GUI:GraphicsUserInterface),用户和程序之间可以方便地进行交互。Java的Swing工具包中包含了许多类来支持GUI设计。如:按钮、菜单、列表、文本框等组件类,同时它还包含窗口、面板等容器类。第4页2020/1/19§9.1JavaSwing概述javax.swing包提供了功能更为强大的用来设计GUI的类。java.awt和javax.swing包中一部分类的层次关系的UML类图如图9.1。底层容器第5页2020/1/19§9.1JavaSwing概述在学习GUI编程时,必须要很好的掌握两个概念:容器类和组件类。javax.swing包中JComponent类是java.awt包中Container类的一个直接子类、是java.awt包中Component类的一个间接子类,学习GUI编程主要是学习掌握使用Component类的一些重要的子类及其使用方法。以下是GUI编程经常提到的基本知识点。(1)Java把Component类的子类或间接子类创建的对象称为一个组件.(2)Java把Container的子类或间接子类创建的对象称为一个容器.(3)可以向容器添加组件。Container类提供了一个public方法:add(),一个容器可以调用这个方法将组件添加到该容器中。第6页2020/1/19(4)容器调用removeAll()方法可以移掉容器中的全部组件;调用remove(Componentc)方法可以移掉容器中参数c指定的组件。(5)注意到容器本身也是一个组件,因此可以把一个容器添加到另一个容器中实现容器的嵌套。(6)每当容器添加新的组件或移掉组件时,应当让容器调用validate()方法,以保证容器中的组件能正确显示出来如:importjavax.swing.*;JFramef=newJFrame();JButtonbutton=newJButton(确定)f.add(button);…….f.remove(button);§9.1JavaSwing概述第7页2020/1/19§9.2窗口Java提供的JFrame类的实例是一个底层容器,即通常所称的窗口。其他组件必须被添加到底层容器中,以便借助这个地层容器和操作系统进行信息交互。JFrame类是Container类的间接子类。当需要一个窗口时,可使用JFrame或其子类创建一个对象。第8页2020/1/19§9.2.1JFrame常用方法JFrame构造方法:JFrame()创建一个无标题的窗口。JFrame(Strings)创建标题为s的窗口。常用方法:1)publicvoidsetBounds(inta,intb,intwidth,intheight设置窗口的初始位置是(a,b),即距屏幕左面a个像素、距屏幕上方b个像素;窗口的宽是width,高是height。2)publicvoidsetSize(intwidth,intheight)设置窗口的大小。3)publicvoidsetLocation(intx,inty)设置窗口的位置,默认位置是(0,0)。4)publicvoidsetVisible(booleanb)设置窗口是否可见,窗口默认是不可见的。5)publicvoidsetResizable(booleanb)设置窗口是否可调整大小,默认可调整大小。6)publicvoiddispose()撤消当前窗口,并释放当前窗口所使用的资源。第9页2020/1/197)publicvoidsetExtendedState(intstate)设置窗口的扩展状态.8)publicvoidsetDefaultCloseOperation(intoperation)该方法用来设置单击窗体右上角的关闭图标后,程序会做出怎样的处理。如:EXIT_ON_CLOSE9)publicvoidsetLayout(LayoutManagermgr)设置此容器的布局管理器。10)publicComponentadd(Componentcomp)将指定组件追加到此容器的尾部。11)publicvoidsetMenuBar(MenuBarmb)将此frame的菜单栏设置为指定的菜单栏。12)publicvoidvalidate()使用validate方法会使容器再次布置其子组件。在修改此容器的子组件的时候(在容器中添加或移除组件,或者更改与布局相关的信息),应该调用上述方法。例子1用JFrame创建了两个窗口,程序运行效果如图9.2。§9.2.1JFrame常用方法第10页2020/1/19§9.2.2菜单条、菜单、菜单项1.菜单条JComponent类的子类JMenubar负责创建菜单条,JFrame类有一个将菜单条放置到窗口中的方法:setJMenuBar(JMenuBarbar);该方法将菜单条添加到窗口的顶端。菜单条JMenuBar类构造方法:JMenuBar();JMenuBarMbar=newJMenuBar()2.菜单JComponent类的子类JMenu负责创建菜单。菜单JMenu类构造方法:JMenu();JMenu(Strings);JMenum=newJMenu();常用方法:publicvoidadd(JMenuItemitem)向菜单增加由参数item指定的菜单项publicJMenuItemgetItem(intn)得到指定索引处的菜单选项。publicintgetItemCount()得到菜单选项的数目。3.菜单项JComponent类的子类JMenuItem负责创建菜单项,JMenuItem类的主要方法有以下几种:JMenuItem(Strings)构造有标题的菜单项。JMenuItem(Stringtext,Iconicon)构造有标题和图标的菜单项publicvoidsetAccelerator(KeyStrokekeyStroke)设置菜单项快捷键第11页2020/1/19§9.3常用组件与布局可以使用JComponent的子类JTextField创建各种组件。利用组件可以完成应用程序与用户的交互及事件处理等。也可以在命令行窗口反编译组件即时查看组件所具有的属性及常用方法,例如:C:\javapjavax.swing.JComponent也可以查看类库帮助文档.例如下载Java类库帮助文档:jdk-6-doc.zip。第12页2020/1/19§9.3.1常用组件1.文本框:由JComponent的子类JTextField创建文本框。–构造函数:JTextField();JTextField(intcolumns);–常用方法:publicStringgetText();–publicvoidsetText(Stringt);2.文本区:由JComponent的子类JTexArea创建文本区。–构造函数:JTextArea();JTextArea(introws,intcolumns)–常用方法:publicStringgetText();–publicvoidsetText(Stringt);3.按钮:由JComponent的子类JButton类用来创建按钮。–构造函数:JButton();JButton(Stringtext);–常用方法:publicvoidaddActionListener(ActionListenerl);第13页2020/1/19§9.3.1常用组件4.标签:由JComponent的子类JLabel类用来创建标签。–构造函数:JLabel();JLabel(Stringtext);JLabel(Iconimage);–常用方法:publicStringgetText();–publicvoidsetText(Stringt);5.选择框:由JComponent的子类JCheckBox类用来创建选择框–构造函数:JCheckBox();JCheckBox(Stringtext);–常用方法:publicvoidaddItemListener(ItemListenerl)–publicvoidaddActionListener(ActionListenerl)ItemListener接口中:ObjectgetItemSelectable()相当于getSource();–publicintgetStateChange();–若被选中SELECTED/DESEELCTED6.单选按钮:由JComponent的子类JRadioButton类用来创建单项选择框。–构造函数:JRadioButton();JRadioButton(Stringtext);–常用方法:publicvoidaddItemListener(ItemListenerl)第14页2020/1/19§9.3.1常用组件7.下拉列表:由JComponent的子类JComboBox类用来创建下拉列表。–构造函数:JComboBox();JComboBox(Object[]items)–常用方法:publicvoidaddItemListener(ItemListenerl)–publicObjectgetSelectedItem();–publicintgetSelectedIndex()8.密码框:由JComponent的子类JPasswordField创建密码框.–构造函数:JPasswordField();JPasswordField(intcolumns)–常用方法:publicStringgetText();–publicvoidsetText(Stringt);–publicvoidsetEchoChar(charc)使用该方法重新设置回显字符.–publicchar[]getPassword()方法可以返回实际的密码例子3(Example9_3.java,ComponentInWindow.java)包含有上面提到的常用组件。第15页2020/1/19§9.3.2常用容器JComponent是Container的子类,因此JComponent子类创建的组件也都是容器。容器经常用来添加组件。JFrame是底层容器,本节提到的容器被习惯地称做中间容器,中间容器必须被添加到底层容器中才能发挥作用。1.JPanel面板:构造方法:JPanel();如:JPanelp=newJPanel();常用方法:publicvoidadd();使用JPanel创建面板,再向这个面板添加组件,然后把这个面板添加到其它容器中。JPanel面板的默认布局是FlowLayout布局。2.滚动窗格JScrollPane:构造方法:JScrollPane();JScrollPane(Componentview)JScrollPane(intvsbPolicy,inthsbPolicy)其中参数:intHORIZONTAL_SCROLLBAR_ALWAYS等常用方法:publicJViewportgetViewport()publicvoidsetViewport(JViewportviewport)例如:可以将文本区放到一个滚动窗格中。JScorollPanescroll=newJScorollPane(newJTextArea());第16页2020/1/193.拆分窗格JSplitPane:窗格有两种类型:水平拆分和垂直拆分常用的构造方法:(1)JSplitPane(inta,Componentleft,Comp