第8章Swing图形用户界面程序设计课件_第1页
第8章Swing图形用户界面程序设计课件_第2页
第8章Swing图形用户界面程序设计课件_第3页
第8章Swing图形用户界面程序设计课件_第4页
第8章Swing图形用户界面程序设计课件_第5页
已阅读5页,还剩101页未读 继续免费阅读

下载本文档

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

文档简介

第8章Swing图形用户界面程序设计11/12/20221第8章Swing图形用户界面程序设计11/11/202本章总体纲要基本GUI组件布局管理器事件处理模型菜单11/12/20222本章总体纲要基本GUI组件11/11/20222简介图形用户界面(GUI)数据的图形显示形式友好的交互方式简化计算机软件的学习过程GUI示例C:\ProgramFiles\Java\jdk1.6.0\demo\jfc\SwingSet2GUI组件:Labels,Textfields,Buttons,等等11/12/20223简介图形用户界面(GUI)11/11/20223Swing整体介绍SwingGUI组件所在的包:javax.swingSwing组件的平台相关性较小(lightweight)早期版本的GUI组件所在的包:java.awt与平台相关性较强11/12/20224Swing整体介绍SwingGUI组件11/11/202JComponent组件类的层次结构java.lang.Object|+--java.awt.Component|+--java.awt.Container|+--javax.swing.JComponentJComponent——大多数Swing组件类父类11/12/20225JComponent组件类的层次结构11/11/20225Swing组件容器各种组件必须放在容器容器本身也是一种组件分类顶层容器其它容器组件基本控制组件不可编辑的信息显示组件可编辑的信息显示组件11/12/20226Swing组件容器11/11/20226SwingSwing组件从功能上分可分为:顶层容器:JFrame,JApplet,JDialog,JWindow共4个中间容器:JPanel,JScrollPane,JSplitPane,JToolBar特殊容器:在GUI上起特殊作用的中间层,如JInternalFrame,JLayeredPane,JRootPane.基本控件:实现人际交互的组件,如JButton,JComboBox,JList,JMenu,JSlider,JTextField。不可编辑信息的显示:向用户显示不可编辑信息的组件,例如JLabel,JProgressBar,ToolTip。可编辑信息的显示:向用户显示能被编辑的格式化信息的组件,如JColorChooser,JFileChoose,JFileChooser,JTable,JTextArea。表5-1列出了常见的Swing组件,其方法和属性请查阅API文档。11/12/20227SwingSwing组件从功能上分可分为:11/11/202类描述AbstractButton按钮的抽象类ButtonGroup封装一组互斥的按钮ImageIcon封装图标JButtonSwing的按钮类JCheckBoxSwing的复选框类JComboBox封装组合框(下拉式菜单和文本框的组合).JLabelSwing版的标签JRadioButtonSwing版的单选按钮JScrollPane封装滚动窗口JTabbedPane封装选项窗口JTable封装表格控件JTextFieldSwing版的文本域常见的Swing组件

