圖形用戶界面設(shè)計_第1頁
圖形用戶界面設(shè)計_第2頁
圖形用戶界面設(shè)計_第3頁
圖形用戶界面設(shè)計_第4頁
圖形用戶界面設(shè)計_第5頁
已閱讀5頁,還剩88頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

圖形用戶界面設(shè)計第1頁,課件共93頁,創(chuàng)作于2023年2月本章主要內(nèi)容:5.1圖形用戶界面概述

5.2窗體容器和組件

5.3面板容器和界面布局管理

5.4JComponent類組件的使用

5.5菜單與對話框

5.6樹(JTree)

第2頁,課件共93頁,創(chuàng)作于2023年2月5.1圖形用戶界面概述

1、awt和swing圖形用戶界面包圖形用戶界面的構(gòu)件一般包括菜單、輸入輸出組件、按鈕、畫板、窗口和對話框等,這些組件構(gòu)成Java的抽象窗口工具包(AbstractWindowToolkit,AWT)。Java在awt抽象窗口工具包的基礎(chǔ)上,開發(fā)出了javax.swing圖形用戶界面包。javax.swing包內(nèi)的組件稱為swing組件。

我們把awt圖形用戶界面包稱為awt組件,也稱為重量組件,而把swing圖形用戶界面包稱為swing組件,又稱為輕量組件。第3頁,課件共93頁,創(chuàng)作于2023年2月5.1圖形用戶界面概述2、swing組件的層次結(jié)構(gòu)第4頁,課件共93頁,創(chuàng)作于2023年2月3、構(gòu)建圖形界面應(yīng)用的步驟選擇容器和組件;容器是裝組件的,一個界面就是一個容器,窗口就是容器選擇和設(shè)置布局管理器;根據(jù)組件在容器中的位置來選擇配置添加組件;將組件添加到容器中5.1圖形用戶界面概述第5頁,課件共93頁,創(chuàng)作于2023年2月5.2窗體容器和組件JFrame是帶有標(biāo)題、邊框的頂層窗體。窗體是一個容器,在其內(nèi)部可以添加其它組件。5.2.1窗體容器JFrame類第6頁,課件共93頁,創(chuàng)作于2023年2月JFrame是放置其他Swing組件的頂級容器,相當(dāng)于Windows窗口中的主窗體。該組件用于在Swing程序中創(chuàng)建窗體,JFrame類繼承了AWT的Frame類,支持Swing體系結(jié)構(gòu)的高級GUI屬性。JFrame用來設(shè)計類似于Windows系統(tǒng)中的窗口形式的界面。第7頁,課件共93頁,創(chuàng)作于2023年2月方法介紹JFrame類的常用構(gòu)造方法如下表所示:表JFrame常用構(gòu)造方法構(gòu)造方法名稱概述JFrame()構(gòu)造一個初始時不可見的新窗體。JFrame(Stringtitle)創(chuàng)建一個新的、初始不可見的、具有指定標(biāo)題的JFrame。第8頁,課件共93頁,創(chuàng)作于2023年2月JFrame的繼承關(guān)系很復(fù)雜,它有很多父類,方法相當(dāng)多,屬性也有很多,其中常量是大寫JFrame的無參構(gòu)造,帶title參數(shù)的構(gòu)造;title是指窗口的標(biāo)題欄,JFrame的其他構(gòu)造很少用JFrame的構(gòu)造方法構(gòu)造出來的對象默認(rèn)是不可見的,需要使用JFrame的setVisible()方法來設(shè)置可見JFrame的add(組件)方法是向容器JFrame中添加組件的,setLayout()是用來設(shè)置布局的,setCursor()設(shè)置游標(biāo)的,setMenuBar()設(shè)置菜單欄的,setTitle()設(shè)置標(biāo)題欄,setVisible()設(shè)置可見性,setState()設(shè)置狀態(tài)欄等5.2.1JFrame主窗口第9頁,課件共93頁,創(chuàng)作于2023年2月【例5-1】通過構(gòu)造JFrame對象創(chuàng)建最簡單窗體。importjavax.swing.*;classExample5_1{ publicstaticvoidmain(String[]args) { JFramewin=newJFrame("最簡單窗體"); win.setSize(300,200); win.setVisible(true); win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }}第10頁,課件共93頁,創(chuàng)作于2023年2月【程序說明】程序的第9行setDefaultCloseOperation(EXIT_ON_CLOSE)為設(shè)置窗體關(guān)閉按鈕的關(guān)閉動作,如果沒有該語句,當(dāng)用戶試圖關(guān)閉窗口時,窗體只是隱藏,并沒有真正從內(nèi)存中退出。第11頁,課件共93頁,創(chuàng)作于2023年2月【例5-2】通過構(gòu)造JFrame子類創(chuàng)建最簡單窗體。importjavax.swing.*;classEx5_2extendsJFrame{ Ex5_2() { setSize(300,200); setVisible(true);setTitle("最簡單窗體"); setDefaultCloseOperation(EXIT_ON_CLOSE); }

publicstaticvoidmain(String[]args) { newEx5_2(); }}第12頁,課件共93頁,創(chuàng)作于2023年2月例:JFrame應(yīng)用例子importjava.awt.Color;importjavax.swing.*;//導(dǎo)入Swing包publicclassJFextendsJFrame{publicstaticvoidmain(Stringargs[]){JFramejf=newJFrame();//創(chuàng)建JFrame類構(gòu)造器jf.getContentPane().setVisible(false);//將面板隱藏為了顯示顏色jf.setTitle("直接使用JFrame窗口類");//設(shè)置窗口的名稱jf.setBounds(0,0,300,200);//設(shè)置窗口的大小和位置jf.setSize(100,200);//設(shè)置窗口大小jf.setBackground(Color.green);//設(shè)置窗口背景色jf.setVisible(true);//設(shè)置窗口可見性}}第13頁,課件共93頁,創(chuàng)作于2023年2月5.2.2按鈕和事件處理

