第7章 Java的图形用户界面-2_第1页
第7章 Java的图形用户界面-2_第2页
第7章 Java的图形用户界面-2_第3页
第7章 Java的图形用户界面-2_第4页
第7章 Java的图形用户界面-2_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

第七章Swing-I回顾Swing组件中的顶层容器包括哪些?Swing组件的结构?2JFrame、JAppletJFrameContentpaneJPanelJButtonJLabelSwing层次结构3目标掌握SwingGUI组件JLabel、JTextField、JTextArea、JPasswordField、JButton理解事件监听器理解内部类和匿名类4GUI设计步骤(swing)1、创建顶层容器;2、如果是容器JFrame、Japplet、Jdialog,向这些容器中添加组件时必须添加到容器的ContentPane部分(内容窗格)。内容窗格的默认布局管理器是BorderLayout3、设置布局管理器4、将swing组件添加到ContentPane中。5JLabel类标签是用户不能修改只能查看其内容的一种文本显示区域,它的作用就是在窗口中进行信息提示或说明。标签上可以放置字符串、图形,然后在窗口上显示该标签6例:设计一程序,在用户图形界面中用标签方法实现文字和图形的提示信息,提示信息“今日有雨”。Classcode\MyJLabel.javaJFramef=newJFrame("标签");ContainercontentPane=f.getContentPane();

Iconicon=newImageIcon(".\\classcode\\connected_networks.jpg");JLabellabel=newJLabel("今日有雨",icon,JLabel.CENTER);//水平:设置字符放在标签图像的中间。label.setHorizontalTextPosition(JLabel.CENTER);//垂直:设置字符放在标签图像的上面label.setVerticalTextPosition(JLabel.TOP);

contentPane.add(label);//标签放到内容面板上f.pack();f.setSize(300,400);f.setVisible(true);7文字输入组件的使用在Swing中与文字输入有关的组件有:JTextField 该组件为单行文本编辑器JPasswordField 该组件为多行文本编辑器JTextArea 该组件为多行文本编辑器JEditorPane 该组件可显示多种文件格式JTextPane 该组件可设置文件各种样式8例7-11ch7\classcodepublicTextFieldTest(Stringstr){super(str);ContainercontentPane=getContentPane();

contentPane.setLayout(newBorderLayout(10,10))

//北边:2×2网格布局,放置两个标签、一个密码框和一个文本框

JPanelpNorth=newJPanel(newGridLayout(2,2));//创建密码提示标签:第2个参数指明标签上文字的位置passwordLabel=newJLabel("请输入密码",SwingConstants.RIGHT);

pNorth.add(passwordLabel);//添加标签到pNorth面板中

passwordField=newJPasswordField(10);//创建密码输入框passwordField.addActionListener(this);//对密码框增加监听

pNorth.add(passwordField);//添加密码输入框到pNorth面板中//创建姓名输入提示标签:第2个参数指明标签上文字的位置textfieldLabel=newJLabel("请输入姓名",SwingConstants.RIGHT);

pNorth.add(textfieldLabel);textfield=newJTextField(10);//创建文本输入框

pNorth.add(textfield);//添加文本输入框到pNorth面板中textfield.addActionListener(this);//对文本框增加监听

contentPane.add(pNorth,BorderLayout.NORTH);//pNorth面板在窗口北边

}9//中间:1×2网格布局,放置一个标签和一个文本区

JPanelpCenter=newJPanel(newGridLayout(1,2));

//标签放在中间的左边textAreaLabel=newJLabel();textAreaLabel.setText("有图标的标签");//设置标签文字textAreaLabel.setIcon(newImageIcon("classcode\\pic14\\1.jpg"));//设置标签图标//设置标签上文字的位置:居中(CENTER)、图像底部(BOTTOM)textAreaLabel.setHorizontalTextPosition(SwingConstants.CENTER);textAreaLabel.setVerticalTextPosition(SwingConstants.BOTTOM);//设置鼠标放在标签上时,出现的提示文字textAreaLabel.setToolTipText("密码正确后,标签文字和图标会改变");

