




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、案例7:使用Swing實(shí)現(xiàn)學(xué)生成績查詢系統(tǒng)基本功能,包括用戶登錄、教師成績輸入與統(tǒng)計(jì)和學(xué)生成績查詢。,涉及知識點(diǎn),1、容器組件2、基本組件3、布局管理器4、事件處理模型5、高級圖像用戶界面,7.1容器組件,JFrameJPanelJScrollPane,1、JFrame(框架),類JFrame是java.awt.Frame的子類在Swing的組件中,JFrame并不全是由Java編寫的是一種與平臺(tái)關(guān)系比較密切的組件(Heavyweightcomponent)java.lang.Object|+-java.awt.Component|+-java.awt.Container|+-java.awt
2、.Window|+-java.awt.Frame|+-javax.swing.JFrame,例1:基于AWT實(shí)現(xiàn)的框架界面,importjava.awt.*;publicclassFrameDemoFramef;Buttonb;publicFrameDemo()f=newFrame(FrameDemo);b=newButton(Pressme);f.add(b);f.setSize(200,200);f.setVisible(true);publicstaticvoidmain(Stringargs)newFrameDemo();,例2:基于Swing實(shí)現(xiàn)的框架界面,importjava.aw
3、t.*;importjavax.swing.*;publicclassJFrameDemoJFramef;JButtonb;Containerc;publicJFrameDemo()f=newJFrame(JFrameDemo);b=newJButton(Pressme);c=f.getContentPane();c.add(b);f.setSize(200,200);f.setVisible(true);publicstaticvoidmain(Stringargs)newJFrameDemo();,在JFrame中加入組件的方法,1)用getContentPane()方法獲得JFrame的
4、內(nèi)容面板,再對其加入組件:Containerc=frame.getContentPane()c.add(childComponent)2)建立一個(gè)JPanel或JDesktopPane之類的中間容器,把組件添加到容器中,用setContentPane()方法把該容器置為JFrame的內(nèi)容面板:JPanelcontentPane=newJPanel();/把其它組件添加到Jpanel中;frame.setContentPane(contentPane);/把contentPane對象設(shè)置成為frame的內(nèi)容面板,2、JPanel(面板),一種中間容器,用來組成其它組件可以添加各種組件(包括面板組
5、件)面板(JPanel)的大小由它所包含的組件決定當(dāng)組件個(gè)數(shù)增加,面板(JPanel)也會(huì)隨之而增大,例3:利用JPanel創(chuàng)建界面,importjava.awt.*;importjavax.swing.*;publicclassJPanelDemoextendsJFramepublicJPanelgetGUI()JPanelp=newJPanel();p.add(newJButton(Pressme);returnp;publicJPanelDemo()super(JPanelDemo);setContentPane(getGUI();setSize(200,200);setVisible(
6、true);publicstaticvoidmain(Stringargs)newJPanelDemo();,importjava.awt.*;importjavax.swing.*;publicclassJPanelDemoextendsJFramepublicJPanelgetGUI()JPanelp=newJPanel();p.add(newJButton(Pressme);returnp;publicstaticvoidmain(Stringargs)JPanelDemojp=newJPanelDemo();jp.setTitle(JPanelDemo);jp.setDefaultCl
7、oseOperation(JFrame.EXIT_ON_CLOSE);jp.setContentPane(jp.getGUI();jp.setSize(200,200);jp.setVisible(true);,3、Swing的組件,在javax.swing包中,定義了兩種類型的組件:容器和組件。容器各種組件必須放在容器容器本身也是一種組件分類頂層容器,如JFrame,JApplet,JDialog和JWindow其它容器,如JPanel,JScrollPane,JSplitPane,JToolBar組件基本控制組件,如JButton,JComboBox,JList,JMenu,JSlider
8、,JTextField不可編輯的信息顯示組件,如JLabel,JProgressBar,JToolTip可編輯的信息顯示組件,如JColorChooser,JFileChooser,JTable,JTextArea,4、Swing的類層次結(jié)構(gòu),Swing的類層次結(jié)構(gòu)java.awt.Component|java.awt.Containerjava.awt.Windowjava.awt.Framejavax.swing.JFramejavax.Dialogjavax.swing.JDialogjavax.swing.JWindowjava.awt.Applet-javax.swing.JAppl
9、etjavax.swing.Boxjavax.swing.JComponet,7.2基本組件,標(biāo)簽(JLabel)文本框(JTextField)按鈕(JButton)組合框(JComboBox)文本(JTextArea)列表JList(單選列表和多選列表),1、標(biāo)簽(JLabel),標(biāo)簽為GUI提供文本(主要)或圖像(也可以)信息對應(yīng)類(JLabel)(JComponent的子類)可以顯示:單行的只讀的文本信息圖像同時(shí)顯示文本與圖像信息程序一般不修改標(biāo)簽的內(nèi)容,例4:JLabel的演示例子,importjava.awt.Container;importjava.awt.FlowLayout;i
10、mportjavax.swing.ImageIcon;importjavax.swing.JFrame;importjavax.swing.JLabel;publicclassJLabelDemoextendsJFramepublicJLabelDemo()super(框架和標(biāo)簽例程);Strings=文本標(biāo)簽,文字在圖標(biāo)的左側(cè),文字在圖標(biāo)的下方;ImageIconic=null,newImageIcon(img1.gif),newImageIcon(img2.gif);intih=0,JLabel.LEFT,JLabel.CENTER;intiv=0,JLabel.CENTER,JLabel
11、.BOTTOM;Containerc=getContentPane();c.setLayout(newFlowLayout(FlowLayout.LEFT);,例4:JLabel的演示例子(續(xù)),for(inti=0;i0)aLabel.setHorizontalTextPosition(ihi);aLabel.setVerticalTextPosition(ivi);aLabel.setToolTipText(第+(i+1)+個(gè)標(biāo)簽);c.add(aLabel);publicstaticvoidmain(Stringargs)JLabelDemoapp=newJLabelDemo();app
12、.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);app.setSize(360,150);app.setVisible(true);,2、文本框(JTextField),顯示單行的文本信息JTextFieldextendsJTextComponent密碼輸入框JPasswordField,例5:JTextField的演示例子,importjava.awt.Container;importjava.awt.FlowLayout;importjavax.swing.JFrame;importjavax.swing.JPasswordField;imp
13、ortjavax.swing.JTextField;publicclassJTextFieldDemopublicstaticvoidmain(Stringargs)JFrameapp=newJFrame(文本編輯框例程);app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);app.setSize(320,120);Containerc=app.getContentPane();c.setLayout(newFlowLayout();JTextFieldt=newJTextField(正常文本:,8),newJTextField(顯示,15),
14、newJTextField(密碼文本:,8),newJPasswordField(隱藏,15);t0.setEditable(false);t2.setEditable(false);for(inti=0;i4;i+)c.add(ti);app.setVisible(true);,3、按鈕(JButton),當(dāng)鼠標(biāo)左鍵單擊按鈕組件時(shí),能觸發(fā)特定的事件在Java中,廣義的按鈕包括:命令式按鈕(JButton)復(fù)選框(JCheckBox)單選按鈕(JRadioButton),按鈕類的層次結(jié)構(gòu),Containerc=getContentPane();c.setLayout(newFlowLayout
15、();inti;ImageIconic=newImageIcon(left.gif),newImageIcon(right.gif);JButtonb=newJButton(左,ic0),newJButton(中間),newJButton(右,ic1);for(i=0;ib.length;i+)c.add(bi);JCheckBoxck=newJCheckBox(左),newJCheckBox(右);for(i=0;ick.length;i+)c.add(cki);cki.setSelected(true);JRadioButtonr=newJRadioButton(左),newJRadioB
16、utton(右);ButtonGrouprg=newButtonGroup();for(i=0;ir.length;i+)c.add(ri);rg.add(ri);r0.setSelected(true);r1.setSelected(false);,4、組合框(JComboBox),組合框(JComboBox)可以從下拉式的列表框中選取其中的列表項(xiàng)有時(shí)也稱為下拉框(drop-downlist)類JComboBox中的方法getSelectedIndex()返回當(dāng)前被選中的項(xiàng)setMaximumRowCount(n)設(shè)置最多顯示列表項(xiàng)的項(xiàng)數(shù)滾動(dòng)條(Scrollbar)會(huì)自動(dòng)加上,5、文本(JT
17、extArea),JTextArea是一個(gè)顯示純文本的多行區(qū)域。JTextArea不管理滾動(dòng),可把它放置在JScrollPane的ViewPort中實(shí)現(xiàn)滾動(dòng),如:JTextAreatextArea=newJTextArea();JScrollPanearea=newJScrollPane(textArea);TextArea具有換行能力,JTextArea默認(rèn)為不換行,需設(shè)置換行策略,如:textArea.setLineWrap(true);textArea.setWrapStyleWord(true);,JTextArea的代碼段,/建立容納文本區(qū)的面板JPaneltextPanel=new
18、JPanel();/新建無回繞的文本區(qū),行數(shù)為5,列數(shù)為20noWrapArea=newJTextArea(nowrap,5,20);/新建有回繞的文本區(qū),行數(shù)為5,列數(shù)為20wrapArea=newJTextArea(wraparea,5,20);wrapArea.setLineWrap(true);/新建帶滾動(dòng)條的文本區(qū),行數(shù)為5,列數(shù)為20scrollArea=newJTextArea(scrollarea,5,20);/將文本區(qū)插入到滾動(dòng)窗格中JScrollPanescrollPane=newJScrollPane(scrollArea);textPanel.add(noWrapAre
19、a);textPanel.add(wrapArea);/將滾動(dòng)窗格加入到框架中textPanel.add(scrollPane);,6、列表JList,JList顯示出一系列選項(xiàng),用戶可以從中選擇一個(gè)或多項(xiàng)。StringcolorNames=“Black”,“Blue”,“Cyan”,“DarkGray”,“Gray“;colorList=newJList(colorNames);colorList.setVisibleRowCount(5);colorList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);colorList.ge
20、tSelectedIndex();colorList.getSelectedValue();,多選列表,在JList中選擇多個(gè)選項(xiàng),方法是按住shift鍵或ctrl鍵。多選列表沒有和多個(gè)選擇相關(guān)的事件。通常由另一個(gè)GUI組件生成的事件(外部事件)來指定處理JList中的多個(gè)選擇。,多選列表的使用方法,StringcolorNames=“Black”,“Blue”,“Cyan”,“DarkGray”,“Gray“;JListcolorList=newJList(colorNames);colorList.setVisibleRowCount(5);colorList.setFixedCellHe
21、ight(15);colorList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);colorList.getSelectedValues(),7.3布局管理器,用來控制組件在容器中的布局方式應(yīng)當(dāng)盡量利用已有的基本布局方式布局管理器處理組件布局的大部分細(xì)節(jié),布局管理器,流式布局FlowLayout邊界布局BorderLayout盒式布局管理器BoxLayout網(wǎng)格布局GridLayout卡片布局CardLayout,1、流式布局FlowLayout,是一種最基本的布局管理器是java.awt.Applet、ja
22、va.awt.Panel和javax.swing.JPanel的默認(rèn)布局方式在容器中,從左到右依次放置GUI組件當(dāng)組件排到容器一行的末尾時(shí),則從下一行開始接著排列組件每行組件的對齊方式可以是:左對齊、中間(默認(rèn)對齊方式)和右對齊,FlowLayout的構(gòu)造方法,publicFlowLayout()publicFlowLayout(intalignment)publicFlowLayout(intalignment,inthorizontalGap,intverticalGap)alignment參數(shù)的值必須是FlowLayout.LEFT、Flowlayout.CENTER或FlowLayou
23、t.RIGHT。horizontalGap和verticalGap參數(shù)指定了組件間隔距離(以像素為單位)。FlowLayout的默認(rèn)間隔值為5。,例6:FlowLayout的使用方法,importjava.awt.*;importjavax.swing.*;publicclassFlowLayoutDemoextendsJFramepublicFlowLayoutDemo()Containerc=getContentPane();c.setLayout(newFlowLayout();c.add(newJLabel(Buttons:);c.add(newJButton(Button1);c.a
24、dd(newJButton(2);c.add(newJButton(Button3);c.add(newJButton(Long-NamedButton4);c.add(newJButton(Button5);publicstaticvoidmain(Stringargs)FlowLayoutDemowindow=newFlowLayoutDemo();window.setTitle(FlowLayoutDemo);window.pack();/窗口大小設(shè)置為適合組件最佳尺寸與布局所需的空間window.setVisible(true);,2、邊界布局BorderLayout,是容器JFram
25、e和JApplet的默認(rèn)布局方式將容器分成五個(gè)區(qū)域,NORTH(頂部)SOUTH(底部)WEST(左側(cè))EAST(右側(cè))CENTER(中間)每個(gè)區(qū)域最多只能1個(gè)組件,BorderLayout的方法,構(gòu)造方法:BorderLayout()構(gòu)造一個(gè)組件之間沒有間距的新邊界布局。BorderLayout(inthgap,intvgap)用指定的組件之間的水平間距構(gòu)造一個(gè)邊界布局。將組件添加到BorderLayout布局的容器中的方法add(newButton(South),BorderLayout.SOUTH);add(newButton(South),South);add(South,newBut
26、ton(South);,例7:BorderLayout的使用方法,importjava.awt.*;importjavax.swing.*;publicclassBorderLayoutDemoextendsJFramepublicBorderLayoutDemo()Containerc=getContentPane();c.setLayout(newBorderLayout(5,5);c.add(newJButton(North),North);c.add(newJButton(South),South);/c.add(South,newButton(South);/c.add(newBut
27、ton(South),BorderLayout.SOUTH);c.add(newJButton(East),East);c.add(newJButton(West),West);c.add(newJButton(Center),Center);publicstaticvoidmain(Stringargs)BorderLayoutDemowindow=newBorderLayoutDemo();window.setTitle(BorderLayoutDemo);window.pack();window.setVisible(true);,3、盒式布局管理器BoxLayout,允許多個(gè)組件在容器
28、中沿水平方向或豎直方向排列容器的大小發(fā)生變化時(shí),組件占用的空間不會(huì)發(fā)生變化,BoxLayout的方法,構(gòu)造方法:BoxLayout(Containertarget,intaxis)創(chuàng)建一個(gè)將沿給定軸放置組件的布局管理器。軸的方向:BoxLayout.X_AXIS:指定組件應(yīng)該從左到右放置BoxLayout.Y_AXIS:指定組件應(yīng)該從上到下放置,例8:BoxLayout使用的例子,importjava.awt.Container;importjavax.swing.BoxLayout;importjavax.swing.JButton;importjavax.swing.JFrame;publ
29、icclassBoxLayoutDemopublicstaticvoidmain(Stringargs)JFrameapp=newJFrame(盒式布局管理器例程);app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);app.setSize(220,130);Containerc=app.getContentPane();c.setLayout(newBoxLayout(c,BoxLayout.X_AXIS);Strings;JButtonb;for(inti=0;i3;i+)s=按鈕+(i+1);b=newJButton(s);c.add(b
30、);app.setVisible(true);,4、網(wǎng)格布局GridLayout,布局管理器GridLayout按行與列將容器等分成網(wǎng)格每個(gè)組件占用具有相同寬度和高度的網(wǎng)格添加組件占用網(wǎng)格的順序:從上到下,從左到右當(dāng)一行滿了,則繼續(xù)到下一行,仍然是從左到右,GridLayout類的構(gòu)造方法,GridLayout()創(chuàng)建默認(rèn)值的網(wǎng)格布局,即每個(gè)組件占據(jù)一行一列。GridLayout(introws,intcols)創(chuàng)建具有指定行數(shù)和列數(shù)的網(wǎng)格布局GridLayout(introws,intcols,inthgap,intvgap)創(chuàng)建具有指定行數(shù)和列數(shù)的網(wǎng)格布局。,例9:GridLayout的使
31、用方法,importjava.awt.*;importjavax.swing.*;publicclassGridLayoutDemoJFramef;publicGridLayoutDemo(Stringstr)f=newJFrame(str);Containerc=f.getContentPane();c.setLayout(newGridLayout(3,2);for(inti=1;i=6;i+)c.add(newJButton(i+);f.pack();f.setVisible(true);publicstaticvoidmain(Stringargs)newGridLayoutDemo(
32、GridLayoutDemo);,5、卡片布局管理器CardLayout,CardLayout的布局方式有點(diǎn)象碼“撲克牌”一個(gè)組件壓在另一個(gè)組件的上面,所以每次一般只能看到一個(gè)組件,布局管理器嵌套,實(shí)際上是容器的嵌套,被嵌套的容器可以具有不同的布局管理器在嵌套的布局管理器中JPanel通常起到了“橋”的作用,例10:復(fù)雜GUI的布局,例10:實(shí)現(xiàn)GUI的步驟分析,GUI的設(shè)計(jì)步驟,先設(shè)計(jì)一個(gè)窗口,如JFrame確定布局管理器在窗口中添加所需組件增加事件處理,7.4事件處理模型,GUI是由事件(event)驅(qū)動(dòng)的當(dāng)用戶與GUI交互可以產(chǎn)生事件(events)一些常見的交互方式移動(dòng)鼠標(biāo)用鼠標(biāo)點(diǎn)擊按
33、鈕在文本框中輸入數(shù)據(jù)關(guān)閉窗口等,事件處理機(jī)制,主要涉及三種對象事件源(Aneventsource)事件對象(Aneventobject)事件監(jiān)聽器(eventlistener(s),事件處理機(jī)制,事件源可供用戶進(jìn)行交互的GUI組件事件對象封裝了包含所發(fā)生的各種事件的有效信息信息包括:事件源的引用、以及事件監(jiān)聽器在處理事件時(shí)所需要的其它各種信息事件信息被包含在類AWTEvent或其子類的實(shí)例對象中事件監(jiān)聽器接受事件對象,并處理事件對象,事件處理機(jī)制,包含事件處理的程序應(yīng)該包括以下四部分內(nèi)容:1、引入系統(tǒng)事件類包,如importjava.awt.event.*。2、在事件處理類的聲明中指定要實(shí)現(xiàn)的
34、監(jiān)聽器名,如:publicclassMyClassimplementsActionListener3、注冊事件源對象的事件監(jiān)聽者,如btn.addActionListener(this)。4、實(shí)現(xiàn)監(jiān)聽器中的接口如實(shí)現(xiàn)按鈕事件監(jiān)聽接口ActionListener:publicvoidactionPerformed(ActionEvente)./響應(yīng)某個(gè)動(dòng)作的代碼.,事件分類與監(jiān)聽器接口,1、事件分類,java.util.EventObject,Java.awt.AWTEvent,ActionEventAdjustmentEventComponentEventItemEventTextEvent,
35、ContainerEventFocusEventWindowEventPaintEventInputEvent,MouseEvent,KeyEvent,2、監(jiān)聽器接口,對于每種類型的事件,都定義了相應(yīng)的事件處理接口;XXXEvent對應(yīng)的事件處理接口通常為XXXListener。,java.util.EventListener,ActionListenerItemListenerWindowListenerKeyListenerMouseListenerMouseMotionListener,事件接口及處理方法,事件接口及處理方法(續(xù)),例11:按鈕事件的示例(方法1),importjava.
36、awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassTestJButtonimplementsActionListenerpublicTestJButton()JFramef=newJFrame(TestButtonEvent!);Containerc=f.getContentPane();JButtonb=newJButton(PressMe!);b.addActionListener(this);c.add(b,Center);f.setSize(200,100);f.setVisible(true);publicvoid
37、actionPerformed(ActionEvente)System.out.println(Actionoccurred);System.out.println(Buttonslabelis:+e.getActionCommand();publicstaticvoidmain(Stringargs)newTestJButton();,方法1:采用同一個(gè)類中實(shí)現(xiàn)事件接口的方法,例:按鈕事件的示例(方法2),importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassTestJButtonDemopublicTe
38、stJButtonDemo()JFramef=newJFrame(TestButtonEvent!);Containerc=f.getContentPane();JButtonb=newJButton(PressMe!);b.addActionListener(newButtonHandler();c.add(b,Center);f.setSize(200,100);f.setVisible(true);publicstaticvoidmain(Stringargs)newTestJButtonDemo();,例11:按鈕事件的示例(方法2),importjava.awt.event.*;pu
39、blicclassButtonHandlerimplementsActionListenerpublicvoidactionPerformed(ActionEvente)System.out.println(Actionoccurred);System.out.println(Buttonslabelis:+e.getActionCommand();,方法2:采用另一個(gè)類中實(shí)現(xiàn)事件接口的方法,例11:按鈕事件的示例(方法3),importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassTestInnerButto
40、nDemopublicTestInnerButtonDemo()JFramef=newJFrame(TestButtonEvent!);Containerc=f.getContentPane();JButtonb=newJButton(PressMe!);b.addActionListener(newActionListener()publicvoidactionPerformed(ActionEvente)System.out.println(Actionoccurred);System.out.println(Buttonslabelis:+e.getActionCommand(););c
41、.add(b,Center);f.setSize(200,100);f.setVisible(true);publicstaticvoidmain(Stringargs)newTestInnerButtonDemo();,方法3:采用匿名內(nèi)部類實(shí)現(xiàn)事件接口的方法,如何監(jiān)聽多個(gè)組件事件?,例12:編寫一個(gè)允許學(xué)生在文本字段中輸入一個(gè)數(shù)的程序。創(chuàng)建一個(gè)每當(dāng)用戶單擊一次就將此數(shù)加一的按鈕。創(chuàng)建另一個(gè)每當(dāng)用戶單擊一次就將此數(shù)減一的按鈕。界面效果如下圖所示。,importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;classIncremen
42、torimplementsActionListenerJTextFieldnumberTxf;JButtonincrementBtn,decrementBtn;publicvoidmakeGUI()JFramefrm=newJFrame(Incrementor);Containerc=frm.getContentPane();c.setLayout(newFlowLayout();numberTxf=newJTextField(0,5);c.add(numberTxf);incrementBtn=newJButton(Increment);c.add(incrementBtn);increme
43、ntBtn.addActionListener(this);decrementBtn=newJButton(Decrement);c.add(decrementBtn);decrementBtn.addActionListener(this);frm.setSize(300,100);frm.setVisible(true);,publicvoidactionPerformed(ActionEvente)intoldNum=Integer.parseInt(numberTxf.getText();intnewNum=oldNum;if(e.getActionCommand().equals(I
44、ncrement)newNum+;elseif(e.getActionCommand().equals(Decrement)newNum-;numberTxf.setText(String.valueOf(newNum);publicstaticvoidmain(Stringargs)Incrementori=newIncrementor();i.makeGUI();,if(e.getSource()=incrementBtn),elseif(e.getSource()=decrementBtn),選項(xiàng)事件ItemEvent的處理,可觸發(fā)選項(xiàng)事件的組件有:JCheckBox,JRadioBut
45、ton,JComboBox注冊事件的方法:publicvoidaddItemListener(ItemListenere)處理事件的接口ItemListener,僅含有方法:publicvoiditemStateChanged(ItemEvente),例:選項(xiàng)事件ItemEvent的處理例子,用JComboBox和JCheckBox來演示可選項(xiàng)目事件接口,界面如下圖所示:,importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassItemDemoimplementsItemListenerJFramef;JPa
46、nelp1,p2,p3;JLabelbirthPlace,hobby;JComboBoxplace;JCheckBoxhobby1,hobby2,hobby3;publicItemDemo(Stringtitle)f=newJFrame(title);p1=newJPanel();birthPlace=newJLabel(出生地:);place=newJComboBox();place.addItemListener(this);place.addItem(杭州);place.addItem(寧波);place.addItem(溫州);place.addItem(紹興);p1.add(birt
47、hPlace);p1.add(place);f.add(p1,North);,p2=newJPanel();p2.setLayout(newGridLayout(3,1);hobby=newJLabel(業(yè)余愛好:);hobby1=newJCheckBox(運(yùn)動(dòng));hobby1.addItemListener(this);hobby2=newJCheckBox(旅游);hobby2.addItemListener(this);hobby3=newJCheckBox(上網(wǎng));hobby3.addItemListener(this);p2.add(hobby1);p2.add(hobby2);p2
48、.add(hobby3);p3=newJPanel();p3.add(hobby);p3.add(p2);f.add(p3,Center);f.pack();f.setVisible(true);,publicvoiditemStateChanged(ItemEvente)if(e.getSource()=place,鼠標(biāo)事件處理,鼠標(biāo)事件的監(jiān)聽器有鼠標(biāo)事件監(jiān)聽器(MouseListener)、鼠標(biāo)移動(dòng)事件監(jiān)聽器(MouseMotionListener)和鼠標(biāo)滾輪事件監(jiān)聽器(MouseWheelListener)鼠標(biāo)事件對應(yīng)的類是MouseEvent,其中定義了以下一些常量和方法:MOUSE_
49、PRESSED鼠標(biāo)按下MOUSE_CLICKED鼠標(biāo)單擊MOUSE_RELEASED鼠標(biāo)松開MOUSE_ENTERED鼠標(biāo)進(jìn)入有鼠標(biāo)事件監(jiān)聽的容器MOUSE_EXITED鼠標(biāo)離開有鼠標(biāo)事件監(jiān)聽的容器getX()取得鼠標(biāo)的X坐標(biāo)getY()取得鼠標(biāo)的Y坐標(biāo)getClickCount()取得鼠標(biāo)連續(xù)單擊的次數(shù),例13:顯示鼠標(biāo)當(dāng)前的位置,importjava.awt.event.MouseEvent;importjava.awt.event.MouseListener;importjava.awt.event.MouseMotionListener;importjava.awt.Graphics;
50、importjava.awt.BorderLayout;importjava.awt.Container;importjavax.swing.JPanel;importjavax.swing.JFrame;classMousePanelextendsJPanelintx_pos,y_pos;MousePanel()addMouseListener(newMouseListener()publicvoidmouseClicked(MouseEvente)publicvoidmouseEntered(MouseEvente)publicvoidmouseExited(MouseEvente)pub
51、licvoidmousePressed(MouseEvente)x_pos=e.getX();y_pos=e.getY();repaint();publicvoidmouseReleased(MouseEvente);,addMouseMotionListener(newMouseMotionListener()publicvoidmouseMoved(MouseEvente)x_pos=e.getX();y_pos=e.getY();repaint();publicvoidmouseDragged(MouseEvente);protectedvoidpaintComponent(Graphi
52、csg)super.paintComponent(g);g.drawString(當(dāng)前位置:+x_pos+,+y_pos+,x_pos,y_pos);publicclassMouseDemoextendsJFramepublicMouseDemo()super(鼠標(biāo)位置);Containerc=getContentPane();c.add(newMousePanel(),BorderLayout.CENTER);publicstaticvoidmain(Stringargs)MouseDemoapp=newMouseDemo();app.setDefaultCloseOperation(JFr
53、ame.EXIT_ON_CLOSE);app.setSize(270,150);app.setVisible(true);,事件適配器類,Java中為那些具有多個(gè)方法的監(jiān)聽者接口提供了事件適配器類,這個(gè)類通常命名為XxxAdapter,在該類中以空方法體實(shí)現(xiàn)了相應(yīng)接口的所有方法;可通過繼承適配器類來編寫監(jiān)聽者類,在類中只需給出關(guān)心的方法,從而減輕工作量。,事件接口與適配器類,事件接口與方法目錄,例13代碼修改,addMouseListener(newMouseAdapter()publicvoidmousePressed(MouseEvente)x_pos=e.getX();y_pos=e.g
54、etY();repaint();publicvoidmouseReleased(MouseEvente);addMouseMotionListener(newMouseMotionAdapter()publicvoidmouseMoved(MouseEvente)x_pos=e.getX();y_pos=e.getY();repaint(););,鍵盤事件,鍵盤事件的監(jiān)聽者對應(yīng)的接口為KeyListener,適配器為KeyAdapter鍵盤事件對應(yīng)的類是KeyEvent,其中定義了以下一些常量和方法:KEY_PRESSED:“按下鍵”事件。KEY_RELEASED:“釋放鍵”事件。KEY_TY
55、PED:“鍵入鍵”事件。VK_*:代表鍵盤功能鍵chargetKeyChar()返回與此事件中的鍵相關(guān)聯(lián)的字符。intgetKeyCode()返回與此事件中的鍵相關(guān)聯(lián)的整數(shù)keyCode。IntgetKeyLocation()返回產(chǎn)生此按鍵事件的鍵位置staticStringgetKeyModifiersText(intmodifiers)返回描述組合鍵的String,如“Shift”或“Ctrl+Shift”。staticStringgetKeyText(intkeyCode)返回描述keyCode的String,如“HOME”、“F1”或“A”。,例14:鍵盤事件的例子,importjav
56、a.awt.BorderLayout;importjava.awt.Container;importjava.awt.event.FocusEvent;importjava.awt.event.FocusListener;importjava.awt.event.KeyAdapter;importjava.awt.event.KeyEvent;importjavax.swing.JFrame;importjavax.swing.JTextField;publicclassKeyboardDemoextendsJFramepublicKeyboardDemo()super(鍵盤事件處理例程);C
57、ontainerc=getContentPane();JTextFieldtf=newJTextField(,15);tf.addFocusListener(newFocusListener()publicvoidfocusGained(FocusEvente)System.out.println(獲得焦點(diǎn));publicvoidfocusLost(FocusEvente)System.out.println(失去焦點(diǎn)););,tf.addKeyListener(newKeyAdapter()publicvoidkeyTyped(KeyEvente)System.out.println(鍵盤事件:+e.getKeyChar(););c.add(tf,BorderLayout.CENTER);publicstaticvoidmain(Stringargs)KeyboardDemoapp=newKeyboardDemo();app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);app.setSize(350,80);app.setVisible(true);,7.5高級圖像用戶界面,7.5.1菜單7.5.2表格,7.5.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 城鎮(zhèn)污水管網(wǎng)建設(shè)項(xiàng)目建設(shè)管理方案(參考)
- xx河流排水防澇設(shè)施建設(shè)項(xiàng)目質(zhì)量管理方案(參考范文)
- 2025年非離子型纖維素醚項(xiàng)目合作計(jì)劃書
- 憲法知識學(xué)習(xí)題庫
- 2025年天貓養(yǎng)車項(xiàng)目發(fā)展計(jì)劃
- 下關(guān)穴治療疼痛的現(xiàn)代技術(shù)融合
- 無人駕駛電動(dòng)拖拉機(jī)平臺(tái)的設(shè)計(jì)及試驗(yàn)
- 現(xiàn)代泌尿腫瘤學(xué)閱讀筆記
- 2025年GPS高空探測系統(tǒng)項(xiàng)目發(fā)展計(jì)劃
- 文化旅游的發(fā)展
- 小學(xué)二年級升三年級語文暑假作業(yè)專項(xiàng)練習(xí)
- 貴州省遵義市2024-2025學(xué)年高二下學(xué)期期末語文試題
- 專利執(zhí)法考試試題及答案
- 拍賣公司員工培訓(xùn)考核管理制度
- 廣東省行業(yè)企業(yè)職業(yè)技能競賽技術(shù)工作指引
- 浙江2025年6月高一學(xué)考模擬歷史試題及答案
- 2025年 杭州市蕭山區(qū)衛(wèi)健系統(tǒng)事業(yè)單位工作人員招聘考試筆試試卷附答案
- 2025年計(jì)算機(jī)程序設(shè)計(jì)考試試卷及答案
- 2025年河南省中考數(shù)學(xué)真題含答案
- 人力中介公司管理制度
- 抗精神病藥氯丙嗪講課件
評論
0/150
提交評論