1、按鈕JButton類(1)按鈕JButton類的常用方法(見教材P106表5.1)(2)創(chuàng)建按鈕對象創(chuàng)建按鈕對象的方法為:JButtonbtn=newJButton(String

text);第14頁,課件共93頁,創(chuàng)作于2023年2月【例5-3】構(gòu)造一個帶按鈕的窗體importjavax.swing.*;importjava.awt.FlowLayout;classBtnextendsJFrame{JButtonbtn=newJButton("確定");//創(chuàng)建按鈕對象 Btn() { setSize(300,200);//設(shè)置窗體大小 setVisible(true);//設(shè)置窗體可見 setDefaultCloseOperation(EXIT_ON_CLOSE);//設(shè)置關(guān)閉窗體,退出程序 setLayout(newFlowLayout());//設(shè)置窗體布局 add(btn);//把按鈕對象添加到窗體中 validate();//使窗體中的組件為可見 }}第15頁,課件共93頁,創(chuàng)作于2023年2月publicclassExample5_3{ publicstaticvoidmain(String[]args) { Btnbtn=newBtn(); }}【程序說明】(1)在本例設(shè)計了二個類:Btn和Ex5_3,按Java的命名規(guī)則,在一個文件中,只能有一個類可以用public修飾,且文件名必須和帶public的類同名。因此,本程序的文件名必須命名為“Example5_3.java”。第16頁,課件共93頁,創(chuàng)作于2023年2月(2)程序的第3行為引用界面布局管理,第12行為把窗體布局設(shè)置為浮動布局。在窗體中如果不進(jìn)行界面布局管理,添加到窗體中的按鈕組件將與窗體的內(nèi)部空間一樣大小。關(guān)于界面布局管理內(nèi)容將在5.3節(jié)詳細(xì)講解。(3)第6行為實例化JButton按鈕對象,第13行把實例化后的按鈕對象添加到窗體中。(4)第14行validate()是窗體JFrame的一個方法,其功能是使窗體中的組件為可見。第17頁,課件共93頁,創(chuàng)作于2023年2月5.2.2按鈕和事件處理2、處理按鈕事件要定義按鈕的處理事件,需要用到ActionListener接口。ActionListener是java.awt.event包中的一個接口,它定義了事件的處理方法。java.awt.event包對這個接口的定義是:publicinterfaceActionListenerextendsEventListener{//說明抽象方法publicabstractvoidactionPerformed(ActionEvente)}

第18頁,課件共93頁,創(chuàng)作于2023年2月5.2.2按鈕和事件處理在設(shè)計按鈕對象btn處理事件的類時,就要實現(xiàn)這個接口。其一般形式如下:classClassNameimplementsActionListener{…btn.addActionListener(this);…publicvoidactionPerformed(ActionEvente){…}}第19頁,課件共93頁,創(chuàng)作于2023年2月5.2.2按鈕和事件處理在Java中,要求產(chǎn)生事件的組件向它的監(jiān)視器注冊,這樣,事件源與監(jiān)視器就建立了一個對應(yīng)關(guān)系(關(guān)聯(lián))。建立對應(yīng)關(guān)系(關(guān)聯(lián))的語句如下:對象名.addActionListener(ClassName);其中,對象是事件源,ClassName是監(jiān)視器。例如:btn.addActionListener(this);這條語句的意思是:按鈕對象(事件源)btn向它的監(jiān)視器(當(dāng)前類)注冊,也就是產(chǎn)生事件的事件源對象向監(jiān)視器注冊。第20頁,課件共93頁,創(chuàng)作于2023年2月【例5-4】設(shè)計一個按鈕事件程序

importjavax.swing.*;importjava.awt.FlowLayout;importjava.awt.event.ActionListener;importjava.awt.event.ActionEvent;classBtnIconextendsJFrameimplementsActionListener{ImageIconicon=newImageIcon("win.jpg");JButtonjbtn=newJButton("打開新窗體",icon);BtnIcon(){ setSize(200,200); setVisible(true); setTitle("按鈕功能演示");setDefaultCloseOperation(EXIT_ON_CLOSE); setLayout(newFlowLayout()); add(jbtn); validate(); jbtn.addActionListener(this);}publicvoidactionPerformed(ActionEvente) {JFramenewf=newJFrame("新建窗體");newf.setSize(150,150); newf.setVisible(true);}}publicclassEx5_4{ publicstaticvoidmain(String[]args) {newBtnIcon(); }}

(單擊按鈕)第21頁,課件共93頁,創(chuàng)作于2023年2月【程序說明】(1)在程序的第5行的類聲明中,通過implementsActionListener實現(xiàn)監(jiān)聽接口。由于接口ActionListener在java.awt.event包中,故在第4行引用該包。(2)在程序的第18行設(shè)置監(jiān)聽對象(按鈕Jbtn)向監(jiān)聽器(當(dāng)前類)注冊。一旦單擊按鈕,立刻被監(jiān)聽器接收,從而觸發(fā)第20行actionPerformed()方法中的ActionEvent事件。(3)為了創(chuàng)建一個圖標(biāo),我們可以用ImageIcon類創(chuàng)建圖標(biāo)對象:ImageIconicon=newImageIcon(Stringfilename);程序的第7行,就創(chuàng)建了一個圖標(biāo)對象,以便在按鈕中使用。第22頁,課件共93頁,創(chuàng)作于2023年2月5.3面板容器和界面布局管理面板JPanel是一個可放置其他組件的容器。作為普通容器,它必須放置到一個頂層容器(窗體)之內(nèi)。我們可以在JPanel中使用add()方法放置其他組件。面板主要用于合理安排界面布局。創(chuàng)建面板的一般步驟為:(1)創(chuàng)建面板對象:PanelmyPanel=newPanel();(2)將面板添加到窗體容器中:add(myPanel);(3)把組件放置到面板上:myPanel.add(其他組件);5.3.1面板JPanel類

第23頁,課件共93頁,創(chuàng)作于2023年2月【例5-5】面板使用示例。importjava.awt.*;importjavax.swing.*;classPanelTestextendsJFrame{ Panelpanel1=newPanel(); Panelpanel2=newPanel();Buttonbutton1=newButton("Button1");Buttonbutton2=newButton("Button2");Buttonbutton3=newButton("Button3");Buttonbutton4=newButton("Button4"); PanelTest() {setSize(200,150);setVisible(true);setTitle("面板容器示例"); setDefaultCloseOperation(EXIT_ON_CLOSE); setLayout(newFlowLayout());//將面板容器加入到窗體add(panel1); add(panel2); //將其他組件加入到面板容器中 panel1.add(button1); panel1.add(button2);panel2.add(button3); panel2.add(button4); panel1.setBackground(Color.red); panel2.setBackground(Color.cyan); validate();}}publicclassEx5_5{ publicstaticvoidmain(String[]args) { newPanelTest();}第24頁,課件共93頁,創(chuàng)作于2023年2月5.3.2界面布局策略Java在java.awt包中定義了5種界面布局策略,它們分別是:FlowLayout、BorderLayout、CardLayout、GridLayout、GridBagLayout。設(shè)置布局的格式為:容器對象.setLayout(布局策略);第25頁,課件共93頁,創(chuàng)作于2023年2月5.3.2界面布局策略1、浮動布局FlowLayout浮動布局是按照組件的順序,用add方法將組件從左至右在一行排列,一行放不下時就自動換行。每行組件均按居中方式進(jìn)行排列。這個布局方式我們在前面的示例中多次使用。其設(shè)置的方法為:setLayout(newFlowLayout());第26頁,課件共93頁,創(chuàng)作于2023年2月5.3.2界面布局策略2、邊界布局BorderLayoutBorderLayout類把容器劃分成5個區(qū)域,分別標(biāo)記為“North”、“South”、“West”、“East”和“Center”。每個組件用add方法放置到區(qū)域中。中間的區(qū)域的空間最大。其設(shè)置的方法為:setLayout(newBorderLayout());第27頁,課件共93頁,創(chuàng)作于2023年2月importjava.awt.*;importjavax.swing.*;classBordTestextendsJFrame{BordTest(){setSize(300,200);setVisible(true);setTitle("邊界布局示例"); setDefaultCloseOperation(EXIT_ON_CLOSE); setLayout(newBorderLayout());//將其他組件加入到窗體add("East",newJButton("東"));add("South",newJButton("南"));add("West",newJButton("西"));add("North",newJButton("北"));add("Center",newJButton("中")); validate();}}publicclassEx5_6{publicstaticvoidmain(String[]args) {newBordTest();}}【例5-6】邊界布局示例。第28頁,課件共93頁,創(chuàng)作于2023年2月5.3.2界面布局策略3、網(wǎng)格布局GridLayoutGridLayout類以矩形網(wǎng)格形式對容器中的組件進(jìn)行布局。容器被分成大小相等的單元格,單元格的大小由最大的構(gòu)件所決定,用add方法將組件一行一行地從左至右放置到布局的每個單元格中。其設(shè)置的方法為:setLayout(newGridLayout(introw,intcols));row是網(wǎng)格的行數(shù),cols是網(wǎng)格的列數(shù)。第29頁,課件共93頁,創(chuàng)作于2023年2月【例5-7】網(wǎng)格布局示例。importjava.awt.*;importjavax.swing.*;classGridTestextendsJFrame{GridTest() {setSize(300,200);setVisible(true);setTitle("網(wǎng)格布局示例"); setDefaultCloseOperation(EXIT_ON_CLOSE);setLayout(newGridLayout(3,3));for(inti=1;i<=9;i++){add(newJButton("按鈕"+i));} validate();}}publicclassEx5_7{ publicstaticvoidmain(String[]args) {newGridTest();}}第30頁,課件共93頁,創(chuàng)作于2023年2月5.3.2界面布局策略4、卡片布局CardLayout這種布局包含幾個卡片,在某一時刻只有一個卡片是可見的,而且第一個卡片顯示的內(nèi)容可用自己的布局來管理。CardLayout的布局可以包含多個組件,但是實際上某一時刻容器只能從這些組件中選出一個來顯示,就象一疊“撲克牌”每次只能顯示最上面的一張。如圖所示。卡片布局設(shè)置的方法為:setLayout(newCardLayout());第31頁,課件共93頁,創(chuàng)作于2023年2月5.3.2界面布局策略卡片的順序由組件對象本身在容器內(nèi)部的順序決定。CardLayout定義了一組方法,這些方法允許應(yīng)用程序按順序地瀏覽這些卡片,或者顯示指定的卡片。CardLayout的主要方法:first(Containerparent)顯示容器parent中的第一張卡片。next(Containerparent)顯示容器parent中的下一張卡片。previous(Containerparent)顯示容器parent中的前一張卡片。last(Containerparent)顯示容器parent中的最后一張卡片。第32頁,課件共93頁,創(chuàng)作于2023年2月【例5-8】卡片布局示例。importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;classCardTestextendsJFrameimplementsActionListener{ JButtonbtn[]=newJButton[5];CardLayoutcard=newCardLayout();Panelp=newPanel(); CardTest() {setSize(300,200); setVisible(true);setTitle("卡片布局示例"); setDefaultCloseOperation(EXIT_ON_CLOSE); add(p); p.setLayout(card); for(inti=1;i<=4;i++) { btn[i]=newJButton("卡片"+i); p.add(btn[i],"卡片標(biāo)識"+i);btn[i].addActionListener(this); } validate();}

publicvoidactionPerformed(ActionEvente) {card.next(p); }}publicclassEx5_8{ publicstaticvoidmain(String[]args) { newCardTest(); }}第33頁,課件共93頁,創(chuàng)作于2023年2月5.4JComponent類組件的使用5.4.1JComponent類組件JComponent類是除頂層容器外的所有swing組件的基類,其常用子類見教材P115表5.2第34頁,課件共93頁,創(chuàng)作于2023年2月5.4.2文本組件和標(biāo)簽1、JTextComponent類JTextComponent是一個允許設(shè)置、檢索和修改文本的類。它是swing文本組件的基類,通過它定義了三個子類:JTextField、JTextArea、JEditorPane。它們的繼承關(guān)系如圖所示。第35頁,課件共93頁,創(chuàng)作于2023年2月JTextComponent類的常用方法方法名功能VoidsetText(Stringt)設(shè)置文本內(nèi)容StringgetText()獲取文本內(nèi)容booleanisEdit()檢測文本的可編輯性voidsetEditable(booleanb)設(shè)置文本的可編輯性StringgetSelectedText()獲取選取文本內(nèi)容voidselect(intselStart,intselEnd)選取文本內(nèi)容voidcopy()將選定的內(nèi)容傳輸?shù)郊糍N板voidcut()將選定的內(nèi)容傳輸?shù)郊糍N板,并把文本組件中的內(nèi)容刪除。第36頁,課件共93頁,創(chuàng)作于2023年2月5.4.2文本組件和標(biāo)簽由于JTextComponent是文本框JTextField類、文本區(qū)JTextArea類及文本組件JEditorPane共同的父類。因此,下面要介紹的文本框JTextField類、文本區(qū)JTextArea類及文本組件JEditorPane都繼承了JTextComponent所具有的方法屬性。第37頁,課件共93頁,創(chuàng)作于2023年2月5.4.2文本組件和標(biāo)簽2、文本框JTextField文本框JTextField是對單行文本進(jìn)行編輯的組件。它用來接受用戶的輸入碼或顯示可編輯的文本。(1)文本框JTextField類的定義(2)創(chuàng)建文本框創(chuàng)建文本框時,一般要以初始的文本字符串或能容納的字符數(shù)為參數(shù):