pCenter.add(textAreaLabel);//文本区---放在中间的右边,第2、3个参数指定文本的行数、列数textArea=newJTextArea("10行12列的文本区,带滚动条",10,12);textArea.setLineWrap(true);//文本自动换行//使用javax.swing.JScrollPane类给文本区增加滚动条

pCenter.add(newJScrollPane(textArea));//有滚动条的文本区

contentPane.add(pCenter,BorderLayout.CENTER);

pack();setVisible(true);10

publicvoidactionPerformed(ActionEvente){//在密码框或文本框中回车后,都将执行if中的语句if(e.getSource()==textfield||e.getSource()==passwordField){//方法getPassword()得到密码框的内容,返回字符数组charch[]=passwordField.getPassword();//得到密码框输入的密码Strings1=newString(ch);//密码字符串Strings2=textfield.getText();//得到文本框输入的姓名//判断密码和姓名是否正确if(s1.equals("111111")&s2.equals("张三")){//修改标签图标为张三的图片textAreaLabel.setIcon(newImageIcon("classcode\\pic14\\2.jpg"));textAreaLabel.setText("张三");textArea.append("\n张三,欢迎你!");//向文本区追加内容}else{//密码和姓名不正确,则文本区追加提示内容、标签图标修改textArea.append("\n密码和姓名不对,请重新输入!");textAreaLabel.setText("有图标的标签");textAreaLabel.setIcon(newImageIcon("classcode\\pic14\\1.jpg"));}}}11例:设计一程序,要求在图形用户界面中输入产品的说明书,输入内容有产品名称、产品规格、产品编号、产品说明。Classcode\MyJTextArea.java12JFramef=newJFrame("JTextArea例题");//创建JFrame窗口容器类对象f。ContainercontentPane=f.getContentPane();//创建内容面板对象实例contentPane.setLayout(newBorderLayout());//设置内容面板采用边界布局管理器

JPanelp1=newJPanel();//创建面板容器实例。p1.setLayout(newGridBagLayout());//设置面板采用网袋布局管理器GridBagConstraintsgbc=newGridBagConstraints();//创建网袋格布局对象gbc。gbc.anchor=GridBagConstraints.WEST;//确定网袋格布局管理器对象gbc的位置gbc.insets=newInsets(2,2,2,2);//gbc与边界的距离(上,左,下,右)p1.setBorder(BorderFactory.createTitledBorder("建构一般的JTextArea")); //设置边界框和说明文字JLabell1=newJLabel("产品名称:");//创建4个标签实例JLabell2=newJLabel("产号编号:");JLabell3=newJLabel("产品规格:");JLabell4=newJLabel("产品说明:");JTextAreat1=newJTextArea(2,8);//创建4个文本域实例JTextAreat2=newJTextArea(10,2);JTextAreat3=newJTextArea("TravelMate372系列",3,10);JTextAreat4=newJTextArea("采用因特尔迅驰移动技术",5,10);t1.setText(“宏基笔记本电脑1212121212121”);//向文本域t1写入文字数据t2.append("A19345-by3874534-34345");//在文本域t2中已有文字后写入该字符串,t4.setLineWrap(true);//激活自动换行功能13/*29-36行将4个标签和4个文本域按指定的位置加到面板容器中。*/gbc.gridy=1;gbc.gridx=0;p1.add(l1,gbc);gbc.gridx=1;p1.add(t1,gbc);

gbc.gridy=2;gbc.gridx=0;p1.add(l2,gbc);gbc.gridx=1;p1.add(t2,gbc);

gbc.gridy=3;gbc.gridx=0;p1.add(l3,gbc);gbc.gridx=1;p1.add(t3,gbc);

gbc.gridy=4;gbc.gridx=0;p1.add(l4,gbc);gbc.gridx=1;p1.add(t4,gbc);contentPane.add(p1);//把面板容器加到内容面板里。

f.show();//使窗口中的组件可见f.addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){ System.exit(0);}})14事件处理程序3-1!用户交互事件单击鼠标按下/释放鼠标按钮对象状态改变调用事件处理确定发生的事件的类型确定生成的事件的组件编写合适的代码处理事件15

源对象监听器事件

传播事件的实例方法传递途径代理事件模型Swing中的GUI组件适配器对象事件处理程序3-216

源对象监听器事件

传播事件实例方法传递途径代理事件模型Swing中的GUI组件适配器对象事件处理程序3-3Event类接口ActionEventActionListenerAdjustmentEventAdjustmentListenerComponentEventComponentListenerFocusEventFocusListenerItemEventItemListenerWindowEventWindowListenerTextEventTextListenerMouseEventMouseListener,MouseMotionListenerKeyEventKeyListener17事件处理模型Java最新的事件处理方法:委托事件模型当事件来源对象因用户的操作(鼠标或键盘),系统会自动触发此事件类对象E,并通知所授权的事件监听者A(若来源对象已向A注册),事件监听者A中有处理各种事件的方法(事件处理者1~n)便会处理此事件E的各种状况。18(1)Java的事件处理模式是委托事件模型:组件本身并不负责事件的处理。将各种事件的处理委托给其他的对象——监听器。(2)实现接口、增加监听,及命名规范:事件名称——XxxxxEvent 例如,ActionEvent,KeyEvent处理事件的接口——XxxxxListener接口中包含很多没有具体实现的处理事件的抽象方法。增加监听——addXxxxxListener() 组件的addXxxxxListener()方法将组件注册给事件的处理者。(3)事件处理编程编写对应接口中的方法的方法体,完成程序所指定的功能。19事件源:产生事件的组件,如JButton组件能引发的事件:java.awt.event处理组件事件的对象:接口,如xxxListerner:

组件对象.addXxxListener(newCharType());

事件层次结构20事件类说明事件源ActionEvent

通常按下按钮,双击列表项或选中一个菜单项时,就会生成此事件。Button、List、MenuItem、TextFieldAdjustmentEvent操纵滚动条时会生成此事件。ScrollbarComponentEvent当一个组件移动、隐藏、调整大小或成为可见时会生成此事件。ComponentItemEvent单击复选框或列表项时,或者当一个选择框或一个可选菜单的项被选择或取消时生成此事件。Checkbox、CheckboxMenuItem、Choice、ListFocusEvent组件获得或失去键盘焦点时会生成此事件。Component事件21事件类说明事件源KeyEvent

接收到键盘输入时会生成此事件。ComponentMouseEvent拖动、移动、单击、按下或释放鼠标或在鼠标进入或退出一个组件时,会生成此事件。ComponentContainerEvent将组件添加至容器或从中删除时会生成此事件。ContainerTextEvent在文本区或文本域的文本改变时会生成此事件。TextField、TextAreaWindowEvent当一个窗口激活、关闭、失效、恢复、最小化、打开或退出时会生成此事件。Window22

源对象监听器事件

传播事件实例方法传递途径代理事件模型Swing中的GUI组件适配器对象事件处理程序3-3Event类接口ActionEventActionListenerAdjustmentEventAdjustmentListenerComponentEventComponentListenerFocusEventFocusListenerItemEventItemListenerWindowEventWindowListenerTextEventTextListenerMouseEventMouseListener,MouseMotionListenerKeyEventKeyListener23接口Java在Java.awt.event包中提供了许多处理各种事件源事件的接口

按钮组件:要为该按钮组件实现事件监听对象接口:publicclassmymousimplementsActionListener{………}窗口事件:要为该窗口组件实现监听对象接口:publicclassmywindowimplementsWindowListener{………}JCheckBox、JcomboBox、JcheckBoxMenuItem组件事件:要为该窗口组件实现监听对象接口:publicclassmycheckBoximplementsItemListener{………..}JSlider、JProgress、JTabbedPane等组件事件:要为该窗口组件实现监听对象接口:

publicclassmyJmplementsChangeListener{……}2425事件处理方法实现事件监听器接口法:确定事件源:即可能产生事件的组件;处理事件的接口:必须在程序中定义类来实现这些接口,重写接口中的所有方法。给组件注册监听器,使用下列方法:

addxxxListener(事件监听器对象);

26典型事件处理鼠标、键盘事件的处理:例:classcode\MouseKeyEventDemo.java按钮事件的处理:例:classcode\JButtonDemo.java&p254例7.7(ColorTest),7.10,7.12(匿名内部类)密码框和文本框的回车动作引发事件:例:7.11(TextFieldTest)关闭窗口事件的处理:例:classcode\MyFrameExit.java27按钮事件的处理:例:classcode\JButtonDemo.java

classJButtonDemoextendsJFrameimplementsActionListenerJButtonDemo(){button1=newJButton("日期[d]");

button1.addActionListener(this);//注册事件监听器 Containercontentpane=getContentPane(); contentpane.add(text,BorderLayout.SOUTH);contentpane.add(button1,BorderLayout.WEST);}

publicvoidactionPerformed(ActionEvente){ if(e.getSource()==button1){ text.setText("你好!"); } elseif(e.getSource()==button2){ } elseSystem.exit(0);} publicstaticvoidmain(Stringargs[]){ JFrameframe=newJButtonDemo(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(300,400); frame.setVisible(true); }}28键盘事件的监听器类addKeyListener(newCharType());

publicclassCharTypeimplementsKeyListener{ publicvoidkeyPressed(KeyEvente){……}//大括号中为处理事件的代码 publicvoidkeyReleased(KeyEvente){}//未用到此方法,所以方法体为空 publicvoidkeyTyped(KeyEvente){}}

29鼠标、键盘事件的处理:例:classcode\MouseKeyEventDemo.java301.java.awt.event包文本框回车、按钮点击、计时器(javax.swing.Timer)、菜单项(javax.swing.JMenuItem)

引发动作事件:java.awt.event.ActionEvent处理事件的接口:java.awt.event.ActionListener接口中的方法:publicvoidactionPerformed(ActionEventevent)31单选按钮(JRadioButton)、多选按钮(JCheckBox)、下拉列表(JComboBox)

引发选项事件:java.awt.event.ItemEvent处理事件的接口:java.awt.event.ItemListener接口中的方法:publicvoiditemStateChanged(ItemEventevent)32键盘

引发键盘事件:java.awt.event.KeyEvent处理事件的接口:java.awt.event.KeyListener接口中的方法: publicvoidkeyPressed(KeyEvente);压下

publicvoidkeyReleased(KeyEvente);释放 publicvoidkeyTyped(KeyEvente);敲击33鼠标引发鼠标事件:java.awt.event.MouseEvent处理事件的接口:java.awt.event.MouseListener和MouseMotionListenerMouseListener接口中的方法:publicvoidmousePressed(MouseEvente);按下鼠标键时执行的方法publicvoidmouseClicked(MouseEvente);敲击鼠标键时执行的方法publicvoidmouseReleased(MouseEvente);释放鼠标键时执行的方法publicvoidmouseEntered(MouseEvente);鼠标进入publicvoidmouseExited(MouseEvente);鼠标退出MouseMotionListener接口中的方法:publicvoidmouseDragged(MouseEvente);按下鼠标键拖动publicvoidmouseMoved(MouseEvente);不按下鼠标键移动鼠标34事件适配器使用实现事件监听器接口的方法处理事件时,必须重写监听器接口中的所有方法,尽管有些方法不会用到。事件适配器类:

实现了监听器接口中的所有方法,因此只需要重写所需要的方法即可。例:classcode\MyFrameExit_ada.java,MyFlowLayout.javaaddKeyListener(newCharType());

为事件源注册事件监听器的方法同上。publicclassCharTypeextendsKeyAda

温馨提示

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

评论

0/150

提交评论