Java语言程序设计第十二章.ppt_第1页
Java语言程序设计第十二章.ppt_第2页
Java语言程序设计第十二章.ppt_第3页
Java语言程序设计第十二章.ppt_第4页
Java语言程序设计第十二章.ppt_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1,Java面向对象程序设计,第12章 Swing程序设计基础,2,本章主要内容,一个简单的Swing实例 GUI开发工具包:Swing与AWT 事件与监听器 Swing容器 布局管理器 Swing常用组件 JLabel(标签)、JTextField(文本框)、JTextArea(编辑框)、JButton(按钮)、JCheckBox(复选框)、JRadioButton(单选按钮)、JComboBox(下拉列表框) Swing高级组件 菜单、对话框、表格、树,3,一个简单的Swing实例,import javax.swing.*; public class HelloWorldFrm extends JFrame public HelloWorldFrm() this.initialize(); private void initialize() /初始化方法,构建窗体样式 this.setSize(400, 300); this.setTitle(“第一个Swing实例“); public static void main(String args) HelloWorldFrm frm = new HelloWorldFrm(); frm.setDefaultCloseOperation( /设置关闭按钮效果 JFrame.DISPOSE_ON_CLOSE); frm.setVisible(true); ,演示第一个窗体,4,窗体居中显示,import java.awt.*; Dimension screenSize = Toolkit.getDefaultToolkit( ).getScreenSize( ); Dimension frameSize = this.getSize( ); if (frameSize.height screenSize.height) frameSize.height = screenSize.height; if (frameSize.width screenSize.width) frameSize.width = screenSize.width; this.setLocation(screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);,演示居中效果,5,GUI开发工具包:Swing与AWT,Java Swing是Java Foundation Classes(JFC)的一部分,是一个用于开发Java图形化应用程序用户界面的GUI(Graphical User Interface)开发工具包。它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。 AWT的组件很大程度上被Swing工具包替代。Swing扩展了AWT,并包含称作 Swing 组件的改进用户界面。Swing通过改进的组件而避免了AWT的种种弊端:调用本地图形子系统中的底层例程,而不是依赖操作系统的高层用户界面模块。基于此原因,Swing 组件经常被描述为轻量级的。,6,事件处理,用户交互,事 件,如:单击鼠标,如:按下/释放鼠标按钮,对象状态改变,调用事件处理,确定发生的事件的类型,确定生成的事件的组件,编写合适的代码处理事件,事件作用于对象。 对象识别事件并做出响应,不同的对象能识别的事件不全相同。 可以针对相应的事件编写相应的代码,在事件发生时,程序执行事件里的代码。,7,事件处理模型,源对象,监听器,事件,传播,事件的实例,方法,传递途径,代理事件模型,Swing 中的 GUI 组件,适配器对象,8,事件分类,EventObject,ActionEvent,AdjustmentEvent,AWTEvent,ItemEvent,TextEvent,ContainerEvent,FocusEvent,InputEvent,PaintEvent,WindowEvent,KeyEvent,MouseEvent,ComponentEvent,9,事件处理过程,创建一个合适的监听器。 创建组件对象。 利用组件的add*Listener方法将监听器注册到组件上。 这样当组件上发生相应的事件的时候,就会触发监听器,监听器就会处理相应的方法来处理事件。,10,事件处理实例实现监听器接口方式,窗口事件,public class HelloWorldFrm extends JFrame /创建实现WindowListener接口的监听器内部类 class WindowEventListener implements WindowListener public void windowOpened(WindowEvent e) System.out.println(“窗口被打开“); public void windowClosing(WindowEvent e) System.out.println(“窗口关闭“); /实现WindowListener监听器其它方法 ,private void initialize() this.setSize(300, 200); this.setTitle(“第一个Swing实例“); this.centerShow(); /注册监听器 this.addWindowListener(new WindowEventListener(); ,监听器接口和方法,监听器接口和方法,13,事件处理实例继承监听器适配器类方式,为简化编程,针对大多数事件监听器接口定义了相应的实现类-事件适配器类,在适配器类中,实现了相应监听器接口中所有的方法,但不做任何事情。 在定义监听器类时就可以继承事件适配器类,并只重写所需要的方法。,public class HelloWorldFrm extends JFrame /继承WindowAdapter适配器类,重写需要的方法 class WindowEventListener extends WindowAdapter public void windowOpened(WindowEvent e) System.out.println(“窗口被打开“); public void windowClosing(WindowEvent e) System.out.println(“窗口正在关闭“); ,private void initialize() this.setSize(300, 200); this.setTitle(“第一个Swing实例“); this.centerShow(); /注册监听器 this.addWindowListener(new WindowEventListener(); ,14,使用匿名类处理事件,this.addWindowListener(new WindowAdapter() public void windowOpened(WindowEvent e) System.out.println(“窗口被打开“); public void windowClosing(WindowEvent e) System.out.println(“窗口正在关闭“); ); 匿名内部类的基本格式是:new Super_Type(params_list) 其中 Super_Type 可以是接口,那么内部类将实现接口,也就是说,此时在匿名内部类中必须要实现Super_Type接口中所有的方法。 Super_Type也可以是类,那么内部类就是基础自该类。 因为匿名内部类没有名字,所以匿名内部类没有构造方法。,15,Swing容器,容器是一类能够在其中容纳其他组件的特殊组件。 顶层容器:JFrame窗体 中间容器:JPanel内容面板 其它容器:JMenuBar菜单栏 容器的作用是方便组织管理组件,向容器内的组件应用某种布局方式,使组件更容易定位。,演示顶层容器与中间容器,16,布局管理器,用户界面上的屏幕组件可以按照一定的格式布局。 Java语言提供了布局管理器(LayoutManager)这个工具来管理组件在容器中的布局。 每个容器都提供一个方法setLayout(LayoutManager mgr) ,用来指定要被使用的布局管理器。 布局管理器是一组类,它实现 java.awt.LayoutManager接口。 常用的布局管理器,包括BorderLayout(边界布局)、FlowLayout(流布局)、GridLayout(网格布局)和GridBagLayout(网袋布局)。,17,BorderLayout布局,BorderLayout是JFrame类的默认布局管理器,它提供了一种较为复杂的组件布局管理方案,主要用于布置容器的边界布局。 它将容器划分成五个区域:东(EAST)、南(SOUTH)、西(WEST)、北(NORTH)、中(CENTER)。,演示BorderLayout布局,18,FlowLayout布局,FlowLayout布局管理器对容器中组件进行布局的方式是将组件逐个地安放在容器中的一行上。 其组件的放置规律是从上到下、从左到右进行放置,如果容器足够宽,第一个组件先添加到容器中第一行的最左边,后续的组件依次添加到上一个组件的右边,如果当前行已放置不下该组件,则放置到下一行的最左边。,演示FlowLayout布局,19,GridLayout布局,GridLayout是一种网格式的布局管理器,它将容器空间划分成若干行乘若干列的网格,依据从左到右,从上到下在网格中排列组件,每个组件占据一格。如果添加的组件超过指定的单元格数,布局管理器会自动增加列数进而来容纳多出的组件。,演示GridLayout布局,20,GridBagLayout布局,GridBagLayout是一种非常灵活的版面布局,也是最复杂的。它是在将屏幕划分成网格的基础上,允许每个组件占据一个或多个单元(显示区域)。,21,一个GUI界面示例,JLabel,JTextField,JComboBox,JCheckBox,JTextArea,JRadioButton,JButton,22,JLabel(标签),标签JLabel对象可以显示文本、图像。该对象不对输入事件做出反应,因此它无法获得键盘焦点。 JLabel lblName = new JLabel( ); lblName.setBounds(new Rectangle(88, 59, 123, 26); /设置标签位置 lblName.setHorizontalAlignment(SwingConstants.CENTER); /设置文本居中对齐 lblName.setBackground(new Color(167, 160, 160); /设置标签背景颜色 lblName.setOpaque(true); /设置标签背景透明,不会遮挡背景颜色 lblName.setFont(new Font(“隶书“, Font.BOLD, 18); /设置文字字体、字形、大小 lblName.setText(“姓名:“); /设置显示文本内容,23,JTextField(文本框),文本框JTextField对象通常用于输入或编辑单行文本。 /注册KeyListener监听器 txtName.addKeyListener(new java.awt.event.KeyAdapter( ) /响应按键有字符输入事件 public void keyTyped(java.awt.event.KeyEvent e) if (e.getKeyChar( ) = n) txtName.setEditable(false); /设置文本框不可编辑 JOptionPane.showMessageDialog(null, “输入文本框的字符串是“ + txtName.getText( ), “输出结果“, JOptionPane.INFORMATION_MESSAGE); );,24,JTextArea(编辑框),文本框JTextArea对象通常用于输入或编辑多行文本。 private String adds = “地址1“, “邮编1“, “地址2“, “邮编2“; for (int i = 0; i adds.length; i+) txaAddress.append(addsi0 + “ “ + addsi1 + “n“); ,25,JButton(按钮),按钮JButton经常用于响应用户的操作事件,例如单击。 btnConfirm.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent e) if (txtName.getText().equals(“) JOptionPane.showMessageDialog(null, “姓名不能为空“, “信息提示“, JOptionPane.INFORMATION_MESSAGE); ); btnReset.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent e) txtName.setText(“); txaAddress.setText(“); );,26,JCheckBox(复选框),复选框JCheckBox常用于一项或多项选择。 StringBuffer str = new StringBuffer( ); if (chkReading.isSelected( ) /判断复选框是否被选中 str.append(chkReading.getText( ) + “;“); /取得复选框上的文字 if (chkSinging.isSelected( ) str.append(chkSinging.getText( ) + “;“); if (chkDancing.isSelected( ) str.append(chkDancing.getText( ) + “;“); JOptionPane.showMessageDialog(null, “爱好:“ + str.toString( ), “选择结果“, JOptionPane.INFORMATION_MESSAGE);,27,JRadioButton(单选按钮),单选按钮JRadioButton应用于围绕一个主题有多个选项,但必须选且只选一个。 /添加一个ButtonGroup,达到选其一的效果 ButtonGroup btngrpSex = new ButtonGroup( ); btngrpSex.add(getRadMale( ); btngrpSex.add(getRadFemale( );,28,JComboBox(下拉列表框),下拉框JComboBox中一般会有若干选项,用户可以选择其中一项。 cboQualification.addItem(“高中“); cboQualification.addItem(“专科“); cboQualification.addItem(“本科“); cboQualification.addItem(“硕士“); cboQualification.addItem(“博士“);,29,菜单,一个桌面应用程序一般会有一个主窗口界面上方有菜单栏,其中包含若干菜单项、子菜单等。菜单实质是将多个按钮、单项按钮、复选框操作分门别类地整合在一起。,30,JMenuBar (菜单栏),菜单栏是摆放各个菜单项、子菜单的容器。,31,JMenu(子菜单)和JMenuItem(菜单项),菜单栏中的每一项条目称为菜单项。如果菜单项也有属于自己的下一级菜单,则该菜单项称为子菜单(JMenu);如果菜单项已经处于页节点位置(即没有下一级菜单),则该菜单项属于JMenuItem类。,JMenu,JMenuItem,Separator,32,JRadioButtonMenuItem(单选按钮),有时,在某一子菜单的菜单项中,同一时刻只能选择一项,效果类似于单选按钮,需要用到JRadioButtonMenuItem类。,33,JCheckBoxMenuItem(复选框按钮),子菜单可以选择多项时,效果类似于复选框,需要用到JCheckBoxMenuItem类。,34,JPopupMenu(弹出式菜单),右键弹出式菜单(JPopupMenu)用于显示展开形式的菜单,可显示在屏幕的任何地方,通常是由单击鼠标右键触发的。,35,JOptionPane(对话框),JOptionPane有助于方便地弹出要求用户提供值或向其发出通知的标准对话框。 JOptionPane类常用静态方法:,36,showConfirmDialog,方法格式: showConfirmDialog( Component parentComponent, Object message, String title, int optionType, int messageType, Icon icon) 实例代码: JOptionPane.showConfirmDialog( null, “是否确认删除该记录“, “提示“, JOptionPane.INFORMATION_MESSAGE);,37,showInputDialog,方法格式: showInputDialog( Component parentComponent, Object message, String title, int messa

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论