《Java语言编程技术.pptx》由会员分享,可在线阅读,更多相关《Java语言编程技术.pptx(58页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Java 语言编程技术1GUI设计nGUI的组成元素nappletnGUI布局(layout)n事件处理nSwing components的使用nBeansJava 语言编程技术2GUI 演变过程nJava 1.0 Abstract Window Toolkit(AWT)nJava 1.1 AWT event modelnJava 2 Swing u 属于Java Foundation Classes (JFC)ujava.awt.swing com.sun.java.swing javax.swingJava 语言编程技术3AWT类层次关系图Component Container Panel
2、 Applet Window Frame Dialog ButtonTextFieldTextAreaTextComponentCheckboxMenuComponentMenuMenuItemMenuBar其他组件独立不独立Java 语言编程技术4 Swing类Java 语言编程技术5GUI的组成和实现nGUI 的组成:u组件 Componentu容器 Containern设计&实现图形用户界面的工作u创建GUI各组成成分,并安排从属位置关系u定义GUI各成分对不同事件的响应,实现与用户的交互功能Java 语言编程技术6Swing与AWT区别n类名区别uButtonJButtonuLabel
3、 JLabeluFrame JFrameu uCheckbox JCheckBox,JRadioButtonuChoice JComboBoxu新添JColorChooser、JSplitPane、JTable、JTree等Java 语言编程技术7Swing与AWT区别(续)nSwing 没有native代码 light weightnSwing组件提供更多功能u可增加或修改边框 BorderFactory.createLineBorder(Color.red) createLoweredBevelBorder() JComponent中:setBorder(border)方法uSwing 中
4、的JLabel、JButton等可显示text、icon,支持HTML多种字体、多行显示uswing组件形状任意Java 语言编程技术8Swing与AWT区别(续)uswing组件可以设置外观(look&feel)uswing组件使用MVC模式tmodel:保存内容(数据)tview:显示内容tcontroller:控制用户输入例如:JButton ButtonModellight weight与heavy weight尽量不要混用Java 语言编程技术9Top-Level ContainersnSwing 提供四个Top-Level Containers:uJframeuJdialoguJa
5、ppletuJwindow(不常用)Java 语言编程技术10Top-Level Containers(续)import java.awt.*;import javax.swing.*;public class TopLevelDemo1 public static void main(String s) JFrame frame = new JFrame(TopLevelDemo); JLabel label = new JLabel(Hello); frame.getContentPane().add(label, BorderLayout.CENTER); frame.pack(); f
6、rame.setVisible(true); Java 语言编程技术11Top-Level Containers(续)import java.awt.*;import javax.swing.*;public class TopLevelDemo2 extends JFrame public TopLevelDemo2() super(TopLevelDemo); JLabel label = new JLabel(Hello); getContentPane().add(label, BorderLayout.CENTER); pack(); setVisible(true); public
7、 static void main(String s) TopLevelDemo2 frame = new TopLevelDemo2(); Java 语言编程技术12Top-Level Containers(续)n每个top-level container都有一个contentpanen可以向top-level container添加menu barJPanel contentPane ;contentPane.add(someComponent);topLevelContainer.setContentPane(contentPane);topLevelContainer.getConte
8、ntPane().add(label, BorderLayout.CENTER);frame.setJMenuBar(cyanMenuBar);Java 语言编程技术13Top-Level Containers(续)n例:TopLevelDemo.javaJava 语言编程技术14applet的下载过程WWW服务器存放HTMLWWW服务器存放.classWWW浏览器(Browser)请求HTML文件下载HTML文件解释并显示HTML文件HTML文件请求Applet字节码文件下载字节码解释执行字节码Java 语言编程技术15applet的执行框架package javax.swing;publi
9、c class JApplet extends Applet package java.applet;public class Applet extends Panel public void init() public void start() public void stop() public void destroy() Java 语言编程技术16applet的执行框架init()初始化第一次被载入start()启动启动执行appletstop()终止转向其他窗口时applet暂停执行回到applet窗口,重新激活appletdestroy()消亡 构造方法的执行时间早于init()Ja
10、va 语言编程技术17applet例例:Applet1.javaimport javax.swing.*;import java.awt.*;public class Applet1 extends JApplet public void init() getContentPane().add(new JLabel(Applet!); /:Java 语言编程技术18applet运行nWeb browsernAppletviewerHTML ConverterJava 语言编程技术19applet运行(续)Java 语言编程技术20Applet与Application结合n实现方法u在apple
11、t中加入main()方法u在main()中创建一个frame对象和一个applet对象u使用add()把applet对象放入frame对象中,并显式调用applet对象的init()和start()n例 :Applet1c.javan工具 com.bruceeckel.swing.Console.javaJava 语言编程技术21布局(layout)n每个top-level container都有一个contentpane:public Container getContentPane()nContainer:upublic void setLayout(LayoutManager mgr)u
12、add(Component comp) 将指定组件放到容器中uadd(Component comp,int index)uremove(Component comp) 删除指定组件nJPanel :public class JPanel extends JComponentpublic abstract class JComponent extends ContainerJava 语言编程技术22布局(layout)nLayoutManager接口 uBorderLayoutuFlowLayoutuGridLayoutuGridBagLayoutuCardLayoutuBoxLayoutu J
13、ava 语言编程技术23BorderLayout布局管理器nsetLayout(new BorderLayout() )nadd(acomponent,BorderLayout.NORTH); n例:BorderLayout1.javan当容器大小改变,组件相对位置不会改变。CenterNorthSouthWestEastBorderLayout.NORTH BorderLayout.SOUTH BorderLayout.EAST BorderLayout.WEST BorderLayout.CENTER Java 语言编程技术24FlowLayout布局管理器n构造函数:uFlowLayou
14、t() ;uFlowLayout(int align, int hgap, int vgap);align :对齐方式:LEFT CENTER RIGHThgap :组件水平间距 (象素)vgap :组件垂直间距n无参数的构造函数创建的FlowLayout对象,其对齐方式为CENTER居中方式,组件间的横纵间距都为5个像素。 n例 :FlowLayout1.javaJava 语言编程技术25GridLayout布局管理器n构造方法GridLayout()GridLayout(int rows,int cols)GridLayout(int rows,int cols, int hgap,int
15、 vgap)n例 :GridLayout1.javaJava 语言编程技术26BoxLayout布局管理器n构造方法nBoxLayout(Container target,int axis)int X_AXISint Y_AXISn例 :BoxLayout1.javaJava 语言编程技术27Box容器npublic static Box createHorizontalBox()npublic static Box createVerticalBox()npublic static Component createHorizontalStrut(int width)npublic stati
16、c Component createVerticalStrut(int height)npublic static Component createHorizontalGlue()npublic static Component createVerticalGlue()npublic static Component createRigidArea(Dimension d)Java 语言编程技术28直接管理组件n调用Container的 setLayout(null) 方法,关闭布局管理器n调用每一个Component的setLocation()方法决定组件位置n调用每一个Component的
17、setSize()方法决定其大小。直接管理组件将失去平台无关性。Java 语言编程技术29事件及处理机制n用户操作GUI组件时会引发各种事件Event。nEvent :描述“发生了什么事情”的对象。 系统根据用户的操作构造出相应事件类的对象。KeyEvent、MouseEvent、ActionEvent 鼠标单击按扭ActionEvent事件 引发Java 语言编程技术30事件及处理机制(续)n每类事件对应一个的listener监听者接口,它规定了接收并处理该类事件的方法的规范。public void actionPerformed(ActionEvent e)ActionListener接口
18、ActionEvent事件Java 语言编程技术31事件及处理机制(续)n每个component都有若干个uaddXXXListener(XXXListener) uremoveXXXListener( ) nJbutton:addActionListener(ActionListener)n事件处理方法u实现一个实现XXXListener的类u调用component的addXXXListener(XXXListener) 实现了XXXListener接口的类对象Java 语言编程技术32鼠标单击按扭事件及处理机制(续)ActionEvent事件 引发public void actionPer
19、formed(ActionEvent e)ActionListener接口ActionEvent事件监听者类监听者对象调用按扭的 addActionListener ( )方法,为该按扭指定监听者。实现 接口Java 语言编程技术33事件及处理机制(续)n例:MyFrame1.javaButton b = new Button(close);b.addActionListener(new Bprocess();class Bprocess implements ActionListener public void actionPerformed(ActionEvent e) System.ex
20、it(0); Java 语言编程技术34事件类型在java.awt.event包中定义了若干类型的事件类n低级事件uComponentEvent(组件事件:组件尺寸的变化,移动)uContainerEvent(容器事件:组件增加,移动)uWindowEvent(窗口事件:关闭窗口,窗口闭合,图标化)uFocusEvent(焦点事件:焦点的获得和丢失)uKeyEvent(键盘事件:键按下、释放)uMouseEvent(鼠标事件:鼠标单击,移动)Java 语言编程技术35事件类型(续)n高级事件(语义事件)uActionEvent(动作事件:按钮按下,TextField中按Enter键)uAdju
21、stmentEvent(调节事件:在滚动条上移动滑块以调节数值)uItemEvent(项目事件:选择项目,不选择项目)uTextEvent(文本事件,文本对象改变)Java 语言编程技术36ActionEventn引发原因:u单击按扭,双击列表框中选项,选择菜单项,文本框中的回车nActionListeneruactionPerformed(ActionEvent e)n组件注册该事件方法:uaddActionListener(监听者) nActionEvent类方法ue.getSource() 返回事件发生的对象(名)ue.getActionCommand() 返回按扭名。Java 语言编程
22、技术37AdjustmentEventn引发原因:u操作滚动条改变滑块位置nAdjustmentListeneruadjustmentValueChanged(AdjustmentEvent e)n组件注册该事件方法:uaddAdjustmentListener(监听者) Java 语言编程技术38ComponentEventn引发原因:u当组件移动、改变大小、改变可见性时引发nComponentListenerucomponentHidden(ComponentEvent e) 组件隐藏ucomponentMoved(ComponentEvent e) 组件移动ucomponentResiz
23、ed(ComponentEvent e)组件改变大小ucomponentShown(ComponentEvent e) 组件变为可见Java 语言编程技术39ComponentEvent (续)n接口适配器 ComponentAdaptern组件注册该事件方法:uaddComponentListenerJava 语言编程技术40ContainerEventn引发原因:u当容器内增加或移走组件时引发nContainerListenerucomponentAdded(ContainerEvent e) 容器内加入组件ucomponentRemoved(ContainerEvent e) 从容器中移
24、走组件n接口适配器 ContainerAdaptern容器注册该事件方法:uaddContainerListenerJava 语言编程技术41FocusEventn引发原因:u组件获得焦点u组件失去焦点nFocusListenerufocusGained(FocusEvent e) 组件获得焦点时调用ufocusLost(FocusEvent e) 组件失去焦点时调用n接口适配器:FocusAdaptern组件注册该事件方法:addFocusListenerJava 语言编程技术42KeyEventn引发原因:u敲完键(KEY-TYPED)u按下键 (KEY-PRESSED)u释放键 (KEY
25、-RELEASE)nKeyListenerukeyPressed(KeyEvent e) 键已被按下时调用ukeyReleased(KeyEvent e) 键已被释放时调用ukeyTyped(KeyEvent e) 键已被敲完时调用Java 语言编程技术43KeyEvent(续)nKeyEvent方法:char ch = e.getKeyChar(); n事件监听适配器(抽象类)KeyAdaptern组件注册该事件方法:uaddKeyListener(监听者) Java 语言编程技术44MouseEventn引发原因: (鼠标作用在一个组件上)u鼠标事件:鼠标键按下,鼠标键抬起,单击鼠标 ,鼠
26、标光标进入一个组件,鼠标光标离开一个组件。u鼠标移动事件:鼠标移动,鼠标拖动 Java 语言编程技术45MouseEvent(续)n鼠标事件监听接口1:uMouseListener 接受鼠标事件n该接口方法:umouseClicked(MouseEvent e) u mouseEntered(MouseEvent e) 鼠标光标进入一个组件umouseExited(MouseEvent e) 鼠标光标离开一个组件umousePressed(MouseEvent e)umouseReleased(MouseEvent e)n鼠标事件监听适配器(抽象类)MouseAdapterJava 语言编程技
27、术46MouseEvent(续)n鼠标事件监听接口2:uMouseMotionListener 接受鼠标移动事件n该接口方法:umouseMoved(MouseEvent e) 鼠标光标在组件上移动umouseDragged(MouseEvent e)用鼠标拖动一个组件n鼠标移动事件监听适配器 MouseMotionAdaptern组件注册鼠标事件方法:uadd MouseListener(监听者) n组件注册鼠标移动事件方法:uadd MouseMotionListener(监听者) Java 语言编程技术47MouseEvent(续)nMouseInputListener extends
28、MouseListener, MouseMotionListenernMouseInputAdapterJava 语言编程技术48MouseEvent(续)nMouseEvent方法ue.getClickCount() =1 单击 =2 双击uPoint e.getPoint() 取鼠标光标位置uint e.getX() int e.getY() 取鼠标光标位置ue.getModifiers() = MouseEvent.BUTTON1_MASK 鼠标左键 = MouseEvent.BUTTON3_MASK 鼠标右键Java 语言编程技术49WindowEventn引发原因:u有关窗口操作引发
29、的事件nWindowListeneruwindowActivated(WindowEvent e) 激活窗口uwindowClosed(WindowEvent e) 调用dispose方法关闭窗口后。uwindowClosing(WindowEvent e) 试图利用窗口关闭框关闭窗口uwindowDeactivated(WindowEvent e) 本窗口成为非活动窗口Java 语言编程技术50WindowEvent(续)uwindowDeiconified(WindowEvent e) 窗口从最小化恢复为普通窗口uwindowIconified(WindowEvent e) 窗口变为最小化
30、图标uwindowOpened(WindowEvent e) 当窗口第一次打开成为可见时n接口适配器 WindowAdaptern注册事件方法uaddWindowListenerJava 语言编程技术51TextEventn引发原因:u文本框或文本区域内容改变nTextListenerutextValueChanged(TextEvent e)n组件注册该事件方法:uaddTextListener(监听者) Java 语言编程技术52ItemEventn引发原因:u改变列表框中的选中项u改变复选框选中状态u改变下拉选单的选中项nItemListeneruitemStateChanged(Ite
31、mEvent e)n组件注册该事件方法:uaddItemListener(监听者) Java 语言编程技术53事件适配器Event Adaptersn事件适配器(Event Adapters)uComponentAdapter(组件适配器)uContainerAdapter(容器适配器)uFocusAdapter(焦点适配器)uKeyAdapter(键盘适配器)uMouseAdapter(鼠标适配器)uMouseMotionAdapter(鼠标运动适配器)uWindowAdapter(窗口适配器)Java 语言编程技术54Event Adapters (续)public interface W
32、indowListener extends EventListener public void windowOpened(WindowEvent e); public void windowClosing(WindowEvent e); public void windowClosed(WindowEvent e); public void windowIconified(WindowEvent e); public void windowDeiconified(WindowEvent e); public void windowActivated(WindowEvent e); public
33、 void windowDeactivated(WindowEvent e);Java 语言编程技术55Event Adapters (续)public abstract class WindowAdapter implements WindowListener public void windowOpened(WindowEvent e) public void windowClosing(WindowEvent e) public void windowClosed(WindowEvent e) public void windowIconified(WindowEvent e) publ
34、ic void windowDeiconified(WindowEvent e) public void windowActivated(WindowEvent e) public void windowDeactivated(WindowEvent e) Java 语言编程技术56Event Adapters (续)nclass Wclose implements WindowListener public void windowClosing(WindowEvent e) System.exit(0); nclass Wclose extends WindowAdapter public void windowClosing(WindowEvent e) System.exit(0); Java 语言编程技术57Tracking multiple eventsn例 :TrackEvent.javaJava 语言编程技术58上机作业n创建一个Frame,完成一个计算器的功能。