11/12/20228类描述AbstractButton按钮的抽象类Button一些GUI组件标签(JLabel)文本框(JTextField)按钮(JButton)复选框(JCheckBox)组合框(JComboBox)文本(JTextArea)框架(JFrame)面板(JPanel)11/12/20229一些GUI组件标签(JLabel)11/11/20229标签(JLabel)标签为GUI提供文本(主要)或图像(也可以)信息对应类(JLabel)(JComponent的子类)可以显示:单行的只读的文本信息图像同时显示文本与图像信息程序一般不修改标签的内容11/12/202210标签(JLabel)标签11/11/202210文本框(JTextField)文本框(JTextField)显示单行的文本信息JTextFieldextendsJTextComponent构造函数:PublicJTextField();PublicJTextField(Stringtext);PublicJTextField(intcolumns);PublicJTextField(Stringtext,intcolumns);StringgetText();//获得当前包含在文本框中的字符串voidsetText(Stringstr);//为设置文本11/12/202211文本框(JTextField)文本框(JTextField)按钮(JButton)当鼠标左键单击按钮组件时,能触发特定的事件在Java中,广义的按钮包括:命令式按钮(JButton)复选框(JCheckBox)单选按钮(JRadioButton)11/12/202212按钮(JButton)当鼠标左键单击按钮组件时,能触发特定的按钮类的层次结构javax.swing.JComponentjavax.swing.AbstractButtonjavax.swing.JButtonjavax.swing.JToggleButtonjavax.swing.JCheckBoxjavax.swing.JRadioButton11/12/202213按钮类的层次结构javax.swing.JComponent组合框(JComboBox)组合框(JComboBox)可以从下拉式的列表框中选取其中的列表项有时也称为下拉框(drop-downlist)类JComboBox中的方法getSelectedIndex()返回当前被选中的项setMaximumRowCount(n)设置最多显示列表项的项数滚动条(Scrollbar)会自动加上11/12/202214组合框(JComboBox)组合框(JComboBox)11框架(JFrame)类JFrame是java.awt.Frame的子类在Swing的组件中,JFrame并不全是由Java编写的是一种与平台关系比较密切的组件(Heavyweightcomponent)java.lang.Object|+--java.awt.Component|+--java.awt.Container|+--java.awt.Window|+--java.awt.Frame|+--javax.swing.JFrame11/12/202215框架(JFrame)类JFrame是java.awt.F面板(JPanel)一种中间容器,用来组成其它组件可以添加各种组件(包括面板组件)面板(JPanel)的大小由它所包含的组件决定当组件个数增加,面板(JPanel)也会随之而增大11/12/202216面板(JPanel)一种中间容器,用来组成其它组件11/11SwingSwing组件不能直接添加到顶层容器中,它必须添加到一个与Swing顶层容器相关联的内容面板(ContentPane)上。内容面板是顶层容器包含的一个普通容器,它是一个轻量级组件。基本规则如下:把Swing组件放入一个顶层Swing容器的内容面板上11/12/202217SwingSwing组件不能直接添加到顶层容器中,它必须添加Swing对JFrame添加组件有两种方式:1.用getContentPane()方法获得JFrame的内容面板,再对其加入组件:frame.getContentPane().add(childComponent)2.建立一个Jpanel或JDesktopPane之类的中间容器,把组件添加到容器中,用setContentPane()方法把该容器置为JFrame的内容面板:JpanelcontentPane=newJpanel();……//把其它组件添加到Jpanel中;frame.setContentPane(contentPane);//把contentPane对象设置成为frame的内容面板11/12/202218Swing对JFrame添加组件有两种方式:11/11/20示例JFrameapp=newJFrame("文本编辑框例程");app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);app.setSize(320,120);Containerc=app.getContentPane();c.setLayout(newFlowLayout());

JTextField[]t={

newJTextField(“正常文本:”,8),newJTextField(“显示”,15),newJTextField("密码文本:",8),newJPasswordField("隐藏",15)};t[0].setEditable(false);t[2].setEditable(false);for(inti=0;i<4;i++)

