intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Giáo trình Java (Tập 1): Phần 2

Chia sẻ: Thangnam Thangnam | Ngày: | Loại File: PDF | Số trang:157

83
lượt xem
23
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Nối tiếp nội dung phần 1, phần 2 cuốn sách giới thiệu tới người đọc các nội dung: Lập trình giao diện, đối tượng đồ họa (Graphics), xử lý ảnh (Image Processing), xử lý luồng và tập tin (Stream và Files). Mời các bạn cùng tham khảo nội dung chi tiết.

Chủ đề:
Lưu

Nội dung Text: Giáo trình Java (Tập 1): Phần 2

  1. S ỉ 206 C h ư ơ n g 5 : L ậ p t r ì n h giao diện Stãtus.setText(CexC); }); Biên dịch chương t r ì n h : c:\Learning>javac ScrollbarApplet.java Sửa đổi tập t i n MyApplet.html: H ì n h 5-16 là k ế t quả khi chạy chương t r ì n h . 'S3 3 ìC:\Learning\MyApplets\MyApplet.html LrMEl - Mícr File Edit View Fayorite5 Tools Help M I 4-Back **r*ị\&'W:& I'5earch f*3Favorites Addrí ệ \ C:\learning\MyApplets\MyApplet.htn T lị^Gũ Links » Ị L U Ị **-*••- ** -- ---* Applet ScrollbạrApplẹt i m í I ị 1 ^ Hy Computer •À H ì n h 5-16 Hãy t h ử di chuyên vị trí thanh trượt đ ế n các điểm khác nhau xem chuỗi "AAAAA" thay đôi như t h ê nào. Dưới đây là một ví dụ khác minh họa cho đối tượng S c r o l l b a r Chương t r ì n h này sẽ vẽ một vòng tròn, mỗi l ầ n ta di chuyển vị t r i thanh trượt thì vòng t r ò n l ạ i lớn lên hay nhó theo tương ứng:
  2. C h ư ơ n g 5 : L ậ p t r ì n h giao d i ệ n 207 Ví d ụ 5-13: S c r o l l b a r 2 A p p l e t . j a v a import java.applet.*; import j a v a . a w t . * ; irnport j ava . awt . e v e n t . * ; public class ScroÌlbar2Applet extends Applet { Scrol lbar myScrol Ì ; int c i releW=10; int circleH=10; public void init ( ) { myScro 11 : new S c r o l l b a r ( S e ro Ì l b a r . V E R T [ C A L , 0 , 1 , 0 , 3 0 ) ; ađd(myScrolÌ); myScro LÌ.addAdjưstmentListener(new Ad j usLment: L i s L e n e r ( ) { public void adjustmentviỊueChanged( AdjustmentEựẹnt evt) { i n t xLen= evt . g e t V a l u e ( ) ; c i r c l e W = l ũ *xLen; c í r c Ì e H = Ì 0* x i .en ; r e p a irít:. ( ) ; } }); } pubL iC void paint (Graph Lcs gì { g.sét C o] > r ( C o l o r . b l a c k ) ; g.íiÌLOval[10,20,circleM,circleH); ) ] Biên dịch chương t r ì n h : c:\Learning>javacScrollbar2Applet.java Sửa đổi tập t i n MyApplet.html: Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc-tnu.edu.vn
  3. m 208 C h ư ơ n g 5 : L ậ p t r i n h giao diện Chạy chương t r ì n h bạn sẽ được k ế t quả n h ư h ì n h 5-17 sau một sò l ầ n chinh thanh scrollbar t ă n g b á n k í n h vòng tròn. ' à C:\Learning\MyApplets\MyAppletJitml- Mícrosoít File Edit View•'•'. Favorites 1•ools Help g 2 I É^Search f $ i Favorites » 4-Back - -¥ g)"(2Ị Address C:\Learning\MyApplets\MyApplet.html rị i^Go Links » .-• . i ềầ ái 1 : À ỉa ú
  4. C h ư ơ n g 5 : L ậ p t r ì n h giao d i ệ n 209 16. G I Ớ I T H I Ệ U V Ề K H U N G C H Ứ A ( C O N T A I N E R ) VÀ B Ộ Q U Ả N LÝ T R Ì N H BÀY (LAYOUT M A N A G E R ) CỦA THƯ VIỆN AWT Phần t r ê n ta đã xem qua các t h à n h phần AWT cơ bản. Muốn các đối tượng AWT h i ể n t h ị hay tương tác được trong chương t r ì n h ta thường phải sử dụng phương thức a d d để đưa đối tượng đó vào Applet. T h ế nhưng có một điều chưa được đề cập đ ế n đó là vị trí sắp xếp của các đôi tượng t r ê n Applet. Thường thì nếu quan s á t kỹ ta sẽ t h ấ y Applet tự động sắp xếp các đôi tượng đưa vào theo t h ứ tự từ trái qua phải và từ t r ê n xuống dưới. H ã y h ì n h dung Applet tựa n h ư một t h ù n g chứa (container), còn các đối tượng cứ việc thoải mái "ném" vào đó, Java t h i ế t lập sẵn một bộ quản lý riêng biệt (được gọi là Layout Manager) sẽ chịu t r á c h n h i ệ m sắp xếp những đôi tượng đưa vào theo một t r ậ t tự n h á t định. 16.1. Đối tượng khung chứa (Container) là gì ? Những đôi tượng có k h ả n ă n g quản lý và n h ó m các đôi tượng con khác l ạ i được gọi là đôi tượng khung chứa (container). Những đối tượng con thuộc t h à n h phần A W T m à ta đã n g h i ê n cứu qua n h ư : N ú t n h â n , checkbox, nút radio, thanh trượt ( s c r o l l b a r ) , danh s á c h ( l i s t ) .. chi sử dụng được k h i ta đưa nó vào khung chứa (chính Applet là một khung chứa vì nó được dẫn xuất từ lớp P a n e l ) . Java cung cấp cho ta các đối tượng khung chửa sau : • Panel Đôi tượng khung chứa đơn giản n h ấ t . Mục đích chỉ để n h ó m các đối tượng con l ạ i và sắp xếp t r ì n h bày c h ú n g theo từng cách t h í c h hợp. • Frames Khung chứa n à y là một cửa sổ (vvindow) h ẳ n hoi n h ư m ọ i ứng dụng Windovvs t h ô n g thường khác. Nó thường được dùng để tạo ra các ứng dụng Window. • Dialogs Cũng là một cửa số n h ư n g k h ô n g đầy đủ chức n ă n g n h ư đối tượng khung chứa Frame. N h ư t ê n gọi, nó là một cửa sổ dạng hộp thoại (cửa số dạng này còn gọi là popup-\vindow) có những tác dụng n h ư đưa ra lời t h ô n g báo hay d ù n g để lấy số liệu nhập từ ngoài vào t h ô n g qua các đối tượng T e x t F i e l d . Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc-tnu.edu.vn
  5. m 210 C h ư ơ n g 5 : L ậ p t r ì n h giao diện • ScrollPanes Đây là một khung chứa tương tự khung chứa Panel nhưng có thèm hai thanh trượt giúp ta t ổ chức và xem được các đối tượng lớn choán nhiều chồ t r ê n m à n h ì n h n h ư h ì n h ả n h hay v ă n b â n chứa nhiều dòng. Lưu ý : Khung chứa kìiông chỉ chứa các đôi tượng con mà bản thăn nó còn có thể chứa cả những khung chứa khác. 16.2. Bộ quản lý cách trình bày là gì (layout managers) Khung chứa có t h ể n h ậ n các đối tượng từ ngoài đưa vào và nó phải biết cách nào đó để sắp xếp "chỗ ở" cho các đối tượng n à y t r ê n mảnh đất nhỏ hẹp của m ì n h . M ỗ i đ ố i tượng khung chứa đều được trang bị một bộ quản lý chịu t r á c h n h i ệ m n h ư vậy. Tùy theo cách quản lý mà nó sẽ ra quyết định xem đ ố i tượng đưa vào sẽ được đ ặ t n ằ m ở đáu bên trong khung chứa. Các bộ quản lý t r ì n h bàv mà t h ư v i ệ n AWT cung cấp cho ta bao gồm : Cách t r ì n h bày Flow (Flow layout) Cách t r ì n h bày Border (Border layout) Cách t r ì n h bày Grid (Grid layout) Cách t r ì n h bày Gridbag (Gridbag layout) Cách t r ì n h bày Card (Cardlayout) Ta sẽ l ầ n lượt áp dụng các bộ quán lý này cho khung chứa (container) ở phần sau. Bây giờ ta h ã y k h á o sát kỹ hơn về những đối tượng khung chứa. 17. CÁC ĐẶC ĐIỂM CHUNG CỦA ĐÔI TƯỢNG KHUNG CHỨA (CONTAINER) Tất cả các đối tượng khung chứa đều có những khả năng xử lý cơ bản là đưa các đối tượng con vào khung và loại c h ú n g ra. Ta đưa một đối tượng k h á c vào khung chứa bằng phương thức a d d sau : p u b l i c Component a d d ( C o m p o n e n t comp) Ta đã sử dụng phương thức này nhiều l ầ n để đưa một đối tượng vào Applet. Nếu đối tượng được đưa vào khung t h à n h công thì k ế t quà t r à về chính là đối tượng đó, còn k h ô n g trị t r ả về sẽ là null. Khung chứa quản lý việc lưu giữ các đôi tượng giống như ta lưu giữ các phần tử trong một mảng (array) hay trong một đ ố i tượng vector (đối tượng này cũng tương tự mảng, nó d ù n g đế cất giữ nhiều đối tượng khác Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc-tnu.edu.vn
  6. C h ư ơ n g 5 : Lập t r ì n h giao d i ệ n 211 m nhau). M ỗ i đôi tượng m à ta đưa vào khung chứa đều được cấp m ộ t chỉ số (index). P h ư ơ n g thức sau sẽ giúp ta chèn một đối tượng vào khung ở vị trí pos cho trước: p u b l i c C o m p o n e n t a d d ( C o m p o n e n t comp, i n t pos) T ấ t cả các phần tử từ vị trí p o s trở đi được dời qua đ ể cho đ ố i tượng mới chen vào (giống n h ư kỹ thuật xử lý danh sách liên k ế t - l i n k list vậy). Ta có t h ể dùng t h ê m phương thức sau : p u b l i c C o m p o n e n t a d d ( S t r i n g name, C o m p o n e n t comp) Phương thức n à y d ù n g đ ể đưa đối tượng mới vào p h í a cuối các đối tượng đã có. Tuy n h i ê n , ta có t h ê m đ ố i số name để giúp các bộ quản lý l a y o u t có được t h ô n g t i n về đ ố i tượng vừa t h ê m vào n h ă m dễ sắp xếp, một vài bộ quản lý về cách t r ì n h bày (layout manager) n h ư B o r d e r L a y o u t đòi hỏi đ ố i tượng t h ê m vào phải có một t ê n r i ê n g biệt thì mới cho h i ế n t h ị . Nếu bộ quản lý nào k h ô n g cần đ ế n t ê n của đối tượng thì đối số này được bỏ qua. Quá t r ì n h loại bỏ một đôi tượng ra khỏi khung chứa cũng r ấ t đơn giản. Chỉ cần gọi phương thức : p u b l i c v o i d r e m o v e ( C o m p o n e n t comp) comp là đôi tượng ta cần loại bỏ. Để loại bỏ t ấ t cả m ọ i đòi tượng ra khỏi khung chứa thì k h ô n g gì đơn giản hơn là gọi phương thức : public void removeAll () N h ư đã nêu các đôi tượng được quản lý n h ư một mảng (array) n ê n ta có t h ể dễ d à n g tham khảo đ ế n đối tượng t h ứ n trong khung chứa bằng phương thức : p u b l i c Coraponent g e t C o m p o n e n t ( i n t n ) throws ArrayIndexOutOf BoundsException Phương thức này sẽ ném ra một ngoại l ệ ArrayIndexOutOfBoundsException khi đối tượng của ta tham khảo n ằ m ngoài sô p h ầ n tử m à mảng lưu giữ các đối tượng h i ệ n có. N ế u t h à n h công t h ì trị t r ả về c h í n h là đ ố i tượng thứ n. Hoặc ta có thể lấy ra toàn bộ các đối tượng trong khung chứa vào một mảng r i ê n g của m ì n h n h ư sau : p u b l i c Component [ ] g e t C o m p o n e n t s ( ) Để đ ế m xem h i ệ n t ạ i trong khung chứa có bao nhiêu đối tượng ta gọi phương thức: Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc-tnu.edu.vn
  7. m 212 C h ư ơ n g 5 : Lập t r ì n h giao diên publict i n t countComponents() Trên đây là đặc điểm chung của mọi khung chứa. Bây giờ ta sẽ di cụ t h ể vào từng loại khung chứa một. 18. KHUNG CHỨA PANELS Panel là một khung chứa đơn giàn nhất, nó chỉ dùng để chứa và n h ó m các đ ố i tượng con k h á c l ạ i với nhau. Ta có t h ể tạo ra khung chứa P a n e l n h ư sau : P a n e l m y P a n e l = new P a n e l ( ) Như đã nêu, lớp Applet chính là Ì đối tượng khung chứa được dẫn xuất từ lớp P a n e l n à y và n h ư ta cũng đã biết m ộ t khung chứa có thể chứa được cả những khung khác, c h í n h vì vậy ta có t h ể đưa khung chứa m y P a n e l vừa tạo vào Applet cũng tương tự n h ư ta đã l à m với các đối tượng khác : add(myPanel) Mặt khác ta cũng có thể tạo những khung chứa lồng vào nhau với bao nhiêu cũng dược. Ví dụ sau sẽ lồng 4 khung chứa vào với nhau: Panel mainPanel, s u b P a n e l l , subPanel2, subPanel3; mainPanel=new P a n e l ( ) ; subPanell=new P a n e l ( ) ĩ subPanel2=new Panel ( ) ; subPanel3=new P a n e l ( ) ; 11Lồng khung chứa subPanell, subPancl2 vào khung chứa mainPanel mainPanel.add(subPanelÌ)ỉ mainPanel.add(subPanel2)ỉ I /Lồng khung chứa subPanel3 vào khung chứa sưbPanell subPanell.add(subPanel3) ; Với m ỗ i khung chứa ta có t h ể thoái m á i đưa các đ ố i tượng khác nhau vào cũng giống n h ư ta đ ã từng đưa các đ ố i tượng vào Applet vậy. Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc-tnu.edu.vn
  8. C h ư ơ n g 5 : L ậ p t r ì n h giao d i ệ n 213 m Ví dụ sau đ â y sẽ cho t h ấ y các khung chứa Panel l à m việc n h ư t h ế nào: Ví dụ 5-14: PanelApplet.java import java.awt.* ỉ import j a v a . a p p l e t . * ; //Cliương trình tạo ra một sô kliung chứa và đưa các khung ị/chứa này vào Applet 11Mỗi khung chứa đều chứa Ì đối tượng con là Ì nút nhấn public class PanelApplet extends Applet. { p u b l i c vo i d i n i t ( ) { / / T ạ o hai khung chứa chính P a n e l m a i n P a n e l l = new P a n e l ( ) ; P a n e l m a i n P a n e l 2 = new P a n e l ( ) ; / / Tạo hai khung chứa phụ P a n e l subPane11 - new P a n e l ( ) ; P a n e ì s u b P a n e l 2 = new P a n e l ( ) ; / / T ạ o một nút nhấn ngay trên Applet add (new B ú t Lon[( " A p p l e t B ú t t o n " ) ) Ị í IDưa hai khung chứa chính vào Applet add(mainPanelÌ)ì add(mainPanel2); / / Thêm Ì nút nhấn vào khung chứa chính thứ Ì dốnq thời I/dưa khung clìứa phụ Ì vào ma i n P a n e Ì Ì . a d d ( n e w B u t t o n ( " M a i n P a n e l Ì Bút t o n " ) ) , • ma i n P a n e J Ì . a đ đ ( s u b P a n e l Ì ) ; / / Thêm ỉ nút nhấn vào khung chứa chính thứ 2 dồng thời I ì đưa kliung chứa phụ 2 vào m a i n P a n e l 2 . a d d ( n e w B ú t t o n ( " M a i n P a n e l 2 Bút t ô n " ) ) ; mainPanel2.add(subPanel2); / / Đưa một nút nhấn vào mỗi khang chứa phụ subPanell.add(new Bút t o n ( " S u b - p a n e l Ì B u t t a n " ) ) ; subPanel2.add(new B u t t o n ( " S u b - p a n e l 2 B ú t t o n " ) ) ; } } Biên dịch chương trình: c:\Learning>javac PanelApplet.java Sửa đổi tập tin MyApplet.html: Chạy chương trình bạn sẽ được kết quả như hình 5-18. Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc-tnu.edu.vn
  9. l i 214 C h ư ơ n g 5 : L ậ p t r ì n h giao diện t l d U U U n L M U M U l M I N M U M i h l _|níx( Fíle ; Eđit Vview - Favorites ~ Tools Help m w & ĩ ễ ầ . tà à ^5earch F-3voriteg Address :\Learning\MyApplets\MyApplet.html iT C^Go Links »1 ỊẦpplet BŨtỉon Main Panel 1 Button Sub-panel ì Button » * Ị Panel Main . -2 Button * MỊ Ị Sub-panel 2 Button H ì n h 5-18 K ế t quả cho thây "có vẻ" t ấ t cả 5 n ú t n h ấ n đều thuộc về Applet, nhưng thực tê n h ư ta đã t h i ế t kê chương t r ì n h thì mỗi n ú t n h ấ n này đều thuộc về một khung chứa và được lồng ở những cấp độ k h á c nhau. Bâv giờ ta sẽ chuyển sang một khung chứa k h á c có t í n h n ă n g toàn diện hơn đó là khung chứa Frame. 19. FRAMES 19.1. Khung chứa Frame được dùng để làm gì? Khung chứa Frame là một trong những t h à n h phần m ạ n h m ẽ nhất của t h ư v i ệ n AWT. Nó giúp ta tạo ra một cứa sổ h ã n hoi n h ư các ứng dụng t h ô n g thường của Windows mà bạn v ẫ n thường thấy. N ế u xem xét kỹ l ạ i các ứng dụng t r ê n Windo\vs ta sẽ thấy mỗi chương t r ì n h chẳng qua chỉ là Ì cửa sổ, trong mỗi cửa sổ l ạ i chứa những đối tượng con k h á c như các loại nút n h ấ n , h ì n h ảnh, văn bản M ộ t cửa sổ n h ư vậy được Java t h ể h i ệ n qua khung chứa Frame. Các ứng dụng Windows dộc lập (standard alone) được t h i ế t kê bằng ngôn ngữ Java thường lấy đòi tượng Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc-tnu.edu.vn
  10. C h ư ơ n g 5 : L ậ p t r ì n h giao d i ệ n 215 H Frame n à y l à m n ề n . Đối với Applet ta có t h ể dùng đ ố i tượng Frame để tạo n ê n những chương t r ì n h chạy bên ngoài trang Web của t r ì n h duyệt (browsei\), k h ô n g phái r à n g buộc h ạ n hẹp trong một p h ạ m vi nhỏ bé của Applet. 19.2. Tạo đối tượng khung chứa Frame Tạo đối tượng Frame cũng đơn giản như ta đã tạo đối tượng P a n e l . H ã y sử dụng lớp Frame và gọi phương thức khởi dựng của nó: public Frame() Ví dụ : Frame myWinđow=new Frame () Do khung chứa Frame là một cửa sổ hẳn hoi nên ta có thể dùng phương thức sau đế tạo ra cửa sổ với tiêu đề bên t r ê n : public Frame (string FrameTitle) Ví dụ : Frame myWindow=new Frame("Java Application") . Dưới đây ta sẽ tạo một Applet có sử dụng đối tượng Frame : Ví dụ 5-15: FrameApplet.java import java.awt.*; import j a v a . a p p l e t . * ; p u b l i c c l a s s FrameApplet extends Applet { public voìd i n i t ( ){ L a b e l d e m o S t r = new L a b e l ( "How a b o u t Frame? " ) í add(demoStr); / / Tạo cửa sổ Farme Frame myWindow=new Frame ( " J a v a A p p l i c á t í ô n " ; ; / /Định kích tliước cho cửa sổ myWindow.resize(3ũũ,100); 11Dưa cửa sổ Frame ra màn hình myWindow.show(); í } Biên dịch chương trình: c : \Learning> javac FrameApplet. java Note: FrameApplet.java uses a deprecated API. Recompile w i t h " - d e p r e c a t i o n " f o r details. Ì warning Sửa đổi tập tin MyApplet.html: Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc-tnu.edu.vn
  11. 216 C h ư ơ n g 5 : Lập t r ì n h giao diện w ll ái C:\Learning\MyApplets\MyAppleUitinỊ< c Mĩcrosoít. My Documents Rle' Edit- ' vjẹwjị pavorites , Took . Help ÌpấtK;V | S ) Ị?! ^Search . g j Favorites Address ^p) C:\Leárning\MyApplets\MyApplet .html ^1 Ị ý^Go Links My Computer í • ''àrtr •BwWHBrti áw** í »•.»• ỉ ỉ t Hũw abũut Frame'' Ì ì r à JđVd Applĩcation My Network. Places Recycle Bin IJ ava Applet Windo w Internet I Applet FrameApplet startẹ ị " ị - ị kỵ! My Cor.-.puter /ổ Explorer H ì n h 5-19 K h i Applet của ta vừa xuất h i ệ n thì một cửa số k h á c có tiêu đề là " ơ a v a A p p l i c a t i o n " cũng h i ệ n ra, đó chính là đối tượng Frame mà ta đã tạo. K ế t quả cho thấy đối tượng Frame tách rời hẳn khỏi trang WEB và Applet. Ta có t h ể tương tác với Frame n h ư là với một chương trình cửa sổ Winđows bình thường (phóng to thu nhó ...), và với đủ mọi đối tượng có t h ể nghĩ ra ta đều đặt được vào Frame này. Tuy n h i ê n k h i đóng trang Web l ạ i (hay chuyển sang trang khác) t h ì cửa sổ Frame vẫn nằm t r ê n m à n h ì n h mà k h ô n g bị đóng l ạ i t r ừ khi dùng p h í m C t r + A l t + D e l để gọi hộp thoại của Windows 95 và n h ấ n phím End task (hay dùng Task Manager nếu sử dụng Windows NT/2000). Ta sẽ học cách làm cho cửa sổ Frame n h ậ n được t ì n h huống để đóng cứa sổ l ạ i ớ phần sau. Nếu xem Applet bằng chương t r ì n h A p p l e t v i e w e r thì cửa sổ Frame sẽ tự động hủy k h i ta đóng A p p l e t v i e w e r l ạ i . Một lưu ý nữa, khi biên dịch chương t r ì n h này, Java có một lời cảnh báo, đó là vì phương thức r e s i z e ( ) mà chương t r ì n h sử dung đã Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc-tnu.edu.vn
  12. C h ư ơ n g 5 : Lập t r ì n h giao d i ệ n 217 m được thay t h ế bằng phương thức s e t s i z e ( D i m e n s i o n ) cho các phiên bản Java sau này. Dưới đây ta sẽ đi vào chi t i ế t các phương thức của đối tượng Frame để biết cách sử dụng nó. 20. CÁC ĐẶC ĐIỂM CỦA KHUNG CHÚA FRAME Sau khi đã tạo được đôi tượng Frame, muốn nó hiện hữu trên màn hình ta cần t r ả i qua một sô bước kê t i ế p sau : • Định l ạ i kích thước cho cửa sổ (Frame là một khung chứa n h ư n g vì t h ể hiện của nó n h ư là một cửa sô Windows n ê n ta gọi là cửa số cho tiện) băng phương thức m y W i n d o w . r e s i z e ( 3 0 0 , 1 0 0 ) . • Đưa cửa sổ h i ệ n ra m à n h ì n h : myWindow. s h o w ( ) . Lưu ý : Các phiên bản sau của Java (từ 1.1 trở đi) bổ sung thêm phương thức setsize (Dìmension) thay thê cho resize(). Dimension là một đối tượng xác định kích thước về ch iều rộng và ch iều cao cùa đôi tượng. Vi dụ ta có thể đổi lời gọi cho phư
  13. m 218 C h ư ơ n g 5 : L ậ p t r ì n h giao diện Frame.DEFAULT_CURSOR Frame.CROSSHAIR_CURSOR Frame.TEXT_CURSOR Frame.WAIT_CURSOR Frame.HAND_CURSOR Frame.MOVE_CURSOR Frame.N_RESIZE_CURSOR Frame.NE_RESIZE_CURSOR Frame.E_RESIZE_CURSOR Frame.SE_RESIZE_CURSOR F r a m e . S_.RESIZE_CURSOR Frame.SW_RESIZE_CURSOR Frame . W__RESIZE._CURSOR F r a m e . NW_RESIZE_CURSOR Đế biết được h ì n h dạng h i ệ n t ạ i của con trò chuột ta gọi phương thức: public i n t getCursorType() Cửa sổ có t h ế được co giãn và thay đ ổ i kích thước. Nêu như ta k h ô n g muôn điều đó hãy áp dụng phương thức : p u b l i c void setResizable (boolean allowResize) a l l o w R e s i z e = t r u e thì cửa sô có t h ể thay đổi kích thước còn f a l s e thì không. Phương thức sau sẽ giúp ta xác định cửa sô đ a n g ờ t ì n h t r ạ n g nào : publ ic boolean isResizable ( ) Mỗi cửa sổ có một biểu tượng nhỏ (bên góc trái) ta có t h ê thay đổi h ì n h ảnh này bằng phương thức : p u b l i c s e t l c o n l m a g e ( I m a g e image) 21. SỬ D Ụ N G CỬA SỔ Đ Ể T Ạ O M Ộ T Ứ N G DỤNG WINDOWS ĐỘC LẬP H ã y nhớ l ạ i các phần trước. M ộ t chương t r ì n h độc lặp k h á c với một Applet ở chỗ nó có một phương thức m a i n ( ) . Còn Applet thì sao?, bản t h â n Applet chi là một khung chứa P a n e l b ì n h thường mà ta có t h ể đưa các đôi tượng con vào đó. Vậy t ạ i sao ta k h ô n g đưa nguyên cả Applet vào Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc-tnu.edu.vn
  14. C h ư ơ n g 5 : L ậ p t r ì n h giao d i ệ n 219 m khung chứa Frame? Ta h o à n t o à n có t h ê làm được điều n à y , và k h i dó sẽ có một chương t r ì n h ứng dụng Windows độc lập h ẳ n hoi. Dưới đây ta sẽ thể hiện ý tưởng này: Ví dụ 5-16: WindowApplet.java irnport ị ava . awt . * ỉ import j a v a . a p p l e t . * ; // Nìiúng một Applct váo khung chứa Frame li Tạo ru một ứng dụng dộc lập từ Applet public class WindowApplet extenđs Applet { / Ị Phần này dành cho khởi tạo Applct publ ic v o i d i n í t ( ) { add (new B ú t t o n ( " H e l l o B ú t t o n " ) ) ; } 11Chương trinh chinh p u b l i c s t á t i c v o là ma i n (Se r i n g a r g s Ị ] ) { / / Tạo cứa số du) chương trình chính bằng khung chứa Frame Frame myWindow = new Frame ( " A p p l e t i n s i d e Application"); // Tạo dối tượng Applet từ chinh lớp này A p p l e t m y A p p l e t = new W i n d o w A p p l e t ( ) ; / / Chay Applet myApplet.init(); myApplet.startí); / / Nììúng Applct vào cửa sổ myWindow.add(myApplet/; // Dịnli lại kích thước cho cửa số myWin dow. s é t s i ze (new D i men s ĩ ô n ( 3 0 0 , 100) ) ; / / Và bây giờ thì dưa cửa sổ ra màn hình. myWindow.show(); Biên dịch chương t r ì n h : c : \Learning> javac WindowApplet . java Chạy chương trình: c : \Learning>java WindowApplet Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc-tnu.edu.vn
  15. m 220 C h ư ơ n g 5 : L ặ p t r ì n h giao diện ỈApplet inside Application H ì n h 5-19 Điếm đặc biệt trong chương t r ì n h n à y k h á c với các Applet là có sư h i ệ n diện của h à m m a i n ( ) . C h í n h h à m m a i n ( ) làm cho lớp W i n d o w A p p l e t có t h ế chạy n h ư một ứng dụng độc lập. Một điều nữa là để đối tượng m y A p p l e t có t h ế chạy được k h i n h ú n g vào cửa số Frame ta cần phải gọi hai phương thức để buộc Applet phải khởi động và chạy : myApplet.init(); myApplet.start()ĩ Chương t r ì n h t r ê n chính là kỹ thuật thường d ù n g để chuyển dổi một Applet sang t h à n h ứng dụng độc lập (standard alone application). Và một l ầ n nữa kết quà cho t h â y cứa số của chương t r ì n h vẩn k h ô n g đóng l ạ i được, trừ khi ta quay về cửa sổ dòng l ệ n h (nơi dã chay chương t r ì n h b ă n g lệnh j a v a W i n d o w A p p l e t ) và n h ấ n Ctrl+C. Bây giờ ta sẽ giải quyết t ì n h t r ạ n g này bằng chương t r ì n h sửa đổi dưới đây: Ví d ụ 5-17: W i n d o w 2 A p p l e t . j a v a import j a v a . a w t . * ; import j a v a . a p p l e t . * ; import j a v a . a w t . e v e n t . * ; / / Nliúng một Applrt vào khung chứa Fraine I ị Tạn ra một ứng dụng độc lập từ Applct - cỏ thể dóng ủng dụng lạt public class Window2Applet extends Applet{ 11Phần này dành cho khởi tạo Applet p u b l i c v o i d L n i t () { add (new B ú t t o n ( " H e l l o B u t t o n " ) ) ; } / /Chương t rin li chính p u b l í c s t á t í c v o i d ma i n ( St r i n g a r g s [ Ị ) { / / Tạo cứa sô cho chương trình chinh báng khung chửa Frame Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc-tnu.edu.vn
  16. C h ư ơ n g 5 : L ậ p t r ì n h giao d i ệ n 221 Ễ ẫ l Frame niỵWindow = new Frame ( " A p p l e t inside Application") ; / / Tạo dối tượng Applet từ chinh lớp này A p p l e t m y A p p l e t = new W i n d o w 2 A p p l e t ( ) ; / / Chạy Applet myApplet.in i t() ; myApplet . s t a r t o ; / / Nliúntị Applet vào cứu sổ myWindow.add(myApplet); / IXứ lý tình /luông đóng cửa sổ lụi myWinđow. a d d W i n d o w L i s t e n e r ( new w i n d o w A d a p t e r ( ) { public void windowClosing(WinđowEvent event){ Sỵstein . e x i t ( 0 ) ; } })í / / Định lại kích thước cho cửa sổ myWi ndow. s e t s í ze (new Dimens l o n ( ỈOO, 100) ) ; / / Và bây giờ thì dưa cửa sổ ra màn hình. mỵWindow.show(); Chương t r ì n h này k h ô n g có gì khác trước, ngoài việc ta t h ê m vào đoạn mà sau : myWindow. a d d W i n d o w L i s t e n e r (new W i n d o w A d a p t e r ( ) { p u b l i c v o i d windowClosing(WindowEvent event) { System.exit(0)ỉ } })ỉ Như đã nghiên cứu trước đó với mô h ì n h xử lý t ì n h huống mới của Java (từ 1.2 trở về sau), khung chứa Frame cũng chỉ là một đ ố i tượng bình thường, k h i có t ì n h huống gì xảy ra nó sẽ gửi t h ô n g điệp đ ế n một đối tượng k h á c nhờ xử lý giùm. Đối với Frame lớp W i n d o w A d a p t e r chính là lớp cung cấp đòi tượng xử lý t ì n h huống cho nó. Ta tạo ra một đối tượng bằng việc cài đ ặ t lớp W i n d o w A d a p t e r r ồ i gắn nó vào Frame bằng phương thức a d d W i n d o w L i s t e n e r . Khi có t i n h huống đóng cửa sổ xảy ra đôi với Frame ( n h ấ n vào nút close của cửa sổ chẳng hạn) đ ố i tượng này sẽ yêu cầu hệ t h ô n g c h â m dứt chương t r ì n h một cách bình Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc-tnu.edu.vn
  17. m 222 C h ư ơ n g 5 : L ặ p t r ì n h giao diện thường bằng lệnh S y s t e m . e x i t ( 0 ) . P h ầ n còn l ạ i là kỹ t h u ậ t dùng lớp nội mà ta đã áp dụng cho các chương t r ì n h trước và đã có dịp xem qua. Hãy chạy chương trình này. Kết quá sẽ cho thấy chương trình chấm dứt một cách lịch sự, cửa sổ được đóng l ạ i k h i người dùng nhấn vào n ú t close b ê n góc p h ả i chứ k h ô n g bất động n h ư trước nữa. Trên đây là cách ta dùng Applet để chuyển đổi sang một chương t r ì n h độc lập. Tuy n h i ê n mọi việc k h ô n g phức tạp n h ư vậy. Nếu chi muốn xây dựng một ứng dụng r i ê n g b i ệ t ngay từ đầu ta có t h ể t h i ẽ t k ế t chương t r ì n h n h ư sau (đây là chương t r ì n h gửi lời chào He Ì l o w o r d sử dụng h o à n toàn giao d i ệ n đồ họa GÙI). Ví dụ 5-18: StandardApp.java import java.awt.* ; import ị a v a . a p p l e t . * ; import j3 va.awt.event . *; publicclass StandardApp { / /Chương trình chính p u b l i c se át i c vo í 3 ma i n ( s t r i n g a r g s [ ] ) { Label saỵHello = new Label ( "Hel lo Word" ) ; Frame myWindow - new Frame ( " S t a n d a r d Appl icát. i ôn" ) ; / IXứ lý tỉnh /luông cửa sổ dóng lại myWindow. addwi n đ o w L i s t e n e r (new w i n d o w A d a p t e r ( ) { p u b l i c voi dwindowClosing(WindowEvent event) { System.ex i t ( 0 ) ; } }); 11 Dưa chuỗi tỉcllo ivorld vào cửa số my w i n d ow. a 3d ( s à y He 11 o) ; / /Định ỉiicỉi thước cho cứa sổ myW i n d o w . s é t s i xe í new Dimens i ô n ( 3 00 , 1 0 0 ) ) ; / / D ư a cửa sổ lên màn hình mỵWindov;. sh GW í ) } } Biên dịch chương trình: C:\Learning>javac StandardApp.java Chạy chương trình: c:\Learning>java StandardApp.java Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc-tnu.edu.vn
  18. C h ư ơ n g 5 : L ậ p t r ì n h giao d i ệ n 223 Ẽ S3? S t ạ n d a r d A p p l i c a t i o n H e Ho W o r d H ì n h 5-20 Chương t r ì n h n à y tạo ra cửa sổ, và gửi lời chào k h ô n g thua bất cứ chương t r ì n h tương tự nào v i ế t b ă n g các ngôn ngữ mà ta đã biết n h ư C/C++ Delphi, Visual Basic, Povver Builder .. Chỉ có một điều k h á c biệt là nó phải chạy bằng m á y ảo Java từ cửa số dòng lệnh của DOS là: java StandardApp Tuy n h i ê n , ta có t h ể d ù n g máy ảo java d à n h cho Windows là t r ì n h j a v a w . e x e đi kèm với bộ J D K đê chạy, lúc này cửa sổ của dòng l ệ n h DOS sẽ k h ô n g xuất h i ệ n nữa. ú n g dụng của ta có t h ể s á n h ngang với mọi ứng dụng đặc thù k h á c của Windows. Bây giờ chúng ta h ã y xem đến một t h à n h phần k h á thú vị trong lớp thư viện AWT, nó giúp ích r ấ t nhiều cho các ứng dụng Windows của ta, đó là những đối tượng dùng để xây dựng t r ì n h đơn (menu). 22. GẮN ĐÔI TƯỢNG TRÌNH ĐƠN MENƯ VÀO CỬA SỔ Ứ N G DỰNG T r ì n h đơn mà Java cung cấp sẽ bao gồm những đối tượng sau: Thành phần Dối tượng Java Thanh t r ì n h đơn (Menu bar) MenuBar Trình đơn xổ xuống (popup menu) Menu r,. , , \ Men ui tem Các mục chọn (menu item) Trình đơn con (sub popup menu) Mcnu Dùng đôi tượng M e n u B a r ta có t h ể tạo một thanh t r ì n h đơn (menu bar) và gắn nó vào cửa sổ ứng dụng (Frame) theo cách sau : Tạo thanh trình đơn: M e n u B a r m y M e n u b a r =new M e n u B a r ( ) ; Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc-tnu.edu.vn
  19. m 224 C h ư ơ n g 5 ĩ Lập t r i n h giao diện Gắn thanh t r ì n h dơn vừa tạo vào cửa sổ: myWindow.setMenuBar(myMenubar); K h i đã có thanh t r ì n h đơn ngang menu bar, ta sẽ d ù n g đòi tượng Menu đ ể tạo ra các t r ì n h đơn (menu) con gắn vào đó n h ư sau : Menu F i l e M e n u =new Menu ( " F i l e " ) ; / /Tạo menu con myMenubar . a d d ( F i l e M e n u ) ; / / Gắn Lào mcnu bar Sau k h i đã có menu con ta cần p h ả i gắn các mục chọn (item) vào đó, một menu mà k h ô n g có mục chọn n à o cả thì t h ậ t vô nghĩa, dôi tượng M e n u l t e m sẽ giúp ta thực h i ệ n điều dó. Chang h ạ n với h ì n h minh họa 5-21, nếu ta muốn đưa mục chọn " O p e n " vào menu thì có t h ể thực hiện theo hai cách : Đưa trực t i ế p mục chọn vào menu: F i l e M e n u . a d d (new M e n u l t e m ( " O p e n " ) ) ỉ Tạo r i ê n g mục chọn r ồ i mới đưa vào: Menultem openItem=new Menultem( "Open" ) ; FileMenu.add(openltem); H ì n h 5-21 Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc-tnu.edu.vn
  20. C h ư ơ n g 5 : L ậ p t r ì n h giao d i ệ n 225 m M ỗ i mục chọn có t h ể ở t r ạ n g t h á i được chọn (enabled) hay không cho p h é p chọn (disabled) k h i mục chọn ở t r ạ n g t h á i disabled nó sẽ mờ, ta không t h ể chọn được nó. Ví dụ để đối tượng mục chọn o p e n l t e m vừa tạo có khả n ă n g cho p h é p chọn hay k h ô n g được chọn ta sử dụng hai phương thức sau: openltem.enable() openltem.disable() Khi một t r ì n h đơn có nhiều mục chọn ta có t h ể dùng Ì đường p h â n cách (seperator) dể tách các mục chọn ra (nhằm p h â n theo nhóm). Muốn tạo đường p h â n cách h ã y gọi phương thức a d d S e p a r a t o r của đôi tượng Menu. Ví dụ: FileMenu.addSeparator(); Để tạo một mục chọn có chứa các menu con khác (sui) menu) dơn giản ta chỉ tạo một menu b ì n h thường r ồ i đưa nó vào menu đã có. Ví dụ như để tạo mục chọn Print với một menu con ta làm n h ư sau : / / T ạ o mục chọn có me nu con Menu p r i n t l t e m =new Menu ( " P r i n t " ) Ị ị/Tạo các mục chọn cho menu con printItem.add("Print preview"); printltem.add("to Printer"); 11Dưa mục chọn có inenu con vào inenu chinh FileMenu.add(printltem)ĩ Ta cũng có t h ê tạo một mục chọn có k h ả n ă n g đ á n h dâu (checked Item), một dâu kiêm tra (check mark) sẽ h i ệ n diện bên trái mục chọn và sẽ tự động bật/tắt k h i ta chọn mục chọn đó. Ví dụ n h ư với mục chọn " A u t o s a v e " mà ta thấy t r ê n h ì n h . M ộ t mục chọn có k h ả năng đánh dấu được tạo ra từ lớp C h e c k b o x M e n u I t e m n h ư sau: C h e c k b o x M e n u I t e m A u t o s a v e =new CheckboxMenuItem("Autosave"); FileMenu.add(Autosave); Đê xác định xem mục chọn A u t o s a v e đ a n g ở trong trạng thái nào, ta sử dụng phương thức g e t s t a t e ( ) . Ví dụ : A u t o s a v e . g e t s t a t e ( ) trị trả về bằng t r u e nêu mục chọn đ a n g bị đ á n h dâu còn ngược l ạ i là f alse. Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc-tnu.edu.vn
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2