版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1第9章GUI圖形用戶界面9.1Swing概述9.2Swing容器9.3常用Swing組件9.4GUI布局管理器9.5事件處理模型教學目標了解Swing的體系結構及相關概念。掌握Swing組件的特性和分類,了解使用Swing開發(fā)GUI程序的步驟。掌握常用容器的分類,一般掌握容器JFrame和JPanel的構造方法和常用方法。掌握常用Swing組件的構造方法和常用方法。了解GUI布局管理器的分類,以及各種布局管理器的特點。了解事件處理模型的根本概念,一般掌握事件處理的根本步驟。教學重點與Swing有關的根本概念Swing容器、Swing組件和布局管理器的使用方法使用Swing組件創(chuàng)立用戶界面的過程事件處理模型有關知識59.1Swing概述Java語言提供兩個處理圖形用戶界面的類庫:java.awt包:AbstractWindowToolKit——抽象窗口工具包java.swing包:在AWT根底上構建的一套新的圖形界面系統(tǒng)Awt與Swing的區(qū)別:〔1〕AwtJava處理圖形用戶界面的初始途徑。重量級組件,把圖形元素的創(chuàng)立和行為交給目標平臺上的本地GUI工具箱進行處理。理論上“一次編寫,隨處運行”。實際上“一次編寫,隨處調試”?!?〕Swing:是JFC〔FoundationClasses〕的一局部,輕量級組件,顯示界面與本機OS無關,100%的純Java實現。69.1Swing概述圖9-1
Swing的體系結構79.1Swing概述GUI設計三個概念:組件〔Component〕:是Java的圖形用戶界面的最根本組成局部容器〔Container〕:是Component的子類,因此容器本身也是一個組件布局管理器〔LayoutManager〕:每個容器都有一個布局管理器,當容器需要對某個組件進行定位或判斷其大小尺寸時,就會調用其對應的布局管理器。8java.lang.Objectjava.awt.Componentjava.awt.Containerjava.awt.Paneljava.awt.Windowjava.applet.AppletJAppletjavax.swing.JComponentjava.awt.Dialogjava.awt.FrameJDialogJFrameJWindowSwing組件注意:Component類是一個抽象類,不能直接使用。9JComponentJColorChooserJFileChooserJInternalFrameJLayeredPaneJOptionPaneJProgramBarJRootPaneJSeparatorJSliderJTabbedPaneJPopupMenu.SeparatorJToolBar.SeparatorJDesktopPaneJSplitPaneJTableJToolBarJToolTipJTreeJViewPort圖
Swing比AWT增加的組件109.1Swing概述Swing組件的特性〔1〕MVC〔Model-View-Controller〕體系結構〔2〕可存取性支持〔3〕支持鍵盤操作〔4〕設置邊框〔5〕使用圖標〔Icon〕119.1Swing概述Swing組件的分類〔1〕頂層容器:JFrame,JApplet,JDialog,JWindow共4個?!?〕中間容器:JPanel,JScrollPane,JSplitPane,JToolBar等?!?〕特殊容器:在GUI上起特殊作用的中間層,如JInternalJFrame,JLayeredPane,JRootPane等。〔4〕根本控件:實現人機交互的組件,如Jbutton,JComboBox,JList,JMenu,JSlider,JTextField等?!?〕不可編輯信息的顯示:向用戶顯示不可編輯信息的組件,例如JLabel,JProgressBar,ToolTip等?!?〕可編輯信息的顯示:向用戶顯示能被編輯的格式化信息的組件,如JColorChooser,JFileChoose,JFileChooser,JTable,JTextArea等。129.1Swing概述使用Swing的根本規(guī)那么Swing組件不能直接添加到頂層容器中,必須添加到一個與Swing頂層容器相關聯的內容面板上?!?〕把Swing組件放入一個頂層Swing容器的內容面板上?!?〕防止使用非Swing的重量級組件。139.1Swing概述對JFrame添加組件有兩種方式:〔1)用getContentPane()方法獲得JFrame的內容面板,再對其參加組件:frame.getContentPane().add(childComponent)〔2)建立一個JPanel或JDesktopPane之類的中間容器,把組件添加到容器中,用setContentPane()方法把該容器置為JFrame的內容面板:JPanelcontentPane=newJPanel();……//把其它組件添加到Jpanel中;frame.setContentPane(contentPane);//把contentPane對象設置成為frame的內容面板149.1Swing概述Swing程序設計流程〔1〕引入swing包〔2〕選擇"外觀和感覺"〔3〕設置頂層容器〔4〕設置按鈕和標簽〔5〕向容器中添加組件〔6〕在組件周圍添加邊界〔7〕進行事件處理159.2Swing容器容器是Component的子類,一個容器可以容納多個組件,并使它們成為一個整體。Swing常用的頂層容器有JFrame:用來創(chuàng)立application,最常用的JApplet:用來創(chuàng)立appletJDialog:用來創(chuàng)立對話框,常用JWindow:不常用Java程序界面的構成一個頂層容器〔即主窗口〕頂層容器包含假設干個中間容器每個中間容器包含假設干個根本組件按照合理的布局方式將它們組織在一起根本組件可響應發(fā)生在其上的事件169.2Swing容器中間容器JPanel,JScrollPane,JSplitPane,JTabbedPane、JInternalFrame:這些容器提供將有關組件按照某種布局組合在一起,然后放入中間容器或頂層容器的功能JPanel:提供一個面板JScrollPane:是具有滾動條的窗格JSplitPane:是具有拆分功能的窗格JTabbedPane:是帶有假設干標簽的分類窗格JInternalFrame:用于創(chuàng)立內嵌于JFrame中的內部框架Box:提供創(chuàng)立橫向/縱向盒子容器的功能179.2.1JFrame框架類JFrame
是的子類JFrame上只能有一個唯一的組件JRootPane,調用JFrame.getContentPane()方法可獲得JFrame中內置的JRootPane對象|+--|+--|+--|+--|+--189.2.1JFrame框架199.2.1JFrame框架構造方法:JFrame():創(chuàng)立無標題窗口。JFrame(Strings):創(chuàng)立標題名字是字符串s的窗口。例如:JFramef=newJFrame(“Hello”);setDefaultCloseOperation方法:設置單擊窗口上的關閉按鈕時的事件處理方式。JFrame.DO_NOTHING_ON_CLOSEJFrame.HIDE_ON_CLOSEJFrame.DISPOSE_ON_CLOSEJFrame.EXIT_ON_CLOSE20表9-5組件類Component的常用方法方法功能說明publicvoidsetBounds(intx,inty,intw,inth)以(x,y)為對象的左上角,以w為寬,以h為高設置對象的顯示區(qū)域publicvoidsetBackground(Colorc)設置對象的背景色為cpublicvoidsetSize(intwidth,intheight)設置對象的大小publicvoidsetFont(Fontfont)設置對象的字體樣式為fontpublicvoidsetForeground(Colorcolor)設置對象的前景色為colorpublicvoidsetVisible(Booleanb)設置組件是否顯示publicvoidsetLocation(intx,inty)設置組件顯示位置的左上角坐標為(x,y)publicStringgetName()返回對象的名稱演示程序:【例9-1】使用JFrame創(chuàng)立的框架窗口。219.2.1JFrame框架相關類創(chuàng)立圖標和圖像對象ImageIconii=newImageIcon(“x.gif”);Imageimage=ii.getImage();設置
setIconImage(image);229.2.2JPanel面板
面板〔JPanel〕輕量級容器組件沒有標題的中間容器,實現容器的嵌套。默認布局管理器是FlowLayout這類容器不能獨立存在,必須通過add()方法添加到一個頂層容器或存在于頂層容器的一個中間容器。面板(JPanel)的大小由它所包含的組件決定當組件個數增加,面板(JPanel)也會隨之而增大23例如:importjava.awt.*;importjavax.swing.*;publicclassJPanelDemoextendsJFrame{ publicJPanelgetGUI(){ JPanelp=newJPanel(); p.add(newJButton("Pressme")); returnp; }publicstaticvoidmain(Stringargs[]){ JPanelDemojp=newJPanelDemo(); jp.setTitle("JPanelDemo"); jp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jp.setContentPane(jp.getGUI()); jp.setSize(200,200); jp.setVisible(true); }}演示程序:【例9-2】在框架窗口中參加JPanel面板。249.2.3JDialog對話框
JDialog組件〔對話窗口〕作用:用來顯示提示信息或接收用戶輸入。特點:沒有最小化按鈕、狀態(tài)等控制元素。對話框一般都對應于一個頂層窗口,如JFrame窗口。對話框模式分類:有模式:在運行期間不允許用戶同應用程序的其他窗口進行交互。通常情況下,程序要在處理完對話框中的數據后才能進行下一步工作,因此,有模式的對話框應用較多。無模式:允許用戶同時在該對話框和程序其他窗口中切換操作。25表9-8JDialog類的構造方法構造方法功能說明publicJDialog()
創(chuàng)建一個沒有標題并且沒有指定Frame
所有者的無模式對話框publicJDialog(Dialogowner)創(chuàng)建無模式對話框,指定其擁有者為另一個對話框ownerpublicJDialog(Dialogowner,Stringtitle)創(chuàng)建一個擁有者為對話框owner,標題為title的對話框publicJDialog(Dialogowner,Stringtitle,booleanmodal)創(chuàng)建一個擁有者為對話框owner,標題為title的對話框,其模式狀態(tài)由modal來指定publicJDialog(Frameowner)創(chuàng)建無模式對話框,指定其擁有者為窗口ownerpublicJDialog(Frameowner,booleanmodal)創(chuàng)建一個擁有者為窗口owner的對話框,其模式狀態(tài)由modal來指定publicJDialog(Frameowner,Stringtitle)創(chuàng)建一個標題為title,擁有者為窗口owner的對話框publicJDialog(Frameowner,Stringtitle,booleanmodal)創(chuàng)建一個標題為title,擁有者為一個窗口的對話框,其模式狀態(tài)由modal來指定26表9-9JDialog類的常用方法方法功能說明public
JMenuBar
getJMenuBar()返回此對話框上設置的菜單欄publicContainergetContentPane()返回此對話框的contentPane對象public
voidsetContentPane(Container
contentPane)設置contentPane屬性public
intgetDefaultCloseOperation()返回用戶在此對話框上發(fā)起"close"時所執(zhí)行的操作publicvoidsetDefaultCloseOperation(int
operation)設置當用戶在此對話框上發(fā)起"close"時默認執(zhí)行的操作publicvoidsetTitle(Stringtitle)將對話框標題設置為titlepublicvoidsetModal(booleanb)設置對話框是否為模式狀態(tài)publicbooleanisModal()測試對話框是否為模式狀態(tài)publicvoidsetResizable(booleanresizable)設置對話框是否可改變大小publicbooleanisResizable()測試對話框是否可改變大小publicvoidsetVisible(booleanb)設置對話框是否顯示publicvoiddispose()撤銷對話框對象279.2.4Swing其他容器
〔1〕分層面板〔JLayeredPane〕Swing提供兩種分層面板:JLayeredPane和JDesktopPane。JDesktopPane是JLayeredPane的子類,專門為容納內部框架〔JInternalFrame〕而設置。向一個分層面板中添加組件,需要說明將其參加哪一層,指明組件在該層中的位置,語法為:add(Componentc,IntegerLayer,intposition)〔2〕滾動窗口〔JScrollPane〕主要通過移動JViewport〔視口〕來實現。滾動條實際就是沿著組件移動視口,同時描繪出它在下面“看到”的內容289.2.4Swing其他容器
299.2.4Swing其他容器
〔3〕分隔板〔JSplitPane〕JSplitPane提供可拆分窗口,支持水平拆分(JSplitPane.HORIZONTAL_SPLIT)和垂直(JSplitPane.VERTICAL_SPLIT)拆分并帶有滑動條。常用方法有:
JSplitPane(int
newOrientation,Component
newLeftComponent,Component
newRightComponent)
創(chuàng)立一個具有指定方向和指定組件的新JSplitPane。addImpl(Componentcomp,Objectconstraints,intindex)//增加指定的組件
setTopComponent(Componentcomp)//設置頂部的組件
setDividerSize(intnewSize)//設置拆分的大小
setUI(SplitPaneUIui)//設置外觀和感覺309.2.4Swing其他容器
319.2.4Swing其他容器
〔4〕選項板〔JTabbedPane〕JTabbedPane提供一組可供用戶選擇的帶有標簽或圖標的開關鍵。常用的方法如下:add(Stringtitle,Componentcomponent)//增加一個帶特定標簽的組件addChangeListener(ChangeListenerl)//選項板注冊一個變化監(jiān)聽器〔5〕工具欄〔JToolBar〕JToolBar是用于顯示常用工具控件的容器。用戶可以拖拽出一個獨立的可顯示工具控件的窗口。常用的方法如下:JToolBar(Stringname)//構造方法getComponentIndex(Componentc)//返回一個組件的序號getComponentAtIndex(inti)//得到一個指定序號的組件329.2.4Swing其他容器
〔6〕內部框架〔JInternalFrame〕內部框架JInternalFrame就如同一個窗口在另一個窗口內部。JFrameframe=newJFrame("InternalFrameDemo");//實例化窗口JDesktopPanedesktop=newJDesktopPane();//實例化容器JDesktopPaneMyInternalFramemyframe=newMyInternalFrame();//實例化內部窗口desktop.add(myframe);//把內部窗口添加到容器中myframe.setSelected(true);//內部面板是可選擇的frame.setContentPane(desktop);//把desktop設為frame的內容面板339.2.5案例分析:Swing容器綜合實例
1.案例描述建立一個窗口對象,并在其上添加一個標簽對象,用來顯示對窗口的各種不同操作。在窗口中,單擊窗口右上角的關閉窗口按鈕時,那么彈出對話框,要求用戶進一步確認是否要關閉該窗口。349.2.5案例分析:Swing容器綜合實例
2.案例分析本案例需要創(chuàng)立一個窗口對象,該對象繼承自JFrame類,在主窗口中創(chuàng)立一個標簽對象。還需創(chuàng)立一個JDialog對象以及兩個按鈕,JDialog對象的擁有者為已創(chuàng)立的窗口對象。程序運行時將觸發(fā)兩個不同類的事件:一個是當單擊窗口右上角的關閉按鈕時所觸發(fā)的WindowEvent事件;另一個是當對話框中的按鈕被單擊時所觸發(fā)的ActionEvent事件。故系統(tǒng)需要實現WindowListener接口和ActionListener接口的監(jiān)聽程序。359.3常用Swing組件
常用組件:JLabel標簽組件JTextField文本框JTextArea文本區(qū)JButton按鈕組件JCheckBox復選框JRadioButton單項選擇框JList列表框組件JComboBox下拉列表框組件JMenu菜單組件369.3.1JLabel標簽組件
JLabel標簽為GUI提供文本(主要)或圖像(也可以)信息JComponent的子類可以顯示以下內容:〔1〕單行的只讀的文本信息〔2〕圖像〔3〕同時顯示文本與圖像信息注意:程序一般不修改標簽的內容37import;import;import;import;import;publicclassJLabelDemoextendsJFrame{publicJLabelDemo(){super("框架和標簽例程");String[]s={"文本標簽","文字在圖標的左側","文字在圖標的下方"};
ImageIcon[]ic={null,newImageIcon("img1.gif"),newImageIcon("img2.gif")};
int[]ih={0,JLabel.LEFT,JLabel.CENTER};
int[]iv={0,JLabel.CENTER,JLabel.BOTTOM};Containerc=getContentPane();
c.setLayout(newFlowLayout(FlowLayout.LEFT));38for(inti=0;i<3;i++){
JLabel
aLabel=newJLabel(s[i],ic[i],JLabel.LEFT);if(i>0){
aLabel.setHorizontalTextPosition(ih[i]);
aLabel.setVerticalTextPosition(iv[i]);}
aLabel.setToolTipText("第"+(i+1)+"個標簽");
c.add(aLabel);}}publicstaticvoidmain(String
args[]){
JLabelDemoapp=newJLabelDemo();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.setSize(360,150);
app.setVisible(true);}}399.3.2JTextField文本框和JTextArea文本區(qū)JTextField文本框顯示單行的文本信息繼承關系:JTextFieldextendsJTextComponent密碼輸入框:JPasswordFieldJTextArea文本區(qū):是一個顯示純文本的多行區(qū)域。JTextArea
不管理滾動,可把它放置在JScrollPane
的ViewPort中實現滾動,如:
JTextArea
textArea=newJTextArea();
JScrollPanearea=newJScrollPane(textArea);TextArea
具有換行能力,JTextArea默認為不換行,需設置換行策略,如:
textArea.setLineWrap(true);
textArea.setWrapStyleWord(true);40例5:JTextField的演例如子import;import;import;import;import;publicclassJTextFieldDemo{publicstaticvoidmain(String
args[]){
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);}}41
JButton按鈕組件
按鈕是窗口程序設計中最常用的組件之一,按鈕可以帶標簽或圖像。通常一個按鈕對應著一種特定的操作,如確定、保存、取消等。從而用戶可以用鼠標單擊它來控制程序運行的流程。javax.swing類庫中提供了JButton類,用來處理按鈕控件的相關操作。JButton類繼承了AbstractButton類中許多常用方法。在Java中,廣義的按鈕包括:命令式按鈕(JButton)復選框(JCheckBox)單項選擇按鈕(JRadioButton)42表9-18AbstractButton類的常用方法方法功能說明publicvoidaddActionListener(ActionListener
l)將一個ActionListener添加到按鈕中public
voidaddChangeListener(ChangeListener
l)向按鈕添加一個ChangeListenerpublicvoidaddItemListener(ItemListener
l)將一個ItemListener添加到復選框中publicintgetHorizontalAlignment()返回圖標和文本的水平對齊方式publicintgetHorizontalTextPosition()返回文本相對于圖標的橫向位置public
intgetVerticalAlignment()返回文本和圖標的垂直對齊方式public
intgetVerticalTextPosition()返回文本相對于圖標的縱向位置publicIcongetIcon()返回默認圖標publicvoidsetIcon(Icon
defaultIcon)設置按鈕的默認圖標publicintgetMnemonic()返回當前模型中的鍵盤助記符publicvoidsetMnemonic(int
mnemonic)設置按鈕的助記符publicvoidsetActionCommand(String
actionCommand)設置此按鈕的動作命令publicStringgetText()返回按鈕的文本publicvoidsetText(String
text)設置按鈕的文本publicbooleanisSelected()返回按鈕的狀態(tài)publicvoidsetEnabled(boolean
b)啟用(或禁用)按鈕一個助記符必須對應鍵盤上的一個鍵,并且應該使用
中定義的VK_XXX鍵代碼之一指定。助記符是不區(qū)分大小寫的,所以具有相應鍵代碼的鍵事件將造成按鈕被激活,不管是否按下Shift修飾符。43例如代碼:ImageIconbuttonIcon=newImageIcon("images/right.gif");//按鈕btn1上同時顯示文字和圖標JButtonbtn1=newJButton("確定",buttonIcon);//按鈕btn1上的文字在垂直方向上是居中對齊btn1.setVerticalTextPosition(AbstractButton.CENTER);//按鈕btn1上的文字在水平方向上是左對齊btn1.setHorizontalTextPosition(AbstractButton.LEFT);//設置按鈕b1的替代的鍵盤按鍵是"d"btn1.setMnemonic('d');btn1.setActionCommand("Ok");449.3.4JCheckBox復選框和JRadioButton單項選擇框JCheckBox復選框:給用戶“二選一”的輸入選擇每個復選框有兩種狀態(tài):“選中〔on〕”或“非選中〔off〕”JRadioButton單項選擇框:給用戶“多項選擇一”的輸入選擇。每個單項選擇框有兩種狀態(tài):被選擇或取消選擇。單項選擇框還必須配合ButtonGroup類將其組成單項選擇按鈕組來使用〔用ButtonGroup的add方法將JRadioButton對象包含在此組中〕,在這種情況下用ButtonGroup類管轄的所有的JRadioButton組件中,只能有一個處于被選擇狀態(tài)。45按鈕類的層次結構圖javax.swing.JComponentjavax.swing.AbstractButtonjavax.swing.JButtonjavax.swing.JToggleButtonjavax.swing.JCheckBoxjavax.swing.JRadioButton469.3.4JCheckBox復選框和JRadioButton單項選擇框例如代碼:ImageIconicon1=newImageIcon("1.jpg");JCheckBoxchk1=newJCheckBox("粗體",icon1,true);//設置chk1為選中狀態(tài)JCheckBoxchk2=newJCheckBox("斜體");JRadioButtonrdobtn_g1=newJRadioButton("紅色");//設置rdobtn_g2為選中狀態(tài)JRadioButtonrdobtn_g2=newJRadioButton("綠色",true);ButtonGroupgrp=newButtonGroup();grp.add(rdobtn_g1);grp.add(rdobtn_g2);47補充例如:……Containerc=getContentPane();c.setLayout(newFlowLayout());inti;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);}JRadioButton[]r={newJRadioButton("左"),newJRadioButton("右")};ButtonGrouprg=newButtonGroup();for(i=0;i<r.length;i++){c.add(r[i]);rg.add(r[i]);}r[0].setSelected(true);r[1].setSelected(false);……489.3.5JList列表框組件
列表框組件JList:向用戶提供“多項選擇多”的輸入選擇,列表框通常列出假設干選項,可指定列出選項的數目,超過長度時被折疊起來。列表框中提供了多個文本選項,可以瀏覽多項。JList類繼承自JComponent類。列表框組件的使用:先用JList類的add()方法將選項參加到列表框中,然后再利用程序來控制列表框的顯示方式。499.3.5JList列表框組件
publicJList():使用空模型構造JListpublicJList(ListModeldataModel):構造一個列表,用它顯示指定模型中的元素。publicJList(Object[]listData):構造一個列表以顯示指定數組listData的元素。JList不支持滾動。要啟用滾動,可使用以下代碼:JScrollPanemyScrollPane=newJScrollPane(); myScrollPane.getViewport().setView(dataList);…Stringstars[]={"安東尼奧.班德拉斯","來昂納多.迪卡普尼奧","桑德拉.布洛克","休.格蘭特","朱莉亞.羅伯茨"};JListmoviestars=newJList(stars);…509.3.5JList列表框組件
JList顯示出一系列選項,用戶可以從中選擇一個或多項。StringcolorNames[]={“Black”,“Blue”,“Cyan”,“DarkGray”,“Gray“};colorList=newJList(colorNames);colorList.setVisibleRowCount(5);colorList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);colorList.getSelectedIndex();colorList.getSelectedValue();519.3.5JList列表框組件
51StringcolorNames[]={“Black”,“Blue”,“Cyan”,“DarkGray”,“Gray“};JList
colorList=newJList(colorNames);colorList.setVisibleRowCount(5);
colorList.setFixedCellHeight(15);colorList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);colorList.getSelectedValues()529.3.6JComboBox下拉列表框組件下拉列表框〔JComboBox〕:下拉列表框中所有選項都被折疊收藏起來,且只會將用戶所選擇的單個選項顯示在顯示欄上。要改變被選中的選項,可以單擊下拉列表框右邊的向下箭頭,然后從伸展開的選項框中選擇一個選項即可。下拉列表框JComboBox繼承自JComponent類。53表9-23JComboBox類的常用方法方法功能說明publicvoidaddActionListener(ActionListener
l)添加ActionListenerpublicvoidaddItem(Object
anObject)為項列表添加項public
voidaddItemListener(ItemListener
aListener)為該下拉列表框指定一個item事件監(jiān)聽者publicvoidaddJPopupMenuListener(JPopupMenuListener
l)添加JPopupMenu偵聽器,該偵聽器將偵聽來自組合框彈出部分的通知消息public
ObjectgetItemAt(int
index)返回指定索引處的列表項public
intgetItemCount()返回列表中的項數public
intgetSelectedIndex()返回列表中與給定項匹配的第一個選項public
ObjectgetSelectedItem()返回下拉列表框中被選中項目的名稱publicvoidinsertItemAt(Object
anObject,int
index)在項列表中的給定索引處插入項public
voidremoveAllItems()從項列表中移除所有項public
voidremoveItem(Object
anObject)從項列表中移除項public
voidremoveItemAt(int
anIndex)移除anIndex處的項549.3.7JMenu菜單組件菜單JMenu:作用:用戶用來輸入有關操作命令的簡便工具。形式:下拉方式或彈出方式菜單組件的組成:〔1〕菜單條JMenuBar:包含假設干個菜單〔2〕菜單JMenu:包含假設干個菜單項〔3〕菜單項JMenuItem:與按鈕相似,在單擊時引發(fā)一個動作命令559.3.7JMenu菜單組件JMenuBar、JMenu與JMenuItem設置:JMenuBar是可通過JFrame、JWindow的根窗格添加至容器的組件。由多個JMenu組成,每個JMenu在JMenubar中都表示為字符串。JMenu在JMenuBar下以文本字符串形式顯示,而在用戶單擊它時,那么以彈出式菜單顯示。JMenuItem為JMenu中的一個組件,以文本字符串形式顯示,可以具有圖標,外觀可以修改,如字體、顏色、背景、邊框等。569.3.7JMenu菜單組件表9-24JMenuBar類的構造方法構造方法功能說明publicJMenuBar()創(chuàng)建菜單條對象表9-25JMenuBar類的常用方法方法功能說明publicJMenuadd(JMenum)將JMenu對象m添加到菜單條JMenuBar中publicJMenugetMenu(inti)返回位置i的JMenu對象publicintgetMenuCount()返回JMenuBar中JMenu對象的總數publicvoidsetHelpMenu(JMenu
menu)設置用戶的幫助菜單579.3.7JMenu菜單組件表9-26JMenu類的構造方法構造方法功能說明publicJMenu()創(chuàng)建菜單對象publicJMenu(Action
a)創(chuàng)建一個從提供的Action獲取其屬性的菜單publicJMenu(String
s)創(chuàng)建一個新JMenu,用提供的字符串作為其文本publicJMenu(String
s,boolean
b)創(chuàng)建一個新JMenu,用提供的字符串作為其文本并指定其是否為分離式(tear-off)菜單589.3.7JMenu菜單組件表9-26JMenu類的構造方法構造方法功能說明publicJMenu()創(chuàng)建菜單對象publicJMenu(Action
a)創(chuàng)建一個從提供的Action獲取其屬性的菜單publicJMenu(String
s)創(chuàng)建一個新JMenu,用提供的字符串作為其文本publicJMenu(String
s,boolean
b)創(chuàng)建一個新JMenu,用提供的字符串作為其文本并指定其是否為分離式(tear-off)菜單59表9-27JMenu類的常用方法方法功能說明publicJMenuItemadd(JMenuItemmi)添加JMenuItem對象mi到菜單JMenu中publicvoidadd(Stringlabel)添加標題為label的JMenuItem到JMenu中publicvoidaddSeparator()在當前位置增加一行分隔線publicJMenuItemgetItem(intindex)返回index位置的JMenuItem對象publicintgetItemCount()返回JMenu中JMenuItem對象的總數publicvoidinsert(JMenuItemmi,intindex)在index位置上插入一個JMenuItem對象mipublicvoidinsert(Stringlabel,intindex)在index位置插入標題為label的JMenuItem對象publicvoidinsertSeparator(intindex)在index位置插入一行分隔線publicvoidremove(intindex)刪除index位置上的JMenuItem對象publicvoidremove(JMenuItemitem)從JMenu中刪除指定的JMenuItem對象itempublicvoidremoveAll()在JMenu中刪除所有的JMenuItem對象60表9-28JMenuItem類的構造方法構造方法功能說明publicJMenuItem()創(chuàng)建菜單項對象publicJMenuItem(Action
a)創(chuàng)建一個從指定的Action獲取其屬性的菜單項publicJMenuItem(Icon
icon)創(chuàng)建帶有指定圖標的JMenuItempublicJMenuItem(String
text)創(chuàng)建帶有指定文本的JMenuItempublicJMenuItem(String
text,Icon
icon)創(chuàng)建帶有指定文本和圖標的JMenuItempublicJMenuItem(String
text,int
mnemonic)創(chuàng)建帶有指定文本和鍵盤助記符的JMenuItem61表9-29JMenuItem類的常用方法方法功能說明publicvoidaddMenuDragMouseListener(MenuDragMouseListener
l)將MenuDragMouseListener添加到菜單項publicvoidaddMenuKeyListener(MenuKeyListener
l)將MenuKeyListener添加到菜單項publicStringgetJLabel()返回JMenuItem的標題publicvoidsetEnabled(Booleanb)設置JMenuItem是否可被使用
publicvoidmenuSelectionChanged(boolean
isIncluded)當選擇或取消選擇MenuElement時由MenuSelectionManager調用62例如程序:JMenuBarmb=newJMenuBar();//創(chuàng)立JMenuBar對象mbJMenumn1=newJMenu("顏色");//創(chuàng)立JMenu對象mn1JMenumn2=newJMenu("窗口");//創(chuàng)立JMenu對象mn2JMenuItemmi1=newJMenuItem("紅色");//創(chuàng)立JMenuItem對象mi1JMenuItemmi2=newJMenuItem("綠色");JMenuItemmi3=newJMenuItem("關閉");JCheckBoxMenuItemcbmi=newJCheckBoxMenuItem("斜體");//復選框菜單項mb.add(mn1);//將mn1參加mb中mb.add(mn2);mn1.add(mi1);//將mi1參加到mn1中mn1.add(mi2);mn1.addSeparator();//加一分隔線mn1.add(cbmi);//添加帶復選框的菜單項mn2.add(mi3);//將mi3參加到mn2中639.3.7JMenu菜單組件彈出式菜單JPopupMenu的定義和使用:方法用途publicJMenuItemadd(JMenuItemmenuItem)將指定菜單項附加至菜單末尾publicJMenuItemadd(Strings)使用指定文本新建菜單項,并將其添加至菜單末尾publicvoidshow(Componentc,intx,inty)在組件c的坐標(x,y)位置顯示彈出式菜單publicbooleanisPopupTrigger()確定鼠標事件是否為平臺的彈出觸發(fā)器649.3.8案例分析:常用Swing組件綜合實例1.案例描述利用菜單組件、單項選擇/復選框組件和下拉列表框組件,設置文本區(qū)中前景顏色、背景顏色和文字的樣式。利用選中菜單項的名稱設置窗口的標題欄,中選擇“關閉”菜單項時,那么關閉窗口。當右擊文本區(qū)組件時,那么出現彈出式菜單,選擇菜單項也可以設置字體顏色。當單擊下拉列表框中的某選項時,將選中的顏色的文字添加到文本框中。659.3.8案例分析:常用Swing組件綜合實例2.案例分析需要創(chuàng)立一個JMenuBar對象,三個JMenu對象,四個JMenuItem對象,三個帶復選框的菜單項,一個彈出式菜單,將已創(chuàng)立的三個JMenuItem對象用于彈出菜單中。需要處理下拉列表框和復選框的ItemEvent事件、菜單項選擇項的ActionEvent事件以及右擊文本區(qū)的鼠標事件。需要實現ActionListener接口、ItemListener接口和MouseAdapter接口的監(jiān)聽程序。演示程序:SwingComp_Exam.java669.4GUI布局管理器布局:一個容器中的各個組件之間的位置和大小關系布局管理器:管理組件在容器中的布局,而不是直接使用位置坐標來設置各個組件的位置和大小。Java提供的6種布局管理器FlowLayout〔流式布局管理器〕BorderLayout〔邊界布局管理器〕CardLayout〔卡片布局管理器〕GridLayout〔網格布局管理器〕GridBagLayout〔網格包布局管理器〕BoxLayout〔網球布局管理器〕注意:對于一些復雜的情況,往往需要使用容器的嵌套,各容器可使用不同的布局。當容器的尺寸改變時,布局管理器會自動調整組件的排列679.4.1FlowLayout流式布局管理器流式布局〔FlowLayout〕:最根本的一種布局把圖形元件以組件的preferredSize一個接一個地顯示在面板上,如果一行顯示不了所有的組件,會自動換到下一行顯示。是Panel、JApplet和JPanel默認的布局管理方式。setLayout()方法是所有容器的父類Container的方法,用于容器設置布局。FlowLayout的構造方法:FlowLayout():生成一個默認的流式布局FlowLayout(intalignment):可以設定每一行組件的對齊方式FlowLayout(intalignment,inthorz,intvert):可以設定組件間的水平和垂直距離,默認值為5個像素FlowLayoutmylayout=newFlowLayout();FlowLayoutexLayout=newFlowLayout(FlowLayout.RIGHT);setLayout(exlayout);//為容器設置新布局
689.4.1FlowLayout流式布局管理器例:setLayout(newFlowLayout(FlowLayout.LEFT,10,20));缺點:當用戶對由FlowLayout布局管理的區(qū)域進行縮放時,布局發(fā)生變化。該布局適用于組件個數較少的情況。改變窗口大小改變窗口大小演示程序:【例9-3】流式布局管理器FlowLayout類的應用。699.4.2
BorderLayout流式布局管理器BorderLayout〔邊界布局管理器〕:包括5個區(qū):北區(qū)、南區(qū)、東區(qū)、西區(qū)和中區(qū)。分布規(guī)律是“上北下南,左西右東”。將組件參加容器中時,應該指出加在哪個區(qū)域,假設沒指定區(qū)域,那么默認為中間。假設將組件參加到已被占用位置時,將會取代原先的組件。容器JFrame和對話框組件JDialog默認使用的布局管理器。如果某個區(qū)域沒有分配組件,那么其他組件可以占據它的空間。709.4.2
BorderLayout流式布局管理器與流布局管理器不同的是:各區(qū)域的組件并不一定會維持原來定義的大小,而是會充滿各區(qū)域所提供的空間。常用的構造函數如下:BorderLayout():生成一個BorderLayout對象。BorderLayout(int
hgap,int
vgap):生成一個BorderLayout并指定組件間的水平和垂直間距。演示程序:【例9-4】邊界布局管理器BorderLayout類的應用。719.4.3CardLayout卡片布局管理器卡片布局管理器〔CardLayout〕:把每個組件看作一張卡片,好似撲克牌疊在一起,只看到最外面的一個組件。被顯示的組件占據所有的容器空間。使用add()方法往窗口容器中參加組件時對每個組件賦予一個名字,依據這個名字利用CardLayout類所提供的方法來控制其他組件是否顯示。利用卡片布局管理器時,通常要用到多個容器,其中一個容器使用卡片布局管理器,而另外的容器使用其他布局管理器。演示程序:【例9-5】卡片布局管理器CardLayout類的應用。729.4.4GridLayout網格布局管理器網格布局管理器〔GridLayout〕:將容器劃分成假設干行列的網格,按從左到右、從上到下順序添加組件。在GridLayout構造方法中,需指定在容器上劃分的網格的行、列數。利用GridLayout布局策略時,容器各組件的寬度、高度相同。當容器的尺寸變化時,各組件的相對位置不變,但各自的尺寸會發(fā)生變化。739.4.4GridLayout網格布局管理器表9-38GridLayout類的構造方法構造方法功能說明publicGridLayout()創(chuàng)建GridLayout布局管理器,使用默認值,每行只有一個組件publicGridLayout(introws,intcols)創(chuàng)建一個包含rows行,cols列的網格布局管理器publicGridLayout(introws,intcols,inthgap,intvgap)創(chuàng)建一個包含rows行,cols列的網格布局管理器,水平間距為hgap,垂直間距為vgap假設表示行的參數rows為0,那么表示任意數目的行;假設表示列的參數cols為0,那么表示任意數目的列;但行數和列數不能同時為0。749.4.4GridLayout網格布局管理器【例9-6】利用網格布局管理器GridLayout設計一個簡單的計算器。本例子的思想是創(chuàng)立兩個容器,一個是面板,另一個是窗口。首先把命令按鈕擺放在面板中,然后再把文本框和面板放入窗口中。演示程序:GridLayout_Exam.java759.4.5GridBagLayout網格包布局管理器網格包〔GridBagLayout〕布局:Java中最有彈性但也是最復雜的一種布局管理器。使用的根本單位為cell,一個組件可以占一個以上的cell,一個組件占有的區(qū)域稱為該組件的顯示區(qū)域。只有一種構造函數,但必須配合GridBagConstraints才能到達設置的效果。和根本網格布局的不同:一個組件可以跨越一個或多個網格,增加了布局靈活性。76779.4.6BoxLayout盒式布局管理器盒式布局管理器〔BoxLayout〕:除了至左而右的排列方式,還提供由上而下的排列方式。對于所有方向,組件按照將它們添加到容器中的順序排列。BoxLayout試圖按照組件的首選寬度〔對于橫向布局〕或首選高度〔對于縱向布局〕來排列它們。和流布局不同的是,當空間不夠時,組件不會自動往下移。789.4.6BoxLayout盒式布局管理器盒式布局管理器〔BoxLayout〕:構造函數:BoxLayout(Containertarget,intaxis):axis是用來指定組件排列的方式〔X_AXIS水平排列;Y_AXIS垂直排列〕,可使用3種隱藏的組件做間隔:〔1〕strut:用來在組件之間插入固定的空間?!?〕glue:用來控制一個框布局內額外的空間?!?〕rididarea:用來生成一個固定大小的區(qū)域。79例如程序:import;import;import;import;publicclassBoxLayoutDemo{publicstaticvoidmain(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;i<3;i++){s="按鈕"+(i+1);b=newJButton(s);c.add(b);}app.setVisible(true);}}809.4.7
案例分析:布局管理器綜合實例1.案例描述設計一個窗體界面,要求該窗體界面使用FlowLayout、BorderLayout、CardLayout和GridBagLayout四種布局管理器來進行窗口布局。819.4.7
案例分析:布局管理器綜合實例2.案例分析本案例首先需要確定主窗口的布局管理BorderLayout,然后從東西南北中五個區(qū)域中至少選擇三個分別作為FlowLayout、CardLayout和GridBagLayout布局管理器進行管理??蛇x擇北部區(qū)域為FlowLayout布局方式,西部區(qū)域為GridBagLayout布局方式,中部區(qū)域為CardLayout布局方式,而北部區(qū)域為FlowLayout布局方式。演示程序:Layout_Exam.java82例:復雜GUI的布局83例:實現GUI的步驟分析panel1panel2panel3panel5panel4panel6panel8panel7849.5事件處理模型主要涉及3類對象。〔1〕Event〔事件〕:用戶使用鼠標或鍵盤對窗口中的組件進行交互發(fā)生的一個操作。例如,單擊按鈕等?!?〕EventSource〔事件源〕:能夠產生事件的對象。如按鈕、鼠標、文本框或鍵盤等?!?〕Eventlistener〔事件監(jiān)聽者或處理者〕包含對事件進行處理方法的類。事件監(jiān)聽器A事件監(jiān)聽器B事件對象事件對象事件源(例如:按鈕)85!用戶交互事件如:單擊鼠標如:按下/釋放鼠標按鈕對象狀態(tài)改變調用事件處理確定發(fā)生的事件的類型確定生成的事件的組件編寫適宜的代碼處理事件事件作用于對象。對象識別事件并做出響應,不同的對象能識別的事件不全相同??梢葬槍ο鄳氖录帉懴鄳拇a,在事件發(fā)生時,程序執(zhí)行事件里的代碼。86
源對象監(jiān)聽器事件
傳播事件的實例方法傳遞途徑代理事件模型Swing中的GUI組件適配器對象879.5事件處理模型當事件發(fā)生時,事件監(jiān)聽者便是被通知的對象。為此,它必須向一個或多個事件源注冊,以便接收發(fā)生事件的通知。事件監(jiān)聽者還必須實現一些方法,用來接收和處理通知的事件。接收和處理事件的方法分別在中一系列接口中定義。例如,ActionListener監(jiān)聽者接口中定義了一個接收動作事件的方法。889.5事件處理模型包含事件處理的程序應該包括以下四局部內容:1、引入系統(tǒng)事件類包,如import.*。2、在事件處理類的聲明中指定要實現的監(jiān)聽器名,如:publicclassMyClassimplementsActionListener{…}3、注冊事件源對象的事件監(jiān)聽者,如btn.addActionListener(this)。4、實現監(jiān)聽器中的接口如實現按鈕事件監(jiān)聽接口ActionListener:publicvoidactionPerformed(ActionEvente){ ...//響應某個動作的代碼...}899.5事件處理模型【例9-7】在一個窗口中擺放5個組件,3個標簽和2個文本框。當文本框中信息更改后,將文本框中信息顯示在第3個標簽中,同時設置其背景色為黃色。
演示:Event_Exam.java909.5.2事件處理類類是所有事件對象的根底父類,所有事件都是由它派生出來的。Swing的相關事件繼承于類Swing事件分為兩大類:低級事件高級事件919.5.2事件處理類低級事件:指基于組件和容器的事件,當一個組件上發(fā)生事件,如鼠標的進入、點擊、拖放等,或組件的窗口開關等時,觸發(fā)了組件事件?!?〕ComponentEvent組件事件:組件尺寸的變化、移動?!?〕ContainerEvent容器事件:組件增加、移動?!?〕WindowEvent窗口事件:包括用戶點擊了關閉按鈕,窗口得到與失去焦點,窗口最小化等?!?〕FocusEvent焦點事件:焦點的獲得和喪失?!?〕KeyEvent鍵盤事件:鍵按下、釋放?!?〕MouseEvent鼠標事件:包括鼠標按下,鼠標釋放,鼠標點擊等。929.5.2事件處理類高級事件:基于語義的事件,它可以不和特定的動作相關聯,而依賴于觸發(fā)此事件的類。比方,在JTextField中按Enter鍵會觸發(fā)ActionEvent事件,滑動滾動條會觸發(fā)AdjustmentEvent事件,選中工程列表的某一條就會觸發(fā)ItemEvent事件?!?〕ActionEvent動作事件:對應一個動作事件,它不是代表一個具體的動作,而是一種語義。如按鈕按下,JTextField中按Enter鍵?!?〕AdjustmentEvent調節(jié)事件:在滾動條上移動滑塊以調節(jié)數值?!?〕ItemEvent工程事件:選擇工程,不選擇“工程改變”。〔4〕TextEvent文本領件:文本對象改變。939.5.3事件處理類事件監(jiān)聽接口:一個類可以實現多個接口,接口中已定義的方法必須一一實現,如果對某事件不感興趣,也要用空的方法體代替。適配器類〔Adapter〕:為一些Listener接口提供了適配器,可通過繼承事件所對應的Adapter類,重寫所需要的方法,無關的方法那么不用實現。事件適配器為提供了一種簡單的實現監(jiān)聽器的手段,可以縮短程序代碼。949.5.4案例分析:鍵盤和鼠標事件類綜合實例1.案例描述利用一個文本框組件接收從鍵盤輸入的文字,同時將所觸發(fā)的“鍵盤事件”顯示在一個文本區(qū)組件中。利用鼠標拖動窗口中按鈕,同時將鼠標指針當前的位置顯示在文本框中。959.5.4案例分析:鍵盤和鼠標事件類綜合實例2.案例分析本案例至少需要創(chuàng)立2個文本區(qū),1個文本框和1個按鈕。為了響應鼠標和鍵盤事件需要編程實現KeyListener接口、MouseListener接口和MouserMotionListener接口。為了將兩種事件類分別演示,需要將窗口布局設置為CardLayout方式,同時還需增加至少兩個按鈕來完成翻頁功能。演示程序:KeyAndMouse_Exam.java96練習題:編寫一個允許學生在文本字段中輸入一個數的程序。創(chuàng)立一個每當用戶單擊一
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)代理產品合同范例
- 建筑企業(yè)噴漆合同范例
- 廣告制作行業(yè)合同范例
- 工廠招學徒合同范例
- 商鋪防水專業(yè)合同范例
- 德云社師徒協議合同范例
- 小區(qū)綠化預算合同范例
- 座談會演講稿格式
- 庫存鞋購銷合同范例
- 獸醫(yī)用工合同范例
- 排架、腳手架驗收記錄
- WANG氏TBNA穿刺定位法課件
- 酒店電梯的設置及選擇運行要點管理
- 煤礦安全避險系統(tǒng)有效性評估
- 濃密機電氣部分說明書
- 漢字應用水平測試國家卷
- 曼昆《經濟學原理》(微觀)第五版測試題庫 (09)
- 2022年《父母課堂》如何幫助孩子順利度過小學分化年級教學案例
- 幕墻拆除施工方案-(2)
- 感染性心內膜炎ppt課件
- 青春期人際交往
評論
0/150
提交評論