JTextFieldtext=newJTextField(Stringstr);

第38頁,課件共93頁,創(chuàng)作于2023年2月【例5-9】JTextField類示例。importjavax.swing.*;importjava.awt.FlowLayout;publicclassTxtfdTestextendsJFrame{JTextFieldtxt;//聲明文本框?qū)ο骉xtfdTest(){ setSize(300,200); setVisible(true); setTitle("創(chuàng)建文本框示例");setDefaultCloseOperation(EXIT_ON_CLOSE); setLayout(newFlowLayout());//設(shè)置窗體為浮動布局 txt=newJTextField(20);//對象實例化add(txt);//將文本框添加到窗體中validate();txt.setText("重新設(shè)置了文本");//設(shè)置文本內(nèi)容}}publicclassEx5_9{ publicstaticvoidmain(String[]args) { newTxtfdTest(); }}第39頁,課件共93頁,創(chuàng)作于2023年2月5.4.2文本組件和標(biāo)簽3、密碼框JPasswordField密碼框JPasswordField是JtextField的子類,允許編輯單行文本,可以設(shè)置為不顯示鍵入的原始字符,而是顯示指定的回顯字符。JpasswordField類的主要方法為setEchoChar(char

c),其中的字符c為回顯字符。第40頁,課件共93頁,創(chuàng)作于2023年2月【例5-10】設(shè)計一個密碼驗證程序。importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;classPasswdextendsJFrameimplementsActionListener{JLabellb=newJLabel("請輸入密碼:"); JPasswordFieldtxt1=newJPasswordField(25);JButtonbn=newJButton("確定");JTextFieldtxt2=newJTextField(25);Passwd() {setSize(300,200); setVisible(true);setTitle("密碼驗證");setDefaultCloseOperation(EXIT_ON_CLOSE); setLayout(newFlowLayout()); add(lb); add(txt1); txt1.setEchoChar('*'); add(bn); add(txt2); validate(); bn.addActionListener(this); }publicvoidactionPerformed(ActionEvente){if(txt1.getText().equals("abc")) txt2.setText("密碼正確!!"); else txt2.setText("密碼錯誤!!");}}publicclassEx5_10{ publicstaticvoidmain(String[]args) { newPasswd(); }}第41頁,課件共93頁,創(chuàng)作于2023年2月5.4.2文本組件和標(biāo)簽4、文本區(qū)JTextArea文本區(qū)JTextArea是對多行文本進(jìn)行編輯的組件,它能用控制符來控制文本的格式,例如:\n為換行,\t為插入一個tab字符。

