版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
程序设计第10章图形用户界面设计目录2
10.1GUI介绍
10.2
容器
10.3
布局管理
10.4组件
10.5事件处理10.1GUI介绍java.awtJava1.0推出在许多方面有不足javax.swingJava1.1推出在awt的基础上作了较大改进swing不能替代awtSWTIBM开发的GUI组件,Eclipse是用SWT开发的3AWT举例一个最简单的GUI程序基本过程引入需要用到的包(java.awt)定义并创建一个顶层容器(Frame)定义并创建组件(Button、Label)将组件添加到容器中设置窗口大小,并使其可见默认情况下,窗体对关闭事件不作任何响应4importjava.awt.*;publicclassAwtDemo{publicstaticvoidmain(String[]args){Frameframe=newFrame();//声明和创建一个窗体,FrameButtonbutton=newButton("AnAWTbutton.");//声明和创建一个按钮,Buttonframe.add(button);//将button添加到frame上
frame.setSize(200,100);//设置frame的大小
frame.setVisible(true);//设置frame可见
}}Swing举例一个最简单的GUI程序基本过程与AWT版本几乎完全相同引入的包是java.swing顶层容器是JFrame有对应的组件,名称前加J:JButton、JLabel可以设置窗体对关闭事件的响应
importjavax.swing.*;publicclassSwingDemo{publicstaticvoidmain(String[]args){JFrameframe=newJFrame();//与AWT版本几乎完全相同
JButtonbutton=newJButton("Aswingbutton.");frame.add(button);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//不同的是增加关闭时的处理
frame.setSize(200,100);frame.setVisible(true);}}frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//不同的是增加关闭时的处理10.2容器容器Container一种特殊的组件,能够容纳其它组件或容器的组件容器分为顶层容器JFrame普通容器JPanel6
importjavax.swing.*;publicclassJPanelDemo{publicstaticvoidmain(String[]args){JFrameframe=newJFrame(“Jpanel应用举例");//与AWT版本几乎完全相同JPanelpanel=newJPanel();
JButtonbutton=newJButton(“面板上的按钮");panel.setBorder(BorderFactory.createTitleBorder(“JPanel的边界”);panel.add(button);frame.add(panel);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//不同的是增加关闭时的处理
frame.setSize(200,100);frame.setVisible(true);}}组件间的继承关系7容器组件顶层容器每个JavaGUI应用程序必须至少包含一个顶层容器组件JWindows:比较简单,一般我们用它的子类JFrameJFrame:一般作为主窗口使用,具有标题、最小化、最大化及并闭按钮JDialog:对话框,它是依赖于另一个窗口的顶级窗口JApplet:专用于applet中,即applet的显示区域8普通容器普通容器不能独立存在,必须依赖于其它容器作为一种中间层容器,普通容器可以容纳其它容器或组件在Swing中,这类容器有JPanelJScrollPaneJSplitPaneJTablePaneJToolBar910.3布局管理器布局管理的方式绝对位置和绝对大小相对位置和相对大小采用相对位置和大小会使外观更加美观布局管理器每种容器都有一个默认的布局管理器也可以为窗口指定新的布局管理器。常用的布局管理器有FlowLayout,BorderLayou,GridLayout10常见的布局管理器11FlowLayout位置改变,大小不变BorderLayout位置不变,大小改变GridLayout位置不变,大小改变东南西北中三行二列FlowLayout是最简单的一种布局管理器将组件一个接一个地从左到右,从上到下地依次排列是Panel,JPanel和Applet的默认布局管理器12classFlowLayout_Example{publicstaticvoidmain(String[]args){JFrameframe=newJFrame();frame.setSize(250,100);frame.setLayout(newFlowLayout());frame.add(newJButton("按钮1"));frame.add(newJButton("按钮2"));frame.add(newJButton("按钮3"));frame.add(newJButton("按钮4"));frame.add(newJButton("按钮5"));frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);}}FlowLayout位置改变,大小不变BorderLayout以东南西北中五个位置来定位组件是Window,Dialog和Frame的默认布局管理器13classBorderLayout_Example{publicstaticvoidmain(String[]args){JFrameframe=newJFrame();frame.setSize(250,150);frame.setLayout(newBorderLayout());frame.add(BorderLayout.SOUTH,newJButton("按钮S"));frame.add(BorderLayout.NORTH,newJButton("按钮N"));frame.add(BorderLayout.EAST,newJButton("按钮E"));frame.add(BorderLayout.WEST,newJButton("按钮W"));frame.add(BorderLayout.CENTER,newJButton("按钮"));frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);}}BorderLayout位置不变,大小改变GridLayout是一种将显示区域分为行和列的布局不是任何容器的默认布局管理器14classGridLayout_Example{publicstaticvoidmain(String[]args){JFrameframe=newJFrame();frame.setSize(250,150);frame.setLayout(newGridLayout(3,2));//3行2列
frame.add(newJButton("按钮1"));frame.add(newJButton("按钮2"));frame.add(newJButton("按钮3"));frame.add(newJButton("按钮4"));frame.add(newJButton("按钮5"));frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);}}GridLayout位置不变,大小改变10.4组件各种按钮示例publicclassJButtonDemo{ publicstaticvoidmain(String[]args){ JFrameframe=newJFrame("按钮示例"); frame.setLayout(newFlowLayout()); JButtonbtn1=newJButton("按钮1"); JButtonbtn2=newJButton(newImageIcon("src/icons/button.gif"));
JButtonbtn3=newJButton("前进",newImageIcon("src/icons/button.gif")); frame.add(btn1); frame.add(btn2); frame.add(btn3); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(200,200); frame.setVisible(true); }}15文本框(单行、口令框) JFrameframe=newJFrame("文本框示例"); JPanelpanel=newJPanel(); JTextFieldjtf1=newJTextField();//创建单行文本框 JTextFieldjtf2=newJTextField(15);//创建列数为15的单行文本框 JPasswordFieldjpf=newJPasswordField();//创建密码框 JLabellabel=newJLabel();
jtf1.setText("这是一个不可编辑的单行文本框"); jtf1.setEditable(false);//设置文本框不可编辑 jpf.setText("这是密码信息,界面显示*"); jpf.setEchoChar('*'); char[]pwd=jpf.getPassword(); label.setText(String.valueOf(pwd)); panel.add(jtf1);panel.add(jtf2); panel.add(jpf); panel.add(label); frame.add(panel); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(200,200); frame.setVisible(true);16文本框(多行)publicstaticvoidmain(String[]args){ JFrameframe=newJFrame(); frame.setLayout(newFlowLayout()); JTextAreajta1=newJTextArea("第一个多行文本框"); jta1.append("&无自动换行");
JTextAreajta2=newJTextArea(5,10); jta2.setLineWrap(true); jta2.setText("第二个多行文本框可以自动换行"); jta2.insert("&",8);
frame.add(jta1); frame.add(jta2); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(200,200); frame.setVisible(true); }17复选框、单选按钮 publicstaticvoidmain(String[]args){ JFrameframe=newJFrame("单选框复选框示例"); JCheckBoxjcb1=newJCheckBox("踢足球"); JCheckBoxjcb2=newJCheckBox("打篮球"); JCheckBoxjcb3=newJCheckBox("打乒乓球"); JCheckBoxjcb4=newJCheckBox("打羽毛球"); JLabellbl=newJLabel("选择喜爱的运动:");
JLabellbl_xb=newJLabel("性别"); JRadioButtonjrb1=newJRadioButton("男",true); JRadioButtonjrb2=newJRadioButton("女"); ButtonGroupbg=newButtonGroup();//创建分组对象,将jrb1和jrb2放在一组 bg.add(jrb1);bg.add(jrb2);
JPanelpanel=newJPanel(); panel.add(lbl);panel.add(jcb1);panel.add(jcb2); panel.add(jcb3);panel.add(jcb4); panel.add(lbl_xb);panel.add(jrb1);panel.add(jrb2);
frame.add(panel); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(420,200); frame.setVisible(true); }18组合框 JFrameframe=newJFrame("列表框组合框示例"); JComboBoxcbo_year=newJComboBox(); JComboBoxcbo_month=newJComboBox(); JComboBoxcbo_day=newJComboBox(); JPanelpanel_cbo=newJPanel();
panel_cbo.setBorder(BorderFactory.createTitledBorder("请选择年-月-日:")); panel_cbo.add(cbo_year); panel_cbo.add(cbo_month); panel_cbo.add(cbo_day);
inti; for(i=2000;i<=2020;i++) cbo_year.addItem(i); for(i=1;i<=12;i++) cbo_month.addItem(i); for(i=1;i<=31;i++) cbo_day.addItem(i);19列表框 String[]fruit={"苹果","香蕉","芒果","香梨","柚子"}; JListlist=newJList(fruit); list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); JPanelpanel_list=newJPanel(newGridLayout(1,1)); panel_list.setBorder(BorderFactory.createTitledBorder("请选择喜爱的水果:")); panel_list.add(list);
frame.setLayout(newBorderLayout()); frame.add(BorderLayout.NORTH,panel_cbo); frame.add(BorderLayout.CENTER,panel_list); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(300,250); frame.setVisible(true);2010.5事件处理通过事件响应用户的操作,如键盘操作、鼠标操作事件:对用户操作的描述,如与键盘操作对应的是键盘事件事件源:发生事件的场所,通常是某个组件,如一个Button事件处理器:接收事件对象并对其进行处理的对象事件处理流程新建一个组件并添加到相应的容器新建一个JButton的实例,并添加到一个JFrame在监听器中定义处理事件的方法通过继承WindowAdapter适配器,创建一个监听器在监听器中定义windowClosing()方法,处理点击关闭窗口动作注册监听器以监听组件产生的事件通过addWindowListener()注册上述监听器响应用户用户点击关闭窗口时,监听器将给予响应21监听器的三种写法外部类监听器可以复用内部类封装性好,可以访问外部类的属性和方法匿名类当监听器的代码较少,可以提高可读性22事件处理(外部类)监听器CloseMe继承WindowAdapter监听器是一个外部类23packageorg.ngweb.java.chapt07.event;importjava.awt.*;importjava.awt.event.*;publicclassEventDemo1{publicstaticvoidmain(Stringa[]){Frameframe=newFrame();Buttonbutton=newButton("AnAWTbutton.");frame.add(button);frame.setSize(200,100);frame.addWindowListener(newCloseMe());//注册监听器
frame.setVisible(true);}}classCloseMeextendsWindowAdapter{//声明监听器
publicvoidwindowClosing(WindowEventevt){//实现/覆盖监听器中的方法
System.exit(0);//退出程序
}}事件处理(内部类)监听器CloseMe同样继承WindowAdapter但监听器是一个内部类,好处是可以直接访问外部类的属性和方法24packageorg.ngweb.java.chapt07.event;importjava.awt.*;importjava.awt.event.*;publicclassEventDemo2{publicstaticvoidmain(String[]args){Frameframe=newFrame();Buttonbutton=newButton("AnAWTbutton.");frame.add(button);frame.setSize(200,100);EventDemo2eventDemo2=newEventDemo2();frame.addWindowListener(eventDemo2.newCloseMe());//注册监听器,注意new的用法
frame.setVisible(true);}classCloseMeextendsWindowAdapter{//将监听器声明为内部类
publicvoidwindowClosing(WindowEventevt){System.exit(0);}}}事件处理(匿名类)监听器是一个匿名类,没有类名,同样需要继承WindowAdapter注意addWindowListener()参数的写法25packageorg.ngweb.java.chapt07.event;importjava.awt.*;importjava.awt.event.*;publicclassEventDemo3{publicstaticvoidmain(String[]args){Frameframe=newFrame();Buttonbutton=newButton("AnAWTbutton.");frame.add(button);frame.setSize(200,100);frame.addWindowListener(newWindowAdapter(){//匿名类作为监听器
publicvoidwindowClosing(WindowEventevt){System.exit(0);}});frame.setVisible(true);}}事件处理模型事件处理的思想用事件封装用户的操作隔离事件源和事件处理器用接口来规范事件处理器的动作26发生事件的地方将事件封装起来传给监听器进行处理事件事件封装了有关的信息,如按了哪个键,鼠标点击的坐标位置等低级事件ComponentEvent组件事件:组件的显示、隐藏、移动、大小的变化等。ContainerEvent容器事件:容器中增加、移除组件等。FocusEvent焦点事件:焦点的获得、失去等。KeyEvent键盘事件:按键的按下、释放、输入等。MouseEvent鼠标事件:有二类,一类是鼠标点击,另一类是鼠标移动拖放等。WindowEvent窗口事件:窗口的打开、关闭、激活、失活、最大化或最小化等。高级事件ActionEvent动作事件:按钮按下、TextField中按Enter键等。AdjustmentEvent调节事件:在滚动条上移动滑块引起调节数值改变等。ItemEvent项目事件:指示项被选定、取消选定等状态改变。TextEvent文本事件:文本对象改变等。27监听器监听器是接口,它规定了监听器应该实现的功能。对每一种事件,至少有一个监听器。共有11种监听器,其中MouseEvent事件有二种监听器例如,与键盘事件KeyEvent相对应的接口是:应用程序必须编写监听器接口的实现并且将监听器的实现类的实例注册到相应的组件上28publicinterfaceKeyListenerextendsEventListener{publicvoidkeyPressed(KeyEventev);//按下按键
publicvoidkeyReleased(KeyEventev);//释放按键
publicvoidkeyTyped(KeyEventev);//输入一个键值}publicvoidadd<ListenerType>(<ListenerType>listener);适配器适配器是实现了对应监听器的抽象类,实现的是空实现目的仅仅是为了方便编程,避免代码冗长键盘事件KeyEvent相对应的接口是:对应的适配器抽象类是:29publicinterfaceKeyListenerextendsEventListener{publicvoidkeyPressed(KeyEventev);//按下按键
publicvoidkeyReleased(KeyEventev);//释放按键
publicvoidkeyTyped(KeyEventev);//输入一个键值}abstractclassKeyAdapterimplementsKeyListener{publicvoidkeyPressed(KeyEventarg0){//空的实现
}publicvoidkeyReleased(KeyEventarg0){}publicvoidkeyTyped(KeyEventarg0){}}【例10.15】鼠标事件的处理。publicclassMouseEventDemo{ JFrame
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年通道侗族自治县带编教师招聘笔试模拟试题及答案解析
- 2026年沙雅县带编教师招聘笔试参考题库及答案解析
- 2026年麟游县带编教师招聘笔试参考题库及答案解析
- 2026年乐至县带编教师招聘考试模拟试题及答案解析
- 2026年云阳县带编教师招聘笔试备考试题及答案解析
- 2026年尉犁县带编教师招聘笔试模拟试题及答案解析
- 2026年高职单招综合模拟考试试题(含详细答案解析)
- 2026年五峰土家族自治县带编教师招聘笔试模拟试题及答案解析
- 2026年正宁县带编教师招聘考试模拟试题及答案解析
- 2026年长阳土家族自治县带编教师招聘笔试参考题库及答案解析
- 西门子S7-1500 PLC技术及应用 课件 第7章 S7-1500 PLC 的上位机WinCC RT
- My Lovely Lady 高清钢琴谱五线谱
- 《数学课程论》课件
- 智慧农业的智能农机与装备
- 风机齿轮箱介绍课件
- 预埋件专项施工方案
- GB/T 13560-2017烧结钕铁硼永磁材料
- 测绘安全生产专题培训课件
- 生物高考真题卷-天津卷(含答案解析)
- 人教版小学一年级道德与法治上册全册教学完整课件
- DB64-T 1822-2022公路沥青面层典型结构应用技术规范
评论
0/150
提交评论