Java語言程序設計課后習題解答張思民第4篇_第1頁
Java語言程序設計課后習題解答張思民第4篇_第2頁
Java語言程序設計課后習題解答張思民第4篇_第3頁
Java語言程序設計課后習題解答張思民第4篇_第4頁
Java語言程序設計課后習題解答張思民第4篇_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第4章 圖形用戶界面設計【1】什么是圖形用戶界面?試列舉出圖形用戶界面中你使用過的組件。解答:圖形用戶界面或圖形用戶接口(Graphical User Interface,GUI)是指采用圖形方式顯示的計算機操作環(huán)境用戶接口。與早期計算機使用的命令行界面相比,圖形界面對于用戶來說更為簡便易用。(比如你用windowsXP和使用DOS操作系統(tǒng)的差別)。GUI是事件驅動的,也就是說,一旦用戶與GUI交互,GUI組件就會生成”事件“(動作)。常見交互包括移動鼠標、單擊鼠標按鈕、在文字段輸入、從菜單選擇一個選項以及關閉一個窗口等等。 在windwosXP的GUI中,使用過窗口,菜單條,按鈕等【2】簡述

2、Java的事件處理機制。什么是事件源?什么是監(jiān)聽者?在Java的圖形用戶界面中,誰可以充當事件源?誰可以充當監(jiān)聽者?解答:java的事件處理機制就是,事件源允許監(jiān)聽器注冊的事件對象,在事件發(fā)生的時候想相關的注冊對象發(fā)送一個,事件對象,監(jiān)聽器便根據(jù)相關的信息來選擇運行相關的代碼。 事件源:英文名為event source,是指事件發(fā)生的地方,也就是引起事件的組件,按鈕Button,文本組件等都可以當做事件源。比如說,你點擊一個button,那么button就是事件源,要想使button對某些事件進行響應,你就需要注冊特定的監(jiān)聽者。(具體請看第5章的事件處理) 監(jiān)聽者:英文名為event hand

3、ler事件處理者,又叫監(jiān)聽器。具體的對監(jiān)聽的事件類,當它監(jiān)聽到event object產生的時候,它就調用相應的方法,進行處理。 在java中,AWT組件和swing組件都可以當做事件源;java.awt.event.*,里面各種類都可以為監(jiān)聽者?!?】動作事件的事件源可以有哪些?如何響應動作事件?解答:動作事件的事件源可以有:Button,JButton,MenuItem,等。響應動作事件的過程一般為:聲明和實例化事件源,如:Button btn=new Button(“確定”);注冊監(jiān)聽:btn.addActionListener(this); /this指明是在當前類實現(xiàn)處理實現(xiàn)接口:p

4、ublic void actionPerformed(ActionEvent e)/具體代碼;【4】說明文本框與標簽之間的區(qū)別。解答:文本框(TextField)和標簽(Label)都可以進行文字表達。TextField允許用戶編輯單行文本的文本組件,他可以添加相應的監(jiān)聽事件;而Label 對象是一個可在容器中放置文本的組件。一個標簽只顯示一行只讀文本。文本可由應用程序更改,但是用戶不能直接對其進行編輯?!?】編寫程序包含一個標簽、一個文本框和一個按鈕,當用戶單擊按鈕時,程序把文本框中的內容復制到標簽中。解答:Test4_5.javaimport java.awt.*;import java.

5、awt.event.*;public class Test4_5 extends Frame implements ActionListenerLabel lb;TextField txtFl;Button btn;public Test4_5()/界面布局和初始化super(文本框和標簽的練習);setSize(260,200);setVisible(true);setLayout(new FlowLayout();lb=newLabel( );/用空格占位,以防止label個別字符出現(xiàn)問題txtFl=new TextField(20); btn=new Button(顯示字符); add(

6、txtFl);add(btn); add(lb); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent we)System.exit(0);); validate(); /增加監(jiān)聽 btn.addActionListener(this);public void actionPerformed(ActionEvent e) String strtmp=txtFl.getText(); lb.setText(strtmp); lb.setForeground(Color.red);public st