(1)創(chuàng)建文本區(qū)通常創(chuàng)建文本區(qū)時,要說明這個文本區(qū)的行、列數(shù)或文本內(nèi)容:JTextAreatxt1=newJTextArea(7,35);(2)主要方法主要繼承JTextComponent類的方法,從文本區(qū)的定義可知,它還有append(Stringstr)等自己的方法。第42頁,課件共93頁,創(chuàng)作于2023年2月【例5-11】JTextArea類示例。importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;classAreaTestextendsJFrameimplementsActionListener{JTextAreatxt1=newJTextArea(7,35);JTextFieldtxt2=newJTextField(35);Stringstr="窗外飄起蒙蒙小雨,\n平添一夜寒意,"+"\n多少的思緒藏在心底,";//輕輕一聲嘆別離。第43頁,課件共93頁,創(chuàng)作于2023年2月AreaTest(){setSize(400,200); setVisible(true); setTitle("文本組件示例"); setDefaultCloseOperation(EXIT_ON_CLOSE); setLayout(newFlowLayout()); txt1.setText(str);add(txt1);add(txt2); validate();txt2.addActionListener(this);}第44頁,課件共93頁,創(chuàng)作于2023年2月publicvoidactionPerformed(ActionEvente){Strings=txt2.getText();txt1.append("\n"+s);}}publicclassEx5_11{ publicstaticvoidmain(String[]args) { newAreaTest(); }}第45頁,課件共93頁,創(chuàng)作于2023年2月5.4.2文本組件和標(biāo)簽6、標(biāo)簽Jlabel類標(biāo)簽是用戶只能查看其內(nèi)容但不能修改的文本組件,一般作說明之用。標(biāo)簽JLabel的常用方法見教材P120表5.4。

第46頁,課件共93頁,創(chuàng)作于2023年2月【例5-13】創(chuàng)建一個包含帶有圖標(biāo)的按鈕和標(biāo)簽的窗體。importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;classLbTestextendsJFrameimplementsActionListener{LbTest(Strings){ setSize(250,250); setVisible(true); setTitle(s); setLayout(newFlowLayout()); ImageIconicon1=newImageIcon("s1.jpg");ImageIconicon2=newImageIcon("s2.jpg");ImageIconicon3=newImageIcon("s3.jpg"); JButtonjbtn=newJButton("按鈕",icon1); jbtn.setRolloverIcon(icon3); JLabeljlb=newJLabel("標(biāo)簽",icon2,SwingConstants.CENTER);jlb.setToolTipText("QQ頭像");add(jbtn); add(jlb); jbtn.addActionListener(this);setDefaultCloseOperation(EXIT_ON_CLOSE); validate();}第47頁,課件共93頁,創(chuàng)作于2023年2月publicvoidactionPerformed(ActionEvente) { JInternalFramein_window; in_window=newJInternalFrame("內(nèi)部窗體",true,true,true,true);in_window.setSize(250,200); in_window.setVisible(true); add(in_window); JTextAreatext=newJTextArea(5,15);in_window.add(text,BorderLayout.CENTER);}}publicclassEx5_12{ publicstaticvoidmain(Stringargs[]){ LbTestwin=newLbTest("有圖標(biāo)的按鈕和標(biāo)簽");}}

(1)鼠標(biāo)停留在標(biāo)簽上顯示提示信息

(2)單擊按鈕打開內(nèi)部窗體第48頁,課件共93頁,創(chuàng)作于2023年2月5.4.3單選按鈕、復(fù)選框和下拉列表(1)單選按鈕(JRadioButton)和復(fù)選框(JCheckBox)方法名功能JCheckBox()或JRadioButton()沒有標(biāo)簽的構(gòu)造方法JCheckBox(Strings)或JRadioButton(Strings)具有標(biāo)簽s的構(gòu)造方法JCheckBox(Iconicon)或JRadioButton(Iconicon)具有圖標(biāo)icon的構(gòu)造方法JCheckBox(Strings,Iconicon)或JRadioButton(Strings,Iconicon)具有標(biāo)簽和圖標(biāo)的構(gòu)造方法JCheckBox(Strings,Iconicon,booleant)或JRadioButton(Strings,Iconicon,booleant)具有標(biāo)簽和圖標(biāo)且初始狀態(tài)為t的構(gòu)造方法getItem()獲取產(chǎn)生事件的對象getStateChange()返回該選擇項是否被選中第49頁,課件共93頁,創(chuàng)作于2023年2月【例5-14】創(chuàng)建包含有單選按鈕和復(fù)選框的窗體。importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;classBRTestextendsJFrameimplementsItemListener,ActionListener{JTextFieldtext=newJTextField(15);;BRTest(Strings) {setSize(300,200);setVisible(true); setTitle(s);setLayout(newFlowLayout());//添加三個復(fù)選框JCheckBoxcb1=newJCheckBox("C語言");cb1.addItemListener(this);add(cb1);JCheckBoxcb2=newJCheckBox("C++語言");cb2.addItemListener(this);add(cb2);JCheckBoxcb3=newJCheckBox("Java語言");cb3.addItemListener(this);add(cb3);//添加三個單選按鈕JRadioButtonb1=newJRadioButton("鮮花");b1.addActionListener(this);add(b1);JRadioButtonb2=newJRadioButton("鼓掌");b2.addActionListener(this);add(b2);JRadioButtonb3=newJRadioButton("雞蛋");b3.addActionListener(this);add(b3);//定義按鈕組,單選按鈕只有放到按鈕組中才能實現(xiàn)單選功能ButtonGroupbg=newButtonGroup();bg.add(b1);bg.add(b2);bg.add(b3);//添加文本框add(text);validate();setDefaultCloseOperation(EXIT_ON_CLOSE);}第50頁,課件共93頁,創(chuàng)作于2023年2月publicvoiditemStateChanged(ItemEventie){JCheckBoxcb=(JCheckBox)ie.getItem();text.setText(cb.getText());}publicvoidactionPerformed(ActionEventae){text.setText(ae.getActionCommand());}}//主類publicclassEx5_13{ publicstaticvoidmain(String[]args) { newBRTest("單選按鈕和復(fù)選框示例"); }} 第51頁,課件共93頁,創(chuàng)作于2023年2月5.4.3單選按鈕、復(fù)選框和下拉列表(2)下拉列表(JComboBox)下拉列表(JComboBox)通常顯示一個可選條目,允許用戶在一個下拉列表中選擇多個不同條目,用戶也可以在文本區(qū)內(nèi)鍵入選擇項。JComboBox的構(gòu)造函數(shù)如下:JComboBox()JComboBox(Vectorv)其中,v是初始選項。要增加選項,則使用方法:voidaddItem(Objectobj)其中,obj是加入下拉列表的對象。第52頁,課件共93頁,創(chuàng)作于2023年2月【例5-15】創(chuàng)建包括一個下拉列表和一個標(biāo)簽的窗體。標(biāo)簽顯示一個圖標(biāo)。下拉列表的可選條目是“France”,“Germany”,“Italy”和“Japan”。當(dāng)選擇了一個圖標(biāo),標(biāo)簽更新為這個國家的國旗。 importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;classCobTestextendsJFrameimplementsItemListener {JLabeljlb;ImageIconfrance,germany,italy,japan;第53頁,課件共93頁,創(chuàng)作于2023年2月CobTest(Strings) {setSize(300,200); setVisible(true); setTitle(s);setDefaultCloseOperation(EXIT_ON_CLOSE);setLayout(newFlowLayout());JComboBoxjc=newJComboBox();jc.addItem("中國");jc.addItem("俄羅斯");jc.addItem("韓國");jc.addItem("聯(lián)合國");jc.addItemListener(this);add(jc);jlb=newJLabel(newImageIcon("中國.jpg"));add(jlb);validate();}publicvoiditemStateChanged(ItemEventie) {Strings=(String)ie.getItem().toString();jlb.setIcon(newImageIcon(s+".jpg"));}}//主類publicclassEx5_15{ publicstaticvoidmain(Stringargs[]){newCobTest("下拉列表示例");}}第54頁,課件共93頁,創(chuàng)作于2023年2月5.4.4卡片選項頁面(JTabbedPane)

【例5-16】卡片選項頁面示例。1./*卡片選項頁面*/2.importjavax.swing.*;3.importjava.awt.*;4.importjava.awt.event.*;5.classTtpDemoextendsJFrame6. {7.TtpDemo()8. {9.super("卡片選項頁面示例");10. setSize(300,200);setVisible(true);

第55頁,課件共93頁,創(chuàng)作于2023年2月11.JTabbedPanejtp=newJTabbedPane();12.ImageIconicon1=newImageIcon("c1.gif");13.ImageIconicon2=newImageIcon("c2.gif");14.ImageIconicon3=newImageIcon("c3.gif");15.jtp.addTab("城市",icon1,newCitiesPanel(),"城市名稱");16.jtp.addTab("文學(xué)",icon2,newBookPanel(),"文學(xué)書目");17.jtp.addTab("網(wǎng)站",icon3,newNetPanel(),"精選網(wǎng)址");18.getContentPane().add(jtp);19. validate();20.addWindowListener(newWindowAdapter()21.{publicvoidwindowClosing(WindowEvente)22.{System.exit(0);}});23.}24.}第56頁,課件共93頁,創(chuàng)作于2023年2月25.//定義面板CitiesPanel26.classCitiesPanelextendsJPanel27. {28.CitiesPanel()29. {30.JButtonb1=newJButton("北京");31.JButtonb2=newJButton("上海");32.JButtonb3=newJButton("深圳");33.JButtonb4=newJButton("廈門");34. add(b1);add(b2);add(b3);add(b4);35.}36.}37.//定義面板BookPanel38.classBookPanelextendsJPanel39. {40.BookPanel()41. {42.JCheckBoxcb1=newJCheckBox("西游記");43.JCheckBoxcb2=newJCheckBox("三國演義");44.JCheckBoxcb3=newJCheckBox("紅樓夢");45. add(cb1);add(cb2);add(cb3);46.}47.}第57頁,課件共93頁,創(chuàng)作于2023年2月48.//定義面板NetPanel49.classNetPanelextendsJPanel50. {51.NetPanel()52. {53.JComboBoxjcb=newJComboBox();54.jcb.addItem("思維論壇");55.jcb.addItem("百度搜索");56.jcb.addItem("Java愛好者");57.add(jcb);58.}59.}60.//主類61.publicclassExample5_1662.{publicstaticvoidmain(Stringargs[])63.{newTtpDemo();}64.}第58頁,課件共93頁,創(chuàng)作于2023年2月5.4.5滑桿(JSlider)和進(jìn)度指示條(JProgressBar)【例5-17】滑桿和進(jìn)度指示條配合使用示例。1./*滑桿和進(jìn)度指示條*/2.Importjava.awt.*;3.Importjava.awt.event.*;4.Importjavax.swing.*;5.Importjavax.swing.event.*;6.Importjavax.swing.border.*;7.classPextendsJPanel{8.JProgressBarpb=newJProgressBar();9.JSlidersb=newJSlider(JSlider.HORIZONTAL,0,100,60);10.publicP(){11.setLayout(newGridLayout(2,1));12.add(pb);第59頁,課件共93頁,創(chuàng)作于2023年2月13.sb.setValue(0);14.sb.setPaintTicks(true);15.sb.setMajorTickSpacing(20);16.sb.setMinorTickSpacing(5);17.sb.setBorder(newTitledBorder("移動滑桿"));18.pb.setModel(sb.getModel());19.pb.setStringPainted(true);20.add(sb);21.}22.}23. publicclassExample5_17{24. publicstaticvoidmain(Stringargs[]){25. Framef=newFrame("滑桿和進(jìn)度指示條");26. f.setSize(300,150);27.f.add(newP());28.f.show();29.f.addWindowListener(newWindowAdapter()30.{publicvoidwindowClosing(WindowEvente)31.{System.exit(0);}});32.}33.}第60頁,課件共93頁,創(chuàng)作于2023年2月第61頁,課件共93頁,創(chuàng)作于2023年2月5.4.6表格(JTable)

表格JTable常用方法方法名功能JTable()創(chuàng)建一個新的Jtable,使用系統(tǒng)默認(rèn)的ModelJTable(introw,intcol)創(chuàng)建具有row行,col列的空表格JTable(object[][]rowData,object[]columnNams)

創(chuàng)建顯示二維數(shù)組數(shù)據(jù)表格,且可以顯示列的名稱。第一個參數(shù)是數(shù)據(jù),第二個參數(shù)是在表格第一行中顯示列的名稱。JTable(TableModeldm)創(chuàng)建表格,并設(shè)置數(shù)據(jù)模式JTable(Vector[][]rowData,Vector[]columnNams);創(chuàng)建以Vector為輸入來源的數(shù)據(jù)表格。第一個參數(shù)是數(shù)據(jù),第二個參數(shù)是在表格第一行中顯示列的名稱。getModel()獲取表格的數(shù)據(jù)來源對象第62頁,課件共93頁,創(chuàng)作于2023年2月【例5-18】利用JTable編制員工檔案表1./*簡單JTable表格*/2.importjavax.swing.*;3.importjava.awt.*;4.importjava.awt.event.*;5.classTableDemoextendsJFrame6.{7. publicTableDemo()8.{9.super("員工檔案表");10.String[]columnNames={"姓名","職務(wù)","電話","月薪","婚否"};11.Object[][]data={12.{"李強","經(jīng)理","059568790231",newInteger(5000),newBoolean(true)},13.{"吳虹","秘書","059569785321",newInteger(3500),newBoolean(true)},14.{"陳衛(wèi)東","主管","059565498732",newInteger(4500),newBoolean(false)},15.{"歐陽建","保安","059562796879",newInteger(2000),newBoolean(true)},16.{"施樂樂","銷售","059563541298",newInteger(4000),newBoolean(false)}17.};第63頁,課件共93頁,創(chuàng)作于2023年2月18. JTabletable=newJTable(data,columnNames);19.table.setPreferredScrollableViewportSize(newDimension(500,70));20.JScrollPanescrollPane=newJScrollPane(table);21.getContentPane().add(scrollPane,BorderLayout.CENTER);22.addWindowListener(newWindowAdapter(){23.publicvoidwindowClosing(WindowEvente){24.System.exit(0);25.}26.});27.pack();28.setVisible(true);29. }30.}31.//主類32.publicclassExample5_1833.{34.publicstaticvoidmain(String[]args)35.{36.TableDemoframe=newTableDemo();37.}38.}第64頁,課件共93頁,創(chuàng)作于2023年2月5.5菜單與對話框

5.5.1菜單第65頁,課件共93頁,創(chuàng)作于2023年2月5.5.1菜單(1)一個菜單欄(JMenuBar)包含多個菜單,通過JFrame的setMenuBar方法加入到一個JFrame中。一個菜單欄可以包含任意多個菜單對象,通過Add方法來增加菜單對象。(2)一個菜單(JMenu)是菜單項的集合,并且有一個標(biāo)題,這個標(biāo)題出現(xiàn)在菜單上,當(dāng)點擊這個標(biāo)題時,這些菜單項立即彈出。使用它自身的add方法,可以增加菜單項(JmenuItem)或菜單(JMenu)對象。(3)菜單項在菜單中表示一個選項,并且可以注冊一個動作監(jiān)聽器(ActionListener),以產(chǎn)生動作事件。第66頁,課件共93頁,創(chuàng)作于2023年2月與JMenu相關(guān)的構(gòu)造函數(shù)和常用方法方法名功能JMenuBaradd(JMenumenu)創(chuàng)建菜單欄在菜單欄中添加菜單JMenu()JMenu(Stringlabel)add(JMenuItemmi)addSeparator()insert(JMenuItem

mi,int

index)

創(chuàng)建菜單創(chuàng)建具有指定標(biāo)題內(nèi)容的菜單在菜單中添加菜單項在菜單中添加一條分隔線在菜單的指定位置插入菜單項JMenuItem()JMenuItem(Stringlabel)getLabel()setLabel(Stringlabel)setEnabled(booleanb)addActionListener(ActionListenerl)創(chuàng)建菜單項創(chuàng)建具有指定標(biāo)題內(nèi)容的菜單項獲取菜單項的標(biāo)題內(nèi)容設(shè)置菜單項的標(biāo)題內(nèi)容設(shè)置菜單項是否可以選擇添加監(jiān)視器,設(shè)置菜單項接收操作事件第67頁,課件共93頁,創(chuàng)作于2023年2月建立菜單的步驟:(1)創(chuàng)建菜單欄對象,并將菜單條對象添加到窗體中JMenuBarmbar=newJMenuBar();setJMenuBar(mbar);//窗體類Frame的方法(2)創(chuàng)建菜單對象,并將菜單對象添加到菜單欄中menu1=newJMenu(“File”);menu2=newJMenu(“Edit”)mbar.add(menu1);mbar.add(menu2);(3)創(chuàng)建菜單項對象,并將菜單項對象添加到相應(yīng)的菜單中mi1=newJMenuItem(“New”);mi2=newJMenuItem(“Open”);mi3=newJMenuItem(“Save”);mi4=newJMenuItem(“Close”);menu1.add(mi1);menu1.add(mi2);menu2.add(mi3);menu2.add(mi4);第68頁,課件共93頁,創(chuàng)作于2023年2月【例5-19】設(shè)計一個菜單程序。

這個程序包含菜單“文件”和“編輯”。菜單下又包含菜單項?!拔募辈藛伟牟藛雾棡椤靶陆ㄎ募?、“打開文件”和“退出”,“編輯”菜單包含的菜單項為“剪切”、“復(fù)制”、和“粘貼”。除了“文件”和“退出”菜單項外,其他的所有的菜單項功能都暫時被關(guān)閉。

importjavax.swing.*;importjava.awt.event.*;publicclassExample5_19extendsJFrameimplementsActionListener{privateJMenuItemfileNew=newJMenuItem("新建文件");privateJMenuItemfileOpen=newJMenuItem("打開文件");privateJMenuItemfileExit=newJMenuItem("退出");privateJMenuItemeditCut=newJMenuItem("剪切");privateJMenuItemeditCopy=newJMenuItem("復(fù)制");privateJMenuItemeditPaste=newJMenuItem("粘貼");第69頁,課件共93頁,創(chuàng)作于2023年2月publicExample5_19() {super("菜單演示程序");JMenufile=newJMenu("文件");file.add(fileNew);fileNew.setEnabled(false); file.add(fileOpen);fileOpen.setEnabled(false); file.addSeparator(); file.add(fileExit);fileExit.setEnabled(true); JMenuedit=newJMenu("編輯"); edit.add(editCut);editCut.setEnabled(false);edit.add(editCopy);editCopy.setEnabled(false);edit.add(editPaste);editPaste.setEnabled(false); JMenuBarbar=newJMenuBar();bar.add(file); bar.add(edit); setJMenuBar(bar); fileExit.addActionListener(this); setSize(250,200); setVisible(true);setDefaultCloseOperation(EXIT_ON_CLOSE);}第70頁,課件共93頁,創(chuàng)作于2023年2月publicvoidactionPerformed(ActionEvente) {if(e.getSource()==fileExit) System.exit(0);

}publicstaticvoidmain(Stringargs[]) { Example5_19f=newExample5_19(); }}第71頁,課件共93頁,創(chuàng)作于2023年2月5.5.3對話框?qū)υ捒颍↗Dialog)是一個有邊框、有標(biāo)題的獨立存在的容器,是一個從某個窗口彈出的特殊窗口。對話框與JFrame一樣,不能被其他容器所包容,但是不能作為程序的最頂層容器,也不能包含菜單。JDialog必須隸屬于一個JFrame窗口,并由這個JFrame窗口負(fù)責(zé)彈出。如它的父窗口JFrame消失,它也隨之撤消。第72頁,課件共93頁,創(chuàng)作于2023年2月1、對話框的構(gòu)造

(1)“有模式”對話框(Medeldialog):當(dāng)這個對話框處于激活狀態(tài)時,只讓程序響應(yīng)對話框內(nèi)部的事件,阻塞它所隸屬的父窗口對象的輸入,而且它將阻塞其他線程的執(zhí)行,直到該對話框被關(guān)閉。(2)“無模式”對話框(Non-modaldialog):這種對話框并不阻塞它所隸屬的父窗口對象的輸入,它可以與父窗口對象并存,除非特別聲明,一般的對話框是“無模式”的。第73頁,課件共93頁,創(chuàng)作于2023年2月JDialog類的構(gòu)造方法及其含義構(gòu)造函數(shù)含義JDialog(Typeparent)創(chuàng)建以parent為父類的“無模式”對話框,parent可以為JFrame或JDialogJDialog(Typeparent,Booleanmodal)創(chuàng)建以parent為父對象對話框,parent可以為JFrame或JDialogJDialog(Typeparent,Stringtitle)創(chuàng)建以parent為父類、title為標(biāo)題的“無模式”對話框,pa

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論