c.add(t[i]);app.setVisible(true);J_Text获得JFrame的内容面板添加组件到JFrame的内容面板11/12/202219示例JFrameapp=newJFrame("文本示例

Containerc=getContentPane();c.setLayout(newFlowLayout());//创建命令式按钮并添加到框架中

ImageIcon[]ic={newImageIcon("left.gif"),newImageIcon("right.gif")};

JButton[]b={newJButton("左",ic[0]),newJButton("中间"),newJButton("右",ic[1])};for(i=0;i<b.length;i++)c.add(b[i]);//创建复选框并添加到框架中

JCheckBox[]ck={newJCheckBox("左"),newJCheckBox("右")};for(i=0;i<ck.length;i++){c.add(ck[i]);ck[i].setSelected(true);}//for循环结束

J_Button将三个Button按钮添加到内容面板选中复选框//创建单选按钮并添加到框架中JRadioButton[]r={newJRadioButton("左"),newJRadioButton("右")};ButtonGrouprg=newButtonGroup();for(i=0;i<r.length;i++){c.add(r[i]);rg.add(r[i]);}//for循环结束r[0].setSelected(true);r[1].setSelected(false);联动的按钮组11/12/202220示例Containerc=getContentPan本章总体纲要基本GUI组件布局管理器事件处理模型菜单11/12/202221本章总体纲要基本GUI组件11/11/202221布局管理器用来控制组件在容器中的布局方式应当尽量利用已有的基本布局方式布局管理器处理组件布局的大部分细节11/12/202222布局管理器用来控制组件在容器中的布局方式11/11/2022布局管理器FlowLayoutBorderLayoutCardLayoutGridLayout自定义的布局管理器11/12/202223布局管理器FlowLayout11/11/202223FlowLayout是一种最基本的布局管理器是java.awt.Applet、java.awt.Panel和javax.swing.JPanel的默认布局方式在容器中,从左到右依次放置GUI组件当组件排到容器一行的末尾时,则从下一行开始接着排列组件每行组件的对齐方式可以是:左对齐、中间(默认对齐方式)和右对齐11/12/202224FlowLayout是一种最基本的布局管理器11/11/20类FlowLayout对齐方法setAlignment(position_CONSTANT)FlowLayout.LEFTFlowLayout.CENTERFlowLayout.RIGHT11/12/202225类FlowLayout对齐方法setAlignment(BorderLayout是容器JFrame和JApplet的默认布局方式将容器分成五个区域,NORTH (顶部)SOUTH (底部)WEST (左侧)EAST (右侧)CENTER (中间)每个区域最多只能1个组件11/12/202226BorderLayout是容器JFrame和JApplet的类BorderLayout方法构造方法:BorderLayout(hGap,vGap);hGap–区域间的水平间隙vGap-区域间的竖直间隙上面两个数据的默认值是0添加组件myContainer.add(component,position)component–需要加入到容器中的组件positions–(BorderLayout.NORTH)NORTH,SOUTH,EAST,WEST,CENTER11/12/202227类BorderLayout方法构造方法:BorderLay示例JFrameapp=newJFrame("边界布局管理器例程");app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);app.setSize(360,130);Containerc=app.getContentPane();

c.setLayout(newBorderLayout());//本语句可以删去

c.add(newJButton("东"),BorderLayout.EAST);c.add(newJButton("西"),BorderLayout.WEST);c.add(newJButton("南"),BorderLayout.SOUTH);c.add(newJButton("北"),BorderLayout.NORTH);c.add(newJButton("中"),BorderLayout.CENTER);app.setVisible(true);J_BorderLayout

11/12/202228示例JFrameapp=newJFrame("边界GridLayout布局管理器GridLayout按行与列将容器等分成网格每个组件占用具有相同宽度和高度的网格添加组件占用网格的顺序:从上到下,从左到右当一行满了,则继续到下一行,仍然是从左到右11/12/202229GridLayout布局管理器GridLayout按行与列将CardLayoutCardLayout的布局方式有点象码“扑克牌”一个组件压在另一个组件的上面,所以每次一般只能看到一个组件11/12/202230CardLayoutCardLayout的布局方式有点象码“布局管理器嵌套实际上是容器的嵌套,被嵌套的容器可以具有不同的布局管理器在嵌套的布局管理器中JPanel通常起到了“桥”的作用11/12/202231布局管理器嵌套实际上是容器的嵌套,被嵌套的容器可以具有不同的本章总体纲要基本GUI组件布局管理器事件处理模型菜单11/12/202232本章总体纲要基本GUI组件11/11/202232事件处理模型GUI是由事件(event)驱动的当用户与GUI交互可以产生事件(events)一些常见的交互方式移动鼠标用鼠标点击按钮在文本框中输入数据关闭窗口等响应用户的动作称为处理事件.在类Event中,定义了所有的事件处理方法.11/12/202233事件处理模型GUI是由事件(event)驱动的11/11/2事件处理机制主要涉及三种对象事件源(Aneventsource)事件对象(Aneventobject)事件监听器(eventlistener(s))事件监听器A事件监听器B事件对象事件对象事件源(例如:按钮)11/12/202234事件处理机制主要涉及三种对象事件监听器A事件监听器B事件对象事件处理机制事件源可供用户进行交互的GUI组件事件对象封装了包含所发生的各种事件的有效信息信息包括:事件源的引用、以及事件监听器在处理事件时所需要的其它各种信息事件信息被包含在类AWTEvent或其子类的实例对象中事件监听器接受事件对象,并处理事件对象11/12/202235事件处理机制事件源11/11/202235处理鼠标事件鼠标事件能够被GUI组件捕获到基本事件监听器的接口MouseListenerMouseMotionListener11/12/202236处理鼠标事件鼠标事件能够被GUI组件捕获到11/11/202事件适配器事件适配器类(Adapter)只实现接口所需要处理的方法通过覆盖对于接口中的其它方法:系统会提供默认的方法(方法体为空)事件适配器类与事件监听器接口的区别?利用事件适配器类,只需实现所需处理的方法利用事件监听器接口,必须实现所有的方法事件适配器类与事件监听器接口的执行效率?利用事件适配器类处理事件,并不能提高执行效率11/12/202237事件适配器事件适配器类(Adapter)11/11/2022事件适配器简化代码不用适配器时,必须对某个适配器的多个方法进行重写,加入适配器后,”空实现”这些方法.classMouseAdapterimplementsMousListener{publicvoidmouseClicked(MouseEvente){}publicvoidmousePressed(MouseEvente){}publicvoidmouseReleased(MouseEvente){}publicvoidmouseEntered(MouseEvente){}publicvoidmouseExited(MouseEvente){}}11/12/202238事件适配器简化代码11/11/202238事件适配器继承某个适配器的子类,则程序中只需覆盖需要的方法,其余方法则从父类继承classMouseTrackextendsMouseAdapter{publicvoidmouseClicked(MouseEvente){//…handlemouseclickevent;}}11/12/202239事件适配器继承某个适配器的子类,则程序中只需覆盖需要的方法,事件适配器类与事件监听器接口ComponentAdapterContainerAdapterFocusAdapterMouseAdapterWindowAdapterKeyAdapterMouseMotionAdapterContainerListenerFocusListenerMouseListenerWindowListenerKeyListenerMouseMotionListenerComponentListener事件适配器类事件监听器接口11/12/202240事件适配器类与事件监听器接口ComponentAdapter通知接口方法(XXXe)发生XXX事件事件源.addXXXListener(存放监视器引用的接口)实现XXXListener接口的监视器接口回调图:事件处理的过程11/12/202241通知接口方法(XXXe)发生XXX事件事件源.addXX示例Containerc=getContentPane();JButtonb=newJButton("单击0次");b.addActionListener(newActionListener(){intm_count=0;

publicvoidactionPerformed(ActionEvente){JButtonb=(JButton)e.getSource();b.setText("单击"+(++m_count)+"次");}//方法actionPerformed结束}J_Btton2

多余的语句:J_ActionListenera=newJ_ActionListener();

b.addActionListener(a);注册事件监听器创建匿名内部类的实例对象返回当前事件的事件源11/12/202242示例Containerc=getContentPimportjava.awt.*;importjava.awt.event.*;importjavax.swing.*;classMyWindow2

extends

JFrame

implementsActionListener{ JTextFieldtitleText;JPasswordFieldpasswordText;

TextFieldTest1例:在文本框中的输入作为窗口的标题;将密码框中的输入作为文本框中的内容

11/12/202243importjava.awt.*;TextFieldTe

MyWindow2(Strings)//构造函数{super(s);titleText=newJTextField(10);passwordText=newJPasswordField(10);titleText.addActionListener(this);passwordText.addActionListener(this);setLayout(newFlowLayout());add(titleText);add(passwordText);…}publicvoidactionPerformed(ActionEvente){if(e.getSource()==titleText) this.setTitle(titleText.getText());elseif(e.getSource()==passwordText){ charc[]=passwordText.getPassword(); titleText.setText(newString(c));

}}}向文本框添加监听器,把当前对象作为监听器11/12/202244MyWindow2(Strings)//构造函数publicclassTextFieldTest1{publicstaticvoidmain(Stringargs[]){newMyWindow2("窗口");}}11/12/202245publicclassTextFieldTest111/本章总体纲要基本GUI组件布局管理器事件处理模型菜单11/12/202246本章总体纲要基本GUI组件11/11/202246菜单菜单可以使GUI变得更为简洁菜单只能加入到具有成员方法(setJMenuBar)的类的实例对象中例如:JFrame和JApplet11/12/202247菜单菜单可以使GUI变得更为简洁11/11/202247菜单术语菜单术语菜单栏(menubar)菜单(menu)菜单项(menuitem)与菜单相关的部分类:JMenuBarJMenuJMenuItemJCheckBoxMenuItem(extends

