




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第9章图形界面程序设计11AWT组件和Swing组件
Java最初的GUI程序设计的类库是AWT,由底层平台负责创建图形界面元素。Swing图形用户界面在空白窗口上绘制按钮、菜单等图形界面元素。Swing的优点:Swing有一个丰富的、方便的图形界面组件集合。Swing对操作系统依赖很少,因此与底层平台相关的bug就很少。Swing在不同平台上运行的界面是一样的。由于Swing具备诸多优点,且已经成为java图形界面设计的主要工具,本书只讨论Swing图形界面编程。22容器类、组件类和辅助类
容器类是用于包含其它组件的类,AWT容器类有Frame、Panel、Applet等等,Swing容器类有JFrame、JPanel、JApplet等等。Component是所有图形界面组件类的超类,JComponent是所有Swing组件类的超类。JComponent是抽象类,它不能创建对象。常用的Swing组件有JButton、JTextField、JTextArea、JRadioButton、JMenu等,它们都是JComponent的子类。辅助类用来描述GUI组件的属性,如图形环境、颜色、字体、大小。常用辅助类有Color、Graphics、Font、LayoutManager等。32容器类、组件类和辅助类43框架JFrame
Swing中,用JFrame类描述框架
JFrame的常用构造方法有:
JFrame()
JFrame(Stringtitle)//创建一个标题为title的框架JFrame的常用成员方法还有:voidsetTitle(Stringtitle)//设置框架的标题StringgetTitle()//返回框架的标题voidsetVisible(booleanb)//参数为true时设置框架可见voidsetSize(doublew,doubleh)//设置框架的宽和高voidsetLocation(intx,inty)//设置窗口左上角的坐标ContainergetContentPane()//返回内容面板voidpack()//根据框架中放置的组件和布局调整窗口大小voidsetJMenuBar(JMenuBarmenubar)//为框架设置菜单条voidsetDefaultCloseOperation(intoperation)//设置关闭窗口后的默认操作53框架JFrame继承JFrame定义一个新的框架类,并显示这个框架类的对象。importjavax.swing.JFrame;classEmptyFrameextendsJFrame{ publicEmptyFrame(Stringtitle){ super(title);//调用超类的构造方法 setSize(200,150); }}publicclassExample9_1{ publicstaticvoidmain(String[]args){ EmptyFramef=newEmptyFrame("空的框架"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); }}64在框架中添加组件
Java中的框架是用来放置按钮、文本框、菜单等组件的容器。JFrame包含一个叫内容面板(contentpane)的容器。向JFrame添加组件不是将组件添加到JFrame,而是添加到内容面板中。向JFrame添加组件首先必须调用getContentPane()方法获得JFrame的内容面板。内容面板是Container的对象,Container的add()方法将组件加入内容面板。74在框架中添加组件在框架窗口中添加按钮组件,并在屏幕的中央显示框架classButtonFrameextendsJFrame{ ButtonFrame(){ super("按钮和框架"); JButtonjb=newJButton("OK");//创建按钮对象jb Containercon=getContentPane();//获取内容面板 con.add(jb);//将按钮对象jb加入内容面板 }}publicclassExample9_2{ publicstaticvoidmain(String[]args){ JFramebf=newButtonFrame();//超类变量引用子类对象 bf.setSize(200,150); bf.setLocation(400,300); bf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); bf.setVisible(true); }}84在框架中添加组件从JDK5.0开始JFrame可以直接调用add()方法向内容面板添加组件classButtonFrameextendsJFrame{ ButtonFrame(){ super("按钮和框架"); JButtonjb=newJButton("OK"); add(jb);//将按钮对象jb加入内容面板 }}95面板JPanel
JPanel是中间容器,它不能在屏幕上独立显示,但可以容纳其它组件,然后作为一个整体放置在JFrame中。JPanel的常用构造方法和成员方法有:JPanel()JPanel(LayoutManagerlayout)Componentadd(Componentcomp)//向面板添加组件,继承自Container类。按钮、标签、文本框等组件都是Component派生的子类,调用add()可以将这些组件加入JPanel或其他容器。105面板JPanel把按钮加入面板,再把这个面板放在框架中。
classJPanelAppextendsJFrame{ JPanelApp(){ setTitle("使用JPanel");JPaneljp=newJPanel(); JButtonjb=newJButton("OK"); jp.add(jb);//将按钮加入面板 add(jp);//将面板加入框架窗口的内容面板 }}publicclassExample9_3{ publicstaticvoidmain(String[]args){ JPanelAppf=newJPanelApp(); f.setSize(200,150); f.setLocation(400,300); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); }}116颜色Color
Color是类库中java.awt包中的类,它定义了13种表示标准颜色的static常量:BLACKBLUECYANDARK_GRAYGRAYGREENLIGHT_GRAYMAGENTAORANGEPINKREDWHITEYELLOW
除标准颜色外,还可以使用下列构造方法自定义颜色:
Color(intred,intgreen,intblue)
Component类中定义了如下方法设置组件的背景色:voidsetBackground(Colorc)126颜色Color
显示一个空的框架窗口,框架的背景色设置成红色。publicclassExample9_4{ publicstaticvoidmain(String[]args){ JFramef=newJFrame();f.setTitle("红色背景"); f.setSize(200,150); f.setLocation(400,300); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Containercon=f.getContentPane();//获取内容面板 con.setBackground(Color.RED);//设置背景色 f.setVisible(true); }}137事件响应
图形界面程序必须不断监视敲击键盘和单击鼠标这样的事件。只有这样,一旦事件产生,应用程序才能对事件作出响应。Java使用事件源、事件和事件监听器三种对象处理事件响应。事件源通常是按钮、滚动条等组件对象,或框架等窗口对象。键盘或鼠标在事件源上操作将产生事件。Java中的事件用对象表示,事件相关的信息封装在事件对象中。不同的事件源产生不同事件类的对象。例如点击按钮产生ActionEvent的对象,点击框架窗口产生WindowEvent的对象。事件监听器是类库中定义的一组接口,每种事件类都有一个负责监听这种事件的接口,接口中定义了响应这种事件的方法。147事件响应每个事件源都有注册事件监听对象的方法。例如,JButton通过下列方法注册监听对象:
addActionListener(ActionListenera)一旦点击按钮,系统会自动产生一个ActionEvent事件,如果按钮注册了监听对象,事件对象传送到监听对象的actionPerformed()方法,并执行这个方法。157事件响应例:点击按钮后在控制台显示提示信息
classButtonFrameAextendsJFrame{ ButtonFrameA() { super("点击按钮响应"); setSize(250,200); setLocation(400,300); JButtonjb=newJButton("OK"); add(jb); ButtonListener1bla=newButtonListener1();//创建监听对象 jb.addActionListener(bla);//注册监听对象 }}167事件响应classButtonListener1implementsActionListener//定义监听类{ publicvoidactionPerformed(ActionEvente) { System.out.println("你点击了按钮!");//事件响应的代码 }}publicclassExample9_5{ publicstaticvoidmain(String[]args) { ButtonFrameAf=newButtonFrameA(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); }}177事件响应例:点击按钮改变框架窗口的标题1.定义监听类ButtonListener2实现接口ActionListener2.框架类自身监听事件实现事件响应188事件的种类
Java处理事件响应基本上沿用了AWT的事件类和监听接口。尽管javax.swing.event包中包含了专门用于Swing组件的事件类和监听接口,但普遍使用的还是AWT事件。AWT事件类都是从AWTEvent继承而来,AWTEvent的超类是EventObject。AWT将事件分为低级和语义事件。语义事件是指表达用户动作的事件,例如,单击按钮、选中单选按钮等。低级事件是形成语义事件的事件。例如,单击按钮包括按下鼠标、释放鼠标等低级事件。198事件的种类常用的语义事件有:ActionEvent//对应点击按钮、选择菜单、双击列表框或在文本框中回车ItemEvent//对应选择复选框、选择单选按钮或单击列表框常用的低级事件有:KeyEvent//对应一个键被按下或释放MouseEvent//对应鼠标被按下、移动、拖动或释放FocusEvent//某个组件失去焦点WindowEvent//窗口状态被改变例9-8显示框架窗口,鼠标进入窗口,背景色改为红色,鼠标离开窗口,背景色改为黄色。209适配器
如果监听接口中定义了很多方法,即使事件响应需要覆盖一个方法,定义监听类时也必须覆盖接口中的所有方法.为了避免重写这些无关的方法,在类库中,为每个含有一个以上方法的监听接口都定义了一个适配器类,适配器类覆盖了接口中的所有方法,但方法体都是一对空的{}.通过继承适配器类实现事件响应,就不必覆盖接口中的所有方法了.例9-9继承适配器实现窗口事件响应:显示框架窗口,在窗口中单击鼠标激活窗口时,背景色变为红色,在窗口外单击鼠标时,背景色变为蓝色。2110绘图
JPanel经常用作中间容器组织界面上组件的布局,它的另一个重要用途是绘图。在面板上绘图需要创建一个类继承JPanel,并覆盖下列方法:
protectedvoidpaintComponent(Graphics
g)Graphics是一个与设备无关的抽象类,Graphics对象g是java虚拟机为每个GUI组件自动创建的,运行paintComponent()方法时,这个g是Graphics在特定平台上的一个实例。2210绘图使用paintComponent()方法有下列注意事项:1为了确保绘图区域是干净的,用户覆盖这个方法时,应该通过super.paintComponent(g)调用超类的这个方法。2paintComponent()方法是用户无法调用的,只能由虚拟机调用。3组件第一次显示或重新显示时,paintComponent()方法被自动调用。4如果需要重新运行paintComponent()方法,用户可以调用repaint()方法,该方法使虚拟机调用paint
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 教育技术革新博士的实践与未来趋势
- 教育的科技革新与法权保护同行
- 抖音商户自然流量增长策略制度
- 全球汽车零部件制造行业智能化生产线布局与趋势分析报告
- BuChE-IN-21-生命科学试剂-MCE
- 广东机电职业技术学院《知识产权专业英语》2023-2024学年第一学期期末试卷
- 2024年湖北省枣阳市吴店镇清潭第一中学七年级数学第一学期期末调研模拟试题含解析
- 湖南电子科技职业学院《综合设计实务(3)》2023-2024学年第一学期期末试卷
- 辽宁省盘锦市双台子区第四中学2024年化学九上期末学业水平测试试题含解析
- 可克达拉职业技术学院《外事礼仪》2023-2024学年第一学期期末试卷
- 海姆立克评分标准
- 碳汇经济与政策智慧树知到期末考试答案章节答案2024年浙江农林大学
- T-SHNA 0002-2023 泪道冲洗操作规范
- 老年患者风险评估及安全管理
- 安全事故案例警示教育培训
- 散打说课课件
- 面馆开店投资 项目融资计划书
- 车体-罐车(车辆构造检修课件)
- 草鱼高效养殖模式与技术
- 肾骨片产品课件
- 幼师应聘个人简历表格
评论
0/150
提交评论