7、atic void main(String args) new Test4_5();【6】設計一個加法計算器,如圖4.25所示(課本P124),在文本框中輸入兩個整數(shù),單擊“”按鈕時,在第三個文本框中顯示這兩個數(shù)據(jù)的和。解答:Test4_6.javaimport java.awt.*;import java.awt.event.*;class Test4_6 extends Frame implements ActionListener TextField txtFl1,txtFl2,txtFl3;Button btn;public Test4_6()super(簡單加法運算器);setSiz

8、e(300,200);setVisible(true);setLayout(new FlowLayout();txtFl1=new TextField(5);txtFl2=new TextField(5);txtFl3=new TextField(10);btn=new Button(=); add(new Label(請輸入整數(shù));add(txtFl1);add(new Label(+);add(txtFl2);add(btn);add(txtFl3);addWindowListener(new WindowAdapter() public void windowClosing(Window

9、Event we)System.exit(0););validate();btn.addActionListener(this); public void actionPerformed(ActionEvent e) int add=Integer.parseInt(txtFl1.getText() +Integer.valueOf(txtFl2.getText().intValue();/兩種字符串轉整形的方法 txtFl3.setText(String.valueOf(add); public static void main(String args) new Test4_6();【7】說

10、明文本框與文本區(qū)之間的區(qū)別,它們都可以引發(fā)什么事件?如何響應此事件?解答:TextField 對象是允許編輯單行文本的文本組件。TextArea 對象是顯示文本的多行區(qū)域??梢詫⑺O置為允許編輯或只讀TextFiled和TextArea可以引用KeyEvent,ActionEvent,分別用使用組件的 addKeyListener 方法注冊和addActionListener以接收事件。【8】設計一個計算器,其中要使用按鈕、文本框、布局管理和標簽等構件,能實現(xiàn)加、減、乘、除運算。解答:Text4_8.javaimport java.awt.*;import java.awt.event.*;p

11、ublic class Test4_8 extends Frame implements ActionListener TextField txtFl1,txtFl2,txtFl3; Button btn1,btn2,btn3,btn4,btn5;public Test4_8() super(簡單的四則運算器); setSize(300,400); setVisible(true); setLayout(new GridLayout(3,1); txtFl1=new TextField(5); txtFl2=new TextField(5); txtFl3=new TextField(5);

12、btn1=new Button(+); btn2=new Button(-); btn3=new Button(*); btn4=new Button(); Panel p1=new Panel();p1.add(txtFl1);p1.add(txtFl2);p1.add(new Label(=);p1.add(txtFl3); Panel p2=new Panel();p2.add(btn1);p2.add(btn2);p2.add(btn3);p2.add(btn4); add(new Label(請在下面輸入運算數(shù)并運算規(guī)則進行運算:); add(p1); add(p2); addWin

13、dowListener(new WindowAdapter() public void windowClosing(WindowEvent we)System.exit(0););validate(); btn1.addActionListener(this); btn2.addActionListener(this); btn3.addActionListener(this); btn4.addActionListener(this); public void actionPerformed(ActionEvent e) float num1=Float.valueOf(txtFl1.get

14、Text().floatValue(); float num2=Float.valueOf(txtFl2.getText().floatValue();/兩種字符串轉整形的方法 float rs=0; if (e.getSource()=btn1) rs=num1+num2; txtFl3.setText(String.valueOf(rs); else if (e.getSource()=btn2) rs=num1-num2; txtFl3.setText(String.valueOf(rs); else if (e.getSource()=btn3) rs=num1*num2; txtFl

15、3.setText(String.valueOf(rs); else if (e.getSource()=btn4) rs=num1/num2; txtFl3.setText(String.valueOf(rs); public static void main(String args) new Test4_8();【9】創(chuàng)建一個窗體,窗體中有一個按鈕,當單擊按鈕后,就會彈出一個新窗體。解答:Test4_9.javaimport java.awt.*;import java.awt.event.*;public class Test4_9 extends Frame implements Ac

16、tionListener Button btn; public Test4_9() super(彈出窗口練習); setSize(300,200); setVisible(true); setLayout(new BorderLayout(); btn=new Button(點擊我會彈出窗口); Panel p1=new Panel(); p1.add(new Label( ); p1.add(btn); p1.add(new Label( ); add(South,p1); validate(); addWindowListener(new WindowAdapter() public vo

17、id windowClosing(WindowEvent e) System.exit(0); ); btn.addActionListener(this); public void actionPerformed(ActionEvent e) new Test4_9(); public static void main(String args) new Test4_9(); 【10】編寫圖形界面的Application程序,該程序包含一個菜單,選擇這個菜單的“退出”選項可以關閉Application的窗口并結束程序。解答:Test4_10.javaimport java.awt.*;impo

18、rt java.awt.event.*;public class Test4_10 extends Frame MenuBar mbar; Menu file,edit,help; MenuItem file_open,file_new,file_exit; MenuItem edit_copy,edit_cut; MenuItem help_about; public Test4_10() super(菜單Application程序); setSize(400,300); setVisible(true); mbar=new MenuBar(); setMenuBar(mbar); file

19、=new Menu(文件); edit=new Menu(編輯); help=new Menu(幫助); mbar.add(file); mbar.add(edit); mbar.add(help); file_new=new MenuItem(新建); file_open=new MenuItem(打開); file_exit=new MenuItem(退出); file.add(file_new); file.add(file_open); file.addSeparator(); file.add(file_exit); edit_copy=new MenuItem(復制); edit_

20、cut=new MenuItem(粘貼); edit.add(edit_copy); edit.add(edit_cut); help_about=new MenuItem(關于); help.add(help_about); validate(); public static void main(String args) new Test4_10(); 【11】什么是容器的布局?試列舉并簡述Java中常用的幾種布局策略。解答:AWT容器分為兩類:外部容器和內部容器。其中,外部容器一般會獨立存在,例如Frame類;而內部容器則會嵌套在外部容器內部使用,例如Panel類。容器的布局是指對添加的各

21、個組件進行有序的、統(tǒng)一的對位置進行編排,使其更加美觀。(下面的例子參照網上1順序布局順序布局(Flow Layout)是最基本的一種布局,面板的默認布局就是順序布局。順序布局指的是把圖形元件一個接一個地放在面板上。下面是一個順序布局的例子。package sample;import java.awt.*;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;public class MyFlowLayout private Frame f; private Button button1, button2, b

22、utton3; public static void main (String args) MyFlowLayout mflow = new MyFlowLayout (); mflow.go(); public void go() f = new Frame (FlowLayout演示); f.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent evt) f.setVisible(false); f.dispose(); System.exit(0); ); /f.setLayout(new

23、FlowLayout(); f.setLayout(new FlowLayout(FlowLayout.LEADING, 20, 20); button1 = new Button(確定); button2 = new Button(打開); button3 = new Button(關閉); f.add(button1); f.add(button2); f.add(button3); f.setSize (200,200); f.pack(); f.setVisible(true); 程序運行結果見圖10-3。圖10-3 順序布局(Flow Layout)2邊界布局邊界布局(Border

24、Layout)包括5個區(qū):北區(qū)、南區(qū)、東區(qū)、西區(qū)和中區(qū)。這5個區(qū)在面板上的分布規(guī)律是“上北下南,左西右東”。下面是一個邊界布局的例子。package sample;import java.awt.*;dowAdapter;import java.awt.event.WindowEvent;public class MyBorderLayout Frame f; Button east, south, west, north, center; public static void main(String args) MyBorderLayout mb = new MyBorderLayout()

25、; mb.go(); public void go() f = new Frame(BorderLayout 演示); f.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent evt) f.setVisible(false); f.dispose(); System.exit(0); ); f.setBounds(0, 0, 300, 300); f.setLayout(new BorderLayout(); north = new Button(北); south = new Button(南

26、); east = new Button(東); west = new Button(西); center = new Button(中); f.add(BorderLayout.NORTH, north); f.add(BorderLayout.SOUTH, south); f.add(BorderLayout.EAST, east); f.add(BorderLayout.WEST, west); f.add(BorderLayout.CENTER, center); f.setVisible(true); 程序運行結果見圖10-4。圖10-4 邊界布局(Border Layout)3網格

27、布局網格布局(Grid Layout)把面板分成一個個大小相等的網格,你可以給出網格的行數(shù)和列數(shù)。下面是一個網格布局的例子。package sample;import java.awt.*;import java.awt.event.*;public class MyGridLayout private Frame f; private Button btn; public static void main(String args) MyGridLayout grid = new MyGridLayout(); grid.go(); public void go() f = new Frame

28、(GridLayout演示); f.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent evt) f.setVisible(false); f.dispose(); System.exit(0); ); f.setLayout (new GridLayout (3, 3, 10, 10); btn = new Button9; for(int i = 0; i =8; i+) int j = i + 1; btni = new Button( + j); f.add(btni); / f.pac

29、k(); f.setSize(100, 100); f.setVisible(true); 程序運行結果見圖10-5。圖10-5 網格布局(Grid Layout)4卡片布局卡片布局(Card Layout)把每個組件看作一張卡片,好像一副撲克牌,它們疊在一起,每次只有最外面的一個組件可以被看到。package sample;import java.awt.*;import java.awt.event.*;public class MyCardLayout public static void main(String args) new MyCardLayout().go(); public

30、 void go() final Frame f = new Frame(CardLayout演示); f.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent evt) f.setVisible(false); f.dispose(); System.exit(0); ); f.setSize(300, 100); f.setLayout(new CardLayout(); final Frame f1 = f; for(int i = 1; i = 5; +i) Button b = new

31、Button(Button + i); b.setSize(100, 25); b.addActionListener(new ActionListener() public void actionPerformed(ActionEvent ae) CardLayout cl = (CardLayout)f1.getLayout(); cl.next(f1); ); f.add(b, button + i); f.setVisible(true); 程序運行結果見圖10-6。圖10-6 卡片布局(Card Layout)單擊按鈕Button1后,顯示下一個按鈕Button2,依此類推。5網格包

32、布局網格包 (GridBag)布局是基于網格布局之上的一種改進。和基本的網格布局不同的是,一個組件可以跨越一個或多個網格,這樣一來增加了布局的靈活性。為了處 理網格的跨越性,我們可以使用GridBagConstraints類。有興趣的讀者可以參考Java API來了解它。package sample;import java.awt.*;import java.util.*;import java.awt.event.*;public class MyGridBagLayout extends Panel protected void makebutton(String name, GridBa

33、gLayout gridbag, GridBagConstraints c) Button button = new Button(name); gridbag.setConstraints(button, c); add(button); public void go() GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); setFont(new Font(Helvetica, Font.PLAIN, 14); setLayout(gridbag); c.f

34、ill = GridBagConstraints.BOTH; c.weightx = 1.0; makebutton(Button001, gridbag, c); makebutton(Button2, gridbag, c); makebutton(Button3, gridbag, c); c.gridwidth = GridBagConstraints.REMAINDER; /end row makebutton(Button4, gridbag, c); c.weightx = 0.0; /reset to the default makebutton(Button5, gridba

35、g, c); /another row c.gridwidth = 2; /GridBagConstraints.RELATIVE; /next-to-last in row makebutton(Button6, gridbag, c); c.gridwidth = GridBagConstraints.REMAINDER; /end row makebutton(Button007, gridbag, c); c.gridwidth = 1; /reset to the default c.gridheight = 2; c.weighty = 1.0; makebutton(Button

36、8, gridbag, c); c.weighty = 1.0; /reset to the default c.gridwidth = GridBagConstraints.REMAINDER; /end row c.gridheight = 1; /reset to the default makebutton(Button9, gridbag, c); makebutton(Button10, gridbag, c); setSize(300, 100); public static void main(String args) final Frame f = new Frame(Gri

37、dBagLayout 演示); f.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent evt) f.setVisible(false); f.dispose(); System.exit(0); ); MyGridBagLayout gb = new MyGridBagLayout(); gb.go(); f.add(Center, gb); f.pack(); f.setVisible(true); 程序運行結果見圖10-7。圖10-7 網格包(GridBag)布局【12】根據(jù)本章所學的內容

38、編程:設計一個模擬的文字編輯器,并用菜單實現(xiàn)退出的功能。解答:Test4_12.javaimport java.awt.*;import java.awt.event.*;public class Test4_12 extends Frame implements ActionListener MenuBar mbar; Menu file,edit,help; MenuItem file_open,file_new,file_save,file_exit; MenuItem edit_copy,edit_cut,edit_pase,edit_del; MenuItem help_about;

39、 Button btn_copy,btn_pase,btn_cut,btn_del; TextArea txtAr; boolean ifdo; StringBuffer strtmp; public Test4_12() super(菜單Application程序); setSize(400,300); setVisible(true); setLayout(new BorderLayout(); mbar=new MenuBar(); setMenuBar(mbar); strtmp=new StringBuffer(); file=new Menu(文件); edit=new Menu(

40、編輯); help=new Menu(幫助); mbar.add(file); mbar.add(edit); mbar.add(help); file_new=new MenuItem(新建); file_open=new MenuItem(打開); file_open.setEnabled(false); file_save=new MenuItem(保存); file_save.setEnabled(false); file_exit=new MenuItem(退出); file.add(file_new); file.add(file_open); file.add(file_save

41、); file.addSeparator(); file.add(file_exit); edit_copy=new MenuItem(復制,new MenuShortcut(KeyEvent.VK_C); edit_pase=new MenuItem(粘貼,new MenuShortcut(KeyEvent.VK_V); edit_cut=new MenuItem(剪切,new MenuShortcut(KeyEvent.VK_X); edit_del=new MenuItem(刪除,new MenuShortcut(KeyEvent.VK_DELETE); edit.add(edit_co

42、py); edit.add(edit_pase); edit.add(edit_cut); edit.add(edit_del); help_about=new MenuItem(關于); help.add(help_about); txtAr=new TextArea(8,10); Panel p1=new Panel(); btn_copy=new Button(復制); btn_cut=new Button(剪切); btn_pase=new Button(粘貼); btn_del=new Button(刪除); p1.setLayout(new FlowLayout(FlowLayou

43、t.LEFT); p1.add(btn_copy);p1.add(btn_cut);p1.add(btn_pase);p1.add(btn_del); add(North,p1); add(Center,txtAr); validate(); file_new.addActionListener(this); file_open.addActionListener(this); file_save.addActionListener(this); file_exit.addActionListener(this); edit_copy.addActionListener(this); edit

44、_pase.addActionListener(this); edit_cut.addActionListener(this); edit_del.addActionListener(this); help_about.addActionListener(this); btn_copy.addActionListener(this); btn_cut.addActionListener(this); btn_pase.addActionListener(this); btn_del.addActionListener(this); addWindowListener(new WindowAda

45、pter() public void windowClosing(WindowEvent we)System.exit(0);); public void actionPerformed(ActionEvent e) if (e.getSource()=file_new) txtAr.setText(null); else if (e.getSource()=file_open) else if (e.getSource()=file_save) else if (e.getSource()=file_exit) System.exit(0); /退出 else if (e.getSource

46、()=edit_copy|e.getSource()=btn_copy) /復制的實現(xiàn) strtmp.delete(0,strtmp.length(); strtmp.append(txtAr.getSelectedText(); else if (e.getSource()=edit_pase|e.getSource()=btn_pase) /粘貼的實現(xiàn) txtAr.insert(strtmp.toString(),txtAr.getSelectionEnd(); else if (e.getSource()=edit_cut|e.getSource()=btn_cut) /剪切的實現(xiàn) st

47、rtmp.delete(0,strtmp.length(); strtmp.append(txtAr.getSelectedText(); String strtmp1=new String(txtAr.getText().substring(0,txtAr.getSelectionStart(); String strtmp2=new String(txtAr.getText().substring(txtAr.getSelectionEnd(),txtAr.getText().length(); /返回一個新的 String,它包含此序列當前所包含的字符子序列。 txtAr.setText(strtmp1+strtmp2); else if(e.getSource()=edit_del|e.getSource()=btn_del) String strtmp1=new String(txtAr.getText

溫馨提示

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

評論

0/150

提交評論