版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 Swing图形用户界面程序设计 1编辑课件主要内容简介容器组件基本组件布局管理器事件处理模型高级图像用户界面2编辑课件8.1简介图形用户界面(GUI)数据的图形显示形式友好的交互方式简化计算机软件的学习过程GUI示例jdk1.6demojfcSwingSet2GUI组件: Labels, Text fields, Buttons等等3编辑课件1、关于Swing GUI 组件Swing GUI 组件所在的包: javax.swingSwing组件的平台相关性较小(lightweight)早期版本的GUI组件所在的包: java.awt与平台相关性较强4编辑课件2、Swing特性100%的纯Ja
2、va实现可插入的外观感觉(Pluggable Look and Feel,PL&F)Swing组件的多样化支持键盘操作设置边框使用图标(Icon)可存取性支持 MVC(Model-View-Control)体系结构 5编辑课件3、Swing的组件在javax.swing包中,定义了两种类型的组件:容器和组件。容器各种组件必须放在容器容器本身也是一种组件分类顶层容器,如JFrame,JApplet,JDialog和JWindow其它容器,如JPanel,JScrollPane,JSplitPane,JToolBar组件基本控制组件,如JButton, JComboBox, JList, JMen
3、u, JSlider, JTextField不可编辑的信息显示组件,如JLabel, JProgressBar, JToolTip可编辑的信息显示组件,如JColorChooser, JFileChooser, JTable, JTextArea6编辑课件4、Swing的类层次结构Swing的类层次结构 java.awt.Component|java.awt.Container java.awt.Window java.awt.Frame javax.swing.JFrame javax.Dialog javax.swing.JDialog javax.swing.JWindow java.a
4、wt.Applet-javax.swing.JApplet javax.swing.Box javax.swing.JComponet 7编辑课件5、 JComponent类的功能 1) 边框设置:使用setBorder()方法可以设置组件外围的边框,使用一个EmptyBorder对象能在组件周围留出空白。2) 双缓冲区:使用双缓冲技术能改进频繁变化的组件的显示效果。与AWT组件不同,JComponent组件默认双缓冲区,不必自己重写代码。3) 提示信息:使用setTooltipText()方法,为组件设置对用户有帮助的提示信息。8编辑课件5、 JComponent类的功能(续)4) 键盘导航
5、:使用registerKeyboardAction( ) 方法,能使用户用键盘代替鼠标来驱动组件。JComponent类的子类AbstractButton还提供了setMnemonic( )方法指明一个字符,通过这个字符和一个当前L&F的特殊修饰共同激活按钮动作。5) 可插入L&F:每个JComponent对象有一个相应的ComponentUI对象,为它完成所有的绘画、事件处理、决定尺寸大小等工作。 ComponentUI对象依赖当前使用的L&F,用UIManager.setLookAndFeel( )方法可以设置需要的L&F。6) 支持布局:通过设置组件最大、最小、推荐尺寸的方法和设置X、Y
6、对齐参数值的方法能指定布局管理器的约束条件,为布局提供支持。9编辑课件8.2 容器组件 JFrameJPanelJScrollPaneJSplitPane10编辑课件1、JFrame(框架)类 JFrame 是java.awt.Frame的子类在Swing的组件中, JFrame 并不全是由Java编写的是一种与平台关系比较密切的组件(Heavyweight component)java.lang.Object | +-java.awt.Component | +-java.awt.Container | +-java.awt.Window | +-java.awt.Frame | +-jav
7、ax.swing.JFrame11编辑课件例1:基于AWT实现的框架界面import java.awt.*;public class FrameDemoFrame f;Button b;public FrameDemo()f=new Frame(Frame Demo);b=new Button(Press me);f.add(b);f.setSize(200,200);f.setVisible(true);public static void main(String args)new FrameDemo();12编辑课件例2:基于Swing实现的框架界面import java.awt.*;im
8、port javax.swing.*;public class JFrameDemoJFrame f;JButton b;Container c;public JFrameDemo()f=new JFrame(JFrame Demo);b=new JButton(Press me);c=f.getContentPane();c.add(b);f.setSize(200,200);f.setVisible(true);public static void main(String args)new JFrameDemo();13编辑课件在JFrame中加入组件的方法1) 用getContentPa
9、ne( )方法获得JFrame的内容面板,再对其加入组件: Container c=frame.getContentPane() c.add(childComponent)2) 建立一个JPanel或 JDesktopPane之类的中间容器,把组件添加到容器中,用setContentPane()方法把该容器置为JFrame的内容面板:JPanel contentPane=new JPanel( );/把其它组件添加到Jpanel中;frame.setContentPane(contentPane); /把contentPane对象设置成为frame的内容面板 14编辑课件2、JPanel(面板
10、)一种中间容器,用来组成其它组件可以添加各种组件(包括面板组件)面板(JPanel)的大小由它所包含的组件决定当组件个数增加,面板(JPanel)也会随之而增大15编辑课件例3:利用JPanel创建界面import java.awt.*;import javax.swing.*;public class JPanelDemo extends JFramepublic JPanel getGUI()JPanel p=new JPanel();p.add(new JButton(Press me);return p;public JPanelDemo()super(JPanel Demo);set
11、ContentPane(getGUI();setSize(200,200);setVisible(true);public static void main(String args)new JPanelDemo();import java.awt.*;import javax.swing.*;public class JPanelDemo extends JFramepublic JPanel getGUI()JPanel p=new JPanel();p.add(new JButton(Press me);return p;public static void main(String arg
12、s)JPanelDemo jp=new JPanelDemo();jp.setTitle(JPanel Demo);jp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jp.setContentPane(jp.getGUI();jp.setSize(200,200);jp.setVisible(true);16编辑课件3、 JScrollPane(滚动窗口面板)JScrollPane是带滚动条的面板,主要是通过移动JViewport(视口)来实现的。JViewport是一种特殊的对象,用于查看基层组件,滚动条实际就是沿着组件移动视口,同时描绘出它
13、在下面看到的内容。17编辑课件滚动窗口(JScrollPane)效果图18编辑课件4、JSplitPane(分隔板)JSplitPane提供可拆分窗口,支持水平拆分(JSplitPane.HORIZONTAL_SPLIT)和垂直(JSplitPane.VERTICAL_SPLIT)拆分并带有滑动条。常用方法有:JSplitPane (intnewOrientation, ComponentnewLeftComponent, ComponentnewRightComponent) 创建一个具有指定方向和指定组件的新 JSplitPane。 addImpl(Component comp,Objec
14、t constraints,int index)/增加指定的组件setTopComponent(Component comp) /设置顶部的组件setDividerSize(int newSize) /设置拆分的大小setUI(SplitPaneUI ui) /设置外观和感觉 19编辑课件分隔板(JSplitPane)效果图20编辑课件8.3基本组件标签(JLabel)文本框(JTextField)按钮(JButton)组合框(JComboBox)文本(JTextArea)列表JList(单选列表和多选列表)21编辑课件1、标签(JLabel)标签为GUI提供文本(主要)或图像(也可以)信息对
15、应类(JLabel) (JComponent的子类)可以显示:单行的只读的文本信息图像同时显示文本与图像信息程序一般不修改标签的内容22编辑课件例4:JLabel的演示例子import java.awt.Container;import java.awt.FlowLayout;import javax.swing.ImageIcon;import javax.swing.JFrame;import javax.swing.JLabel;public class JLabelDemo extends JFrame public JLabelDemo( ) super( 框架和标签例程 ); St
16、ring s = 文本标签, 文字在图标的左侧, 文字在图标的下方; ImageIcon ic = null, new ImageIcon( img1.gif ), new ImageIcon( img2.gif ); int ih = 0, JLabel.LEFT, JLabel.CENTER; int iv = 0, JLabel.CENTER, JLabel.BOTTOM; Container c = getContentPane( ); c.setLayout( new FlowLayout(FlowLayout.LEFT) );23编辑课件例4:JLabel的演示例子(续)for (
17、int i=0; i0) aLabel.setHorizontalTextPosition(ihi); aLabel.setVerticalTextPosition(ivi); aLabel.setToolTipText( 第 + (i+1) + 个标签); c.add( aLabel ); public static void main(String args ) JLabelDemo app = new JLabelDemo( ); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); app.setSize( 360, 150 ); ap
18、p.setVisible( true ); 24编辑课件2、文本框(JTextField)显示单行的文本信息JTextField extends JTextComponent密码输入框JPasswordField25编辑课件例5:JTextField的演示例子import java.awt.Container;import java.awt.FlowLayout;import javax.swing.JFrame;import javax.swing.JPasswordField;import javax.swing.JTextField;public class JTextFieldDemo
19、 public static void main(String args ) JFrame app = new JFrame( 文本编辑框例程 ); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); app.setSize( 320, 120 ); Container c = app.getContentPane( ); c.setLayout( new FlowLayout( ) ); JTextField t = new JTextField(正常文本:, 8), new JTextField(显示, 15), new JTextFie
20、ld(密码文本:, 8), new JPasswordField(隐藏, 15); t0.setEditable( false ); t2.setEditable( false ); for (int i=0; i4; i+) c.add( ti ); app.setVisible( true ); 26编辑课件3、按钮(JButton)当鼠标左键单击按钮组件时,能触发特定的事件在Java中, 广义的按钮包括:命令式按钮(JButton)复选框(JCheckBox)单选按钮(JRadioButton)27编辑课件按钮类的层次结构javax.swing.JComponentjavax.swing
21、.AbstractButtonjavax.swing.JButtonjavax.swing. JToggleButtonjavax.swing.JCheckBoxjavax.swing.JRadioButton28编辑课件 Container c = getContentPane( ); c.setLayout( new FlowLayout( ) ); int i; ImageIcon ic = new ImageIcon(left.gif), new ImageIcon(right.gif); JButton b = new JButton(左, ic0), new JButton(中间)
22、, new JButton(右, ic1); for (i=0; i b.length; i+) c.add( bi ); JCheckBox ck = new JCheckBox(左), new JCheckBox(右); for (i=0; ick.length; i+) c.add( cki ); cki.setSelected(true); JRadioButton r=new JRadioButton(左), new JRadioButton(右); ButtonGroup rg = new ButtonGroup( ); for (i=0; i r.length; i+) c.ad
23、d( ri ); rg.add( ri ); r0.setSelected(true); r1.setSelected(false); 29编辑课件4、组合框(JComboBox)组合框(JComboBox)可以从下拉式的列表框中选取其中的列表项有时也称为下拉框(drop-down list)类JComboBox中的方法getSelectedIndex( )返回当前被选中的项setMaximumRowCount( n )设置最多显示列表项的项数滚动条(Scrollbar)会自动加上30编辑课件5、文本(JTextArea)JTextArea 是一个显示纯文本的多行区域。JTextArea 不管
24、理滚动,可把它放置在 JScrollPane 的ViewPort中实现滚动,如: JTextArea textArea = new JTextArea(); JScrollPane area=new JScrollPane(textArea); TextArea 具有换行能力,JTextArea默认为不换行,需设置换行策略,如: textArea.setLineWrap(true); textArea.setWrapStyleWord(true);31编辑课件JTextArea的代码段 /建立容纳文本区的面板JPanel textPanel = new JPanel();/新建无回绕的文本区,
25、行数为5,列数为20noWrapArea = new JTextArea(nowrap, 5, 20);/新建有回绕的文本区,行数为5,列数为20wrapArea = new JTextArea(wraparea, 5, 20);wrapArea.setLineWrap(true);/新建带滚动条的文本区,行数为5,列数为20scrollArea = new JTextArea(scrollarea, 5, 20);/将文本区插入到滚动窗格中JScrollPane scrollPane = new JScrollPane(scrollArea);textPanel.add(noWrapArea
26、);textPanel.add(wrapArea);/将滚动窗格加入到框架中textPanel.add(scrollPane); 32编辑课件6、列表JListJList显示出一系列选项,用户可以从中选择一个或多项。String colorNames = “Black”, “Blue”, “Cyan”, “Dark Gray”, “Gray“;colorList = new JList( colorNames );colorList.setVisibleRowCount( 5 );colorList.setSelectionMode(ListSelectionModel.SINGLE_SELE
27、CTION );colorList.getSelectedIndex() ;colorList.getSelectedValue() ;33编辑课件多选列表在JList中选择多个选项,方法是按住shift键或ctrl键。多选列表没有和多个选择相关的事件。通常由另一个GUI组件生成的事件(外部事件)来指定处理JList中的多个选择。34编辑课件多选列表的使用方法String colorNames = “Black”, “Blue”, “Cyan”, “Dark Gray”, “Gray“;JList colorList = new JList( colorNames );colorList.se
28、tVisibleRowCount( 5 ); colorList.setFixedCellHeight( 15 );colorList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION );colorList.getSelectedValues()35编辑课件8.4布局管理器用来控制组件在容器中的布局方式应当尽量利用已有的基本布局方式布局管理器处理组件布局的大部分细节36编辑课件布局管理器流式布局FlowLayout边界布局BorderLayout盒式布局管理器BoxLayout网格布局GridLayout卡片布局C
29、ardLayout网格包布局GridBagLayout37编辑课件1、流式布局FlowLayout是一种最基本的布局管理器是 java.awt.Applet、java.awt.Panel 和 javax.swing.JPanel的默认布局方式在容器中,从左到右依次放置GUI组件当组件排到容器一行的末尾时,则从下一行开始接着排列组件每行组件的对齐方式可以是: 左对齐、中间(默认对齐方式)和右对齐38编辑课件FlowLayout的构造方法public FlowLayout() public FlowLayout(int alignment)public FlowLayout(int alignme
30、nt,int horizontalGap,int verticalGap)alignment参数的值必须是FlowLayout.LEFT、 Flowlayout.CENTER或FlowLayout.RIGHT。horizontalGap和verticalGap参数指定了组件间隔距离(以像素为单位)。 FlowLayout的默认间隔值为5。39编辑课件例6:FlowLayout的使用方法import java.awt.*;import javax.swing.*;public class FlowLayoutDemo extends JFrame public FlowLayoutDemo()
31、Container c=getContentPane(); c.setLayout(new FlowLayout(); c.add(new JLabel(Buttons:); c.add(new JButton(Button 1); c.add(new JButton(2); c.add(new JButton(Button 3); c.add(new JButton(Long-Named Button 4); c.add(new JButton(Button 5); public static void main(String args) FlowLayoutDemo window = ne
32、w FlowLayoutDemo(); window.setTitle(FlowLayout Demo); window.pack();/窗口大小设置为适合组件最佳尺寸与布局所需的空间 window.setVisible(true); 40编辑课件2、边界布局BorderLayout是容器JFrame和JApplet的默认布局方式将容器分成五个区域,NORTH (顶部)SOUTH (底部)WEST (左侧)EAST (右侧)CENTER (中间)每个区域最多只能1个组件41编辑课件BorderLayout的方法构造方法:BorderLayout() 构造一个组件之间没有间距的新边界布局。 Bo
33、rderLayout(inthgap, intvgap) 用指定的组件之间的水平间距构造一个边界布局。 将组件添加到BorderLayout布局的容器中的方法add(new Button( South ), BorderLayout.SOUTH); add(new Button(South),South);add(South,new Button(South);42编辑课件例7: BorderLayout的使用方法import java.awt.*;import javax.swing.*;public class BorderLayoutDemo extends JFrame public
34、BorderLayoutDemo() Container c=getContentPane(); c.setLayout(new BorderLayout(5,5); c.add(new JButton(North), North); c.add( new JButton(South),South); /c.add(South,new Button(South); /c.add(new Button( South ), BorderLayout.SOUTH); c.add( new JButton(East),East); c.add( new JButton(West),West); c.a
35、dd( new JButton(Center),Center); public static void main(String args) BorderLayoutDemo window = new BorderLayoutDemo(); window.setTitle(BorderLayout Demo); window.pack(); window.setVisible(true); 43编辑课件3、盒式布局管理器BoxLayout允许多个组件在容器中沿水平方向或竖直方向排列容器的大小发生变化时,组件占用的空间不会发生变化44编辑课件BoxLayout的方法构造方法: BoxLayout(
36、Container target, int axis) 创建一个将沿给定轴放置组件的布局管理器。 轴的方向: BoxLayout.X_AXIS:指定组件应该从左到右放置BoxLayout.Y_AXIS:指定组件应该从上到下放置45编辑课件例8: BoxLayout使用的例子import java.awt.Container;import javax.swing.BoxLayout;import javax.swing.JButton;import javax.swing.JFrame;public class BoxLayoutDemo public static void main(Stri
37、ng args ) JFrame app = new JFrame( 盒式布局管理器例程 ); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); app.setSize( 220, 130 ); Container c = app.getContentPane( ); c.setLayout( new BoxLayout( c, BoxLayout.X_AXIS ) ); String s; JButton b; for (int i=0; i3; i+) s = 按钮 + (i+1); b = new JButton( s ); c.ad
38、d( b ); app.setVisible( true ); 46编辑课件4、网格布局GridLayout布局管理器GridLayout按行与列将容器等分成网格每个组件占用具有相同宽度和高度的网格添加组件占用网格的顺序: 从上到下,从左到右当一行满了,则继续到下一行,仍然是从左到右47编辑课件GridLayout类的构造方法GridLayout() 创建默认值的网格布局,即每个组件占据一行一列。GridLayout(introws, intcols) 创建具有指定行数和列数的网格布局GridLayout(introws, intcols, inthgap, intvgap) 创建具有指定行数
39、和列数的网格布局。48编辑课件例9: GridLayout的使用方法import java.awt.*;import javax.swing.*;public class GridLayoutDemo JFrame f; public GridLayoutDemo(String str) f=new JFrame(str); Container c=f.getContentPane(); c.setLayout(new GridLayout(3,2); for(int i=1;i=6;i+) c.add(new JButton(i+); f.pack( ) ; f.setVisible(tru
40、e); public static void main(String args) new GridLayoutDemo(GridLayout Demo); 49编辑课件5、卡片布局管理器CardLayoutCardLayout的布局方式有点象码“扑克牌”一个组件压在另一个组件的上面,所以每次一般只能看到一个组件50编辑课件6、网格包布局GridBagLayoutGridBagLayout是AWT包中提供的最灵活、最复杂的布局管理器。GridBagLayout将组件以多行多列放置,允许指定的组件跨多行或多列。每个 GridBagLayout 对象保留一个动态的矩形单元网格,每个组件占用一个或多个
41、单元,称为它的显示区域。每个由一个网格元包布局管理的组件都与一个 GridBagConstraints的实例相关,它指定了组件在它的显示区域是如何放置的。51编辑课件使用布局管理器的基本规则(1)若组件尽量充满容器空间,可以考虑使用BorderLayout和GridBagLayout。(2)若用户需要在紧凑的一行中以组件的自然尺寸显示较少的组件,用户可以考虑用面板容纳组件,并使用面板的默认布局管理器FlowLayout。(3)若用户需要在多行或多列中显示一些同样尺寸的组件,GridLayout最适合此情况。(4)若界面较为复杂,可先使用面板来容纳组件,然后选用适当的布局管理器。52编辑课件布局
42、管理器嵌套实际上是容器的嵌套,被嵌套的容器可以具有不同的布局管理器在嵌套的布局管理器中JPanel 通常起到了 “桥”的作用53编辑课件例10:复杂GUI的布局54编辑课件例10:实现GUI的步骤分析panel1panel2panel3panel5panel4panel6panel8panel755编辑课件GUI的设计步骤先设计一个窗口,如JFrame确定布局管理器在窗口中添加所需组件增加事件处理56编辑课件8.5事件处理模型GUI是由事件(event)驱动的当用户与GUI交互可以产生事件(events)一些常见的交互方式移动鼠标用鼠标点击按钮在文本框中输入数据关闭窗口等57编辑课件事件处理!
43、用户交互事 件如:单击鼠标 如:按下/释放鼠标按钮 对象状态改变调用事件处理确定发生的事件的类型 确定生成的事件的组件 编写合适的代码处理事件 事件作用于对象。 对象识别事件并做出响应,不同的对象能识别的事件不全相同。 可以针对相应的事件编写相应的代码,在事件发生时,程序执行事件里的代码。 58编辑课件事件处理模型 源对象监听器事件 传播 事件的实例 方法 传递途径代理事件模型Swing 中的 GUI 组件适配器对象59编辑课件事件处理机制主要涉及三种对象事件源(An event source)事件对象(An event object)事件监听器(event listener(s)事件监听器A
44、事件监听器B事件对象事件对象事件源(例如: 按钮)60编辑课件事件处理机制事件源可供用户进行交互的GUI组件事件对象封装了包含所发生的各种事件的有效信息信息包括: 事件源的引用、以及事件监听器在处理事件时所需要的其它各种信息事件信息被包含在类AWTEvent或其子类的实例对象中事件监听器接受事件对象,并处理事件对象61编辑课件事件处理机制包含事件处理的程序应该包括以下四部分内容:1、引入系统事件类包,如import java.awt.event.*。2、在事件处理类的声明中指定要实现的监听器名,如: public class MyClass implements ActionListener
45、3、注册事件源对象的事件监听者,如btn.addActionListener (this)。4、实现监听器中的接口 如实现按钮事件监听接口ActionListener : public void actionPerformed(ActionEvent e) ./响应某个动作的代码. 62编辑课件事件分类与监听器接口1、事件分类 java.util.EventObjectJava.awt.AWTEventActionEventAdjustmentEventComponentEventItemEventTextEvent ContainerEventFocusEventWindowEventPai
46、ntEventInputEventMouseEventKeyEvent63编辑课件2、监听器接口对于每种类型的事件,都定义了相应的事件处理接口;XXXEvent对应的事件处理接口通常为XXXListener。 java.util.EventListenerActionListenerItemListenerWindowListenerKeyListenerMouseListenerMouseMotionListener64编辑课件事件接口及处理方法 事件描述信息接口名称方法(事件)点击按钮、点击菜单项、文本框按回车等动作ActionListeneractionPerformed(ActionE
47、vent)选择了可选项的项目,如复选框、单选按钮、下拉选项框ItemListeneritemStateChanged(ItemEvent)文本组件内容改变TextListenertextValueChanged(TextEvent)移动了滚动条等组件AdjustmentListeneradjustmentVlaueChanged(AdjustmentEvent)鼠标移动MouseMotionListenermouseDragged(MouseEvent)mouseMoved(MouseEvent)鼠标点击等MouseListenermousePressed(MouseEvent)mouseRe
48、leased(MouseEvent)mouseEntered(MouseEvent)mouseExited(MouseEvent)mouseClicked(MouseEvent)65编辑课件事件接口及处理方法(续) 描述信息接口名称方法(事件)键盘输入KeyListenerkeyPressed(KeyEvent)keyReleased(KeyEvent)keyTyped(KeyEvent)组件收到或失去焦点FocusListenerfocusGained(FocusEvent)focusLost(FocusEvent)组件移动、缩放、显示/隐藏等ComponentListenercompone
49、ntMoved(ComponentEvent)componentHidden(ComponentEvent)componentResized(ComponentEvent)componentShown(ComponentEvent)66编辑课件例11:按钮事件的示例(方法1)import java.awt.*;import java.awt.event.* ;import javax.swing.*;public class TestJButton implements ActionListener public TestJButton() JFrame f = new JFrame(Test
50、 Button Event!); Container c=f.getContentPane(); JButton b = new JButton(Press Me!); b.addActionListener(this); c.add(b, Center); f.setSize(200,100); f.setVisible(true); public void actionPerformed(ActionEvent e) System.out.println(Action occurred); System.out.println(Buttons label is:+ e.getActionC
51、ommand(); public static void main(String args ) new TestJButton(); 方法1:采用同一个类中实现事件接口的方法67编辑课件例:按钮事件的示例(方法2)import java.awt.*;import java.awt.event.* ;import javax.swing.*;public class TestJButtonDemo public TestJButtonDemo() JFrame f = new JFrame(Test Button Event!); Container c=f.getContentPane();
52、JButton b = new JButton(Press Me!); b.addActionListener(new ButtonHandler(); c.add(b, Center); f.setSize(200,100); f.setVisible(true); public static void main(String args ) new TestJButtonDemo(); 68编辑课件例11:按钮事件的示例(方法2)import java.awt.event.*;public class ButtonHandler implements ActionListenerpublic
53、 void actionPerformed(ActionEvent e) System.out.println(Action occurred); System.out.println(Buttons label is:+ e.getActionCommand(); 方法2:采用另一个类中实现事件接口的方法69编辑课件例11:按钮事件的示例(方法3)import java.awt.*;import java.awt.event.* ;import javax.swing.*;public class TestInnerButtonDemo public TestInnerButtonDemo(
54、) JFrame f = new JFrame(Test Button Event!); Container c=f.getContentPane(); JButton b = new JButton(Press Me!); b.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) System.out.println(Action occurred); System.out.println(Buttons label is:+ e.getActionCommand(); ); c.a
55、dd(b, Center); f.setSize(200,100); f.setVisible(true); public static void main(String args ) new TestInnerButtonDemo(); 方法3:采用匿名内部类实现事件接口的方法70编辑课件如何监听多个组件事件?例12:编写一个允许学生在文本字段中输入一个数的程序。创建一个每当用户单击一次就将此数加一的按钮。创建另一个每当用户单击一次就将此数减一的按钮。 界面效果如下图所示。71编辑课件import java.awt.*;import java.awt.event.*;import javax
56、.swing.*;class Incrementor implements ActionListener JTextField numberTxf; JButton incrementBtn,decrementBtn; public void makeGUI() JFrame frm = new JFrame(Incrementor); Container c=frm.getContentPane(); c.setLayout(new FlowLayout(); numberTxf = new JTextField(0,5); c.add(numberTxf); incrementBtn =
57、new JButton(Increment); c.add(incrementBtn); incrementBtn.addActionListener(this); decrementBtn= new JButton(Decrement); c.add(decrementBtn); decrementBtn.addActionListener(this); frm.setSize(300,100); frm.setVisible(true); 72编辑课件public void actionPerformed(ActionEvent e) int oldNum = Integer.parseI
58、nt(numberTxf.getText(); int newNum = oldNum; if (e.getActionCommand().equals(Increment) newNum+; else if (e.getActionCommand().equals(Decrement) newNum-; numberTxf.setText(String.valueOf(newNum); public static void main(String args) Incrementor i = new Incrementor(); i.makeGUI(); if(e.getSource()=in
59、crementBtn)else if(e.getSource()=decrementBtn)73编辑课件选项事件ItemEvent的处理可触发选项事件的组件有: JCheckBox,JRadioButton,JComboBox注册事件的方法: public void addItemListener(ItemListener e)处理事件的接口ItemListener,仅含有方法: public void itemStateChanged(ItemEvent e)74编辑课件例:选项事件ItemEvent的处理例子用JComboBox和JCheckBox来演示可选项目事件接口,界面如下图所示:7
60、5编辑课件import java.awt.*;import java.awt.event.* ;import javax.swing.*;public class ItemDemo implements ItemListener JFrame f; JPanel p1,p2,p3; JLabel birthPlace,hobby; JComboBox place; JCheckBox hobby1,hobby2,hobby3; public ItemDemo(String title) f=new JFrame(title); p1=new JPanel(); birthPlace=new J
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 支撑钢管桩施工方案(3篇)
- 无线对讲频道施工方案(3篇)
- 杆线拆迁施工方案(3篇)
- 模板施工方案编制顺序(3篇)
- 汽车浸漆施工方案(3篇)
- 海岛体验活动策划方案(3篇)
- 灯具门店活动策划方案(3篇)
- 空调电线改造施工方案(3篇)
- 线下活动拍摄方案策划(3篇)
- 胶带机施工方案(3篇)
- 2026中国铁路兰州局集团有限公司招聘普通高校毕业生113人(三)笔试备考题库及答案解析
- 2026年大学生志愿服务西部计划考试题库及详细答案
- 国家义务教育质量监测八年级德育模拟试卷
- 楼顶发光字安装施工方案
- 储能项目epc总承包合同样本合同三篇
- 国企新闻宣传岗位笔试题(附答案)
- 雨课堂学堂在线学堂云《运动训练基本原理与方法(北京体育大学 )》单元测试考核答案
- 潍坊护理职业学院辅导员考试题库
- 美容整形医院行政管理制度汇编
- 剪纸与折纸活动记录表(共3页)
- 唐钢钢材材质单(共2页)
评论
0/150
提交评论