JMenuItem)JRadioButtonMenuItem(extends

JMenuItem)11/12/202248菜单术语菜单术语11/11/202248编写具有菜单(Menu)的程序创建菜单栏:(menubar)给容器设置菜单栏,容器举例:JFrame、JAppletsetJMenuBar(myBar);

创建菜单设置记忆符(Mnemonic)创建菜单项设置记忆符(Mnemonic)类似于按钮,设置事件监听器,进行事件处理11/12/202249编写具有菜单(Menu)的程序创建菜单栏:(menuba编写具有菜单(Menu)的程序将菜单项加入到适当的菜单中myMenu.add(myItem);在菜单项间增加隔(separator)这不是必须的

myMenu.addSeparator();如果需要子菜单,则将子菜单加入到菜单中myMenu.add(mySubMenu);将菜单加入到菜单栏中myMenuBar.add(myMenu);11/12/202250编写具有菜单(Menu)的程序将菜单项加入到适当的菜单中11记忆符(Mnemonic)一种触发菜单、子菜单或菜单项便捷方式方法setMnemonic JMenufileMenu=newJMenu("File")fileMenu.setMnemonic('F');在键盘上,按下Alt+F来触发菜单、子菜单或菜单项11/12/202251记忆符(Mnemonic)一种触发菜单、子菜单或菜单项便捷方弹出式菜单(JPopupMenus)弹出式菜单(JPopupMenus)通过按鼠标键而弹出的浮动式菜单11/12/202252弹出式菜单(JPopupMenus)弹出式菜单(JPopu作业习题8.611/12/202253作业习题8.611/11/202253第8章Swing图形用户界面程序设计11/12/202254第8章Swing图形用户界面程序设计11/11/202本章总体纲要基本GUI组件布局管理器事件处理模型菜单11/12/202255本章总体纲要基本GUI组件11/11/20222简介图形用户界面(GUI)数据的图形显示形式友好的交互方式简化计算机软件的学习过程GUI示例C:\ProgramFiles\Java\jdk1.6.0\demo\jfc\SwingSet2GUI组件:Labels,Textfields,Buttons,等等11/12/202256简介图形用户界面(GUI)11/11/20223Swing整体介绍SwingGUI组件所在的包:javax.swingSwing组件的平台相关性较小(lightweight)早期版本的GUI组件所在的包:java.awt与平台相关性较强11/12/202257Swing整体介绍SwingGUI组件11/11/202JComponent组件类的层次结构java.lang.Object|+--java.awt.Component|+--java.awt.Container|+--javax.swing.JComponentJComponent——大多数Swing组件类父类11/12/202258JComponent组件类的层次结构11/11/20225Swing组件容器各种组件必须放在容器容器本身也是一种组件分类顶层容器其它容器组件基本控制组件不可编辑的信息显示组件可编辑的信息显示组件11/12/202259Swing组件容器11/11/20226SwingSwing组件从功能上分可分为:顶层容器:JFrame,JApplet,JDialog,JWindow共4个中间容器:JPanel,JScrollPane,JSplitPane,JToolBar特殊容器:在GUI上起特殊作用的中间层,如JInternalFrame,JLayeredPane,JRootPane.基本控件:实现人际交互的组件,如JButton,JComboBox,JList,JMenu,JSlider,JTextField。不可编辑信息的显示:向用户显示不可编辑信息的组件,例如JLabel,JProgressBar,ToolTip。可编辑信息的显示:向用户显示能被编辑的格式化信息的组件,如JColorChooser,JFileChoose,JFileChooser,JTable,JTextArea。表5-1列出了常见的Swing组件,其方法和属性请查阅API文档。11/12/202260SwingSwing组件从功能上分可分为:11/11/202类描述AbstractButton按钮的抽象类ButtonGroup封装一组互斥的按钮ImageIcon封装图标JButtonSwing的按钮类JCheckBoxSwing的复选框类JComboBox封装组合框(下拉式菜单和文本框的组合).JLabelSwing版的标签JRadioButtonSwing版的单选按钮JScrollPane封装滚动窗口JTabbedPane封装选项窗口JTable封装表格控件JTextFieldSwing版的文本域常见的Swing组件

11/12/202261类描述AbstractButton按钮的抽象类Button一些GUI组件标签(JLabel)文本框(JTextField)按钮(JButton)复选框(JCheckBox)组合框(JComboBox)文本(JTextArea)框架(JFrame)面板(JPanel)11/12/202262一些GUI组件标签(JLabel)11/11/20229标签(JLabel)标签为GUI提供文本(主要)或图像(也可以)信息对应类(JLabel)(JComponent的子类)可以显示:单行的只读的文本信息图像同时显示文本与图像信息程序一般不修改标签的内容11/12/202263标签(JLabel)标签11/11/202210文本框(JTextField)文本框(JTextField)显示单行的文本信息JTextFieldextendsJTextComponent构造函数:PublicJTextField();PublicJTextField(Stringtext);PublicJTextField(intcolumns);PublicJTextField(Stringtext,intcolumns);StringgetText();//获得当前包含在文本框中的字符串voidsetText(Stringstr);//为设置文本11/12/202264文本框(JTextField)文本框(JTextField)按钮(JButton)当鼠标左键单击按钮组件时,能触发特定的事件在Java中,广义的按钮包括:命令式按钮(JButton)复选框(JCheckBox)单选按钮(JRadioButton)11/12/202265按钮(JButton)当鼠标左键单击按钮组件时,能触发特定的按钮类的层次结构javax.swing.JComponentjavax.swing.AbstractButtonjavax.swing.JButtonjavax.swing.JToggleButtonjavax.swing.JCheckBoxjavax.swing.JRadioButton11/12/202266按钮类的层次结构javax.swing.JComponent组合框(JComboBox)组合框(JComboBox)可以从下拉式的列表框中选取其中的列表项有时也称为下拉框(drop-downlist)类JComboBox中的方法getSelectedIndex()返回当前被选中的项setMaximumRowCount(n)设置最多显示列表项的项数滚动条(Scrollbar)会自动加上11/12/202267组合框(JComboBox)组合框(JComboBox)11框架(JFrame)类JFrame是java.awt.Frame的子类在Swing的组件中,JFrame并不全是由Java编写的是一种与平台关系比较密切的组件(Heavyweightcomponent)java.lang.Object|+--java.awt.Component|+--java.awt.Container|+--java.awt.Window|+--java.awt.Frame|+--javax.swing.JFrame11/12/202268框架(JFrame)类JFrame是java.awt.F面板(JPanel)一种中间容器,用来组成其它组件可以添加各种组件(包括面板组件)面板(JPanel)的大小由它所包含的组件决定当组件个数增加,面板(JPanel)也会随之而增大11/12/202269面板(JPanel)一种中间容器,用来组成其它组件11/11SwingSwing组件不能直接添加到顶层容器中,它必须添加到一个与Swing顶层容器相关联的内容面板(ContentPane)上。内容面板是顶层容器包含的一个普通容器,它是一个轻量级组件。基本规则如下:把Swing组件放入一个顶层Swing容器的内容面板上11/12/202270SwingSwing组件不能直接添加到顶层容器中,它必须添加Swing对JFrame添加组件有两种方式:1.用getContentPane()方法获得JFrame的内容面板,再对其加入组件:frame.getContentPane().add(childComponent)2.建立一个Jpanel或JDesktopPane之类的中间容器,把组件添加到容器中,用setContentPane()方法把该容器置为JFrame的内容面板:JpanelcontentPane=newJpanel();……//把其它组件添加到Jpanel中;frame.setContentPane(contentPane);//把contentPane对象设置成为frame的内容面板11/12/202271Swing对JFrame添加组件有两种方式:11/11/20示例JFrameapp=newJFrame("文本编辑框例程");app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);app.setSize(320,120);Containerc=app.getContentPane();c.setLayout(newFlowLayout());

JTextField[]t={

newJTextField(“正常文本:”,8),newJTextField(“显示”,15),newJTextField("密码文本:",8),newJPasswordField("隐藏",15)};t[0].setEditable(false);t[2].setEditable(false);for(inti=0;i<4;i++)

c.add(t[i]);app.setVisible(true);J_Text获得JFrame的内容面板添加组件到JFrame的内容面板11/12/202272示例JFrameapp=newJFrame("文本示例

Containerc=getContentPane();c.setLayout(newFlowLayout());//创建命令式按钮并添加到框架中

ImageIcon[]ic={newImageIcon("left.gif"),newImageIcon("right.gif")};

JButton[]b={newJButton("左",ic[0]),newJButton("中间"),newJButton("右",ic[1])};for(i=0;i<b.length;i++)c.add(b[i]);//创建复选框并添加到框架中

JCheckBox[]ck={newJCheckBox("左"),newJCheckBox("右")};for(i=0;i<ck.length;i++){c.add(ck[i]);ck[i].setSelected(true);}//for循环结束

J_Button将三个Button按钮添加到内容面板选中复选框//创建单选按钮并添加到框架中JRadioButton[]r={newJRadioButton("左"),newJRadioButton("右")};ButtonGrouprg=newButtonGroup();for(i=0;i<r.length;i++){c.add(r[i]);rg.add(r[i]);}//for循环结束r[0].setSelected(true);r[1].setSelected(false);联动的按钮组11/12/202273示例Containerc=getContentPan本章总体纲要基本GUI组件布局管理器事件处理模型菜单11/12/202274本章总体纲要基本GUI组件11/11/202221布局管理器用来控制组件在容器中的布局方式应当尽量利用已有的基本布局方式布局管理器处理组件布局的大部分细节11/12/202275布局管理器用来控制组件在容器中的布局方式11/11/2022布局管理器FlowLayoutBorderLayoutCardLayoutGridLayout自定义的布局管理器11/12/202276布局管理器FlowLayout11/11/202223FlowLayout是一种最基本的布局管理器是java.awt.Applet、java.awt.Panel和javax.swing.JPanel的默认布局方式在容器中,从左到右依次放置GUI组件当组件排到容器一行的末尾时,则从下一行开始接着排列组件每行组件的对齐方式可以是:左对齐、中间(默认对齐方式)和右对齐11/12/202277FlowLayout是一种最基本的布局管理器11/11/20类FlowLayout对齐方法setAlignment(position_CONSTANT)FlowLayout.LEFTFlowLayout.CENTERFlowLayout.RIGHT11/12/202278类FlowLayout对齐方法setAlignment(BorderLayout是容器JFrame和JApplet的默认布局方式将容器分成五个区域,NORTH (顶部)SOUTH (底部)WEST (左侧)EAST (右侧)CENTER (中间)每个区域最多只能1个组件11/12/202279BorderLayout是容器JFrame和JApplet的类BorderLayout方法构造方法:BorderLayout(hGap,vGap);hGap–区域间的水平间隙vGap-区域间的竖直间隙上面两个数据的默认值是0添加组件myContainer.add(component,position)component–需要加入到容器中的组件positions–(BorderLayout.NORTH)NORTH,SOUTH,EAST,WEST,CENTER11/12/202280类BorderLayout方法构造方法:BorderLay示例JFrameapp=newJFrame("边界布局管理器例程");app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);app.setSize(360,130);Containerc=app.getContentPane();

c.setLayout(newBorderLayout());//本语句可以删去

c.add(newJButton("东"),BorderLayout.EAST);c.add(newJButton("西"),BorderLayout.WEST);c.add(newJButton("南"),BorderLayout.SOUTH);c.add(newJButton("北"),BorderLayout.NORTH);c.add(newJButton("中"),BorderLayout.CENTER);app.setVisible(true);J_BorderLayout

11/12/202281示例JFrameapp=newJFrame("边界GridLayout布局管理器GridLayout按行与列将容器等分成网格每个组件占用具有相同宽度和高度的网格添加组件占用网格的顺序:从上到下,从左到右当一行满了,则继续到下一行,仍然是从左到右11/12/202282GridLayout布局管理器GridLayout按行与列将CardLayoutCardLayout的布局方式有点象码“扑克牌”一个组件压在另一个组件的上面,所以每次一般只能看到一个组件11/12/202283CardLayoutCardLayout的布局方式有点象码“布局管理器嵌套实际上是容器的嵌套,被嵌套的容器可以具有不同的布局管理器在嵌套的布局管理器中JPanel通常起到了“桥”的作用11/12/202284布局管理器嵌套实际上是容器的嵌套,被嵌套的容器可以具有不同的本章总体纲要基本GUI组件布局管理器事件处理模型菜单11/12/202285本章总体纲要基本GUI组件11/11/202232事件处理模型GUI是由事件(event)驱动的当用户与GUI交互可以产生事件(events)一些常见的交互方式移动鼠标用鼠标点击按钮在文本框中输入数据关闭窗口等响应用户的动作称为处理事件.在类Event中,定义了所有的事件处理方法.11/12/202286事件处理模型GUI是由事件(event)驱动的11/11/2事件处理机制主要涉及三种对象事件源(Aneventsource)事件对象(Aneventobject)事件监听器(eventlistener(s))事件监听器A事件监听器B事件对象事件对象事件源(例如:按钮)11/12/202287事件处理机制主要涉及三种对象事件监听器A事件监听器B事件对象事件处理机制事件源可供用户进行交互的GUI组件事件对象封装了包含所发生的各种事件的有效信息信息包括:事件源的引用、以及事件监听器在处理事件时所需要的其它各种信息事件信息被包含在类AWTEvent或其子类的实例对象中事件监听器接受事件对象,并处理事件对象11/12/202288事件处理机制事件源11/11/202235处理鼠标事件鼠标事件能够被GUI组件捕获到基本事件监听器的接口MouseListenerMouseMotionListener11/12/202289处理鼠标事件鼠标事件能够被GUI组件捕获到11/11/202事件适配器事件适配器类(Adapter)只实现接口所需要处理的方法通过覆盖对于接口中的其它方法:系统会提供默认的方法(方法体为空)事件适配器类与事件监听器接口的区别?利用事件适配器类,只需实现所需处理的方法利用事件监听器接口,必须实现所有的方法事件适配器类与事件监听器接口的执行效率?利用事件适配器类处理事件,并不能提高执行效率11/12/202290事件适配器事件适配器类(Adapter)11/11/2022事件适配器简化代码不用适配器时,必须对某个适配器的多个方法进行重写,加入适配器后,”空实现”这些方法.classMouseAdapterimplementsMousListener{publicvoidmouseClicked(MouseEvente){}publicvoidmousePressed(MouseEvente){}publicvoidmouseReleased(MouseEvente){}publicvoidmouseEntered(MouseEvente){}publicvoidmouseExited(MouseEvente){}}11/12/202291事件适配器简化代码11/11/202238事件适配器继承某个适配器的子类,则程序中只需覆盖需要的方法,其余方法则从父类继承classMouseTrackextendsMouseAdapter{publicvoidmouseClicked(MouseEvente){//…handlemouseclickevent;}}11/12/202292事件适配器继承某个适配器的子类,则程序中只需覆盖需要的方法,事件适配器类与事件监听器接口ComponentAdapterContainerAdapterFocusAdapterMouseAdapterWindowAdapterKeyAdapterMouseMotionAdapterContainerListenerFocusListenerMouseListenerWindowListenerKeyListenerMouseMotionListenerComponentListener事件适配器类事件监听器接口11/12/202293事件适配器类与事件监听器接口ComponentAdapter通知接口方法(XXXe)发生XXX事件事件源.addXXXListener(存放监视器引用的接口)实现XXXListener接口的监视器接口回调图:事件处理的过程11/12/202294通知接口方法(XXXe)发生XXX事件事件源.addXX示例Containerc=getContentPane();JButtonb=newJButton("单击0次");b.addActionListener(newActionListener(){intm_count=0;

publicvoidactionPerformed(ActionEvente){JButtonb=(JButton)e.getSource();b.setText("单击"+(++m_count)+"次");}//方法actionPerformed结束}J_Btton2

温馨提示

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

评论

0/150

提交评论