You are on page 1of 402

Gii thiu JAVA

Java l mt cng ngh xy dng cc ng dng phn mm c coi l cng ngh mang tnh cch mng v kh thi nht trong vic to ra cc ng dng c kh nng chy thng nht trn nhiu nn tng m ch cn bin dch mt ln. Ln u tin xut hin vo nm 1992 nh l mt ngn ng dng trong ni b tp on Sun Microsystems xy dng ng dng iu khin cc b x l bn trong my in thoi cm tay, l vi sng, cc thit b in t dn dng khc. Khng ch l mt ngn ng, Java cn l mt nn tng pht trin v trin khai ng dng trong my o Java, b thng dch c vai tr trung tm. Gii thiu Java Java l mt ngn ng lp trnh(programming language) c Sun Microsystems gii thiu vo thng 6 nm 1995. T , n tr thnh mt cng c lp trnh ca cc lp trnh vin chuyn nghip. Java c xy dng trn nn tng ca C v C++. Do vy n s dng cc c php ca C v cc c trng hng i tng ca C++. Mc d mc tiu ban u khng phi cho Internet nhng do c trng khng ph thuc thit b nn Java tr thnh ngn ng lp trnh cho Internet. Java l g Java l ngn ng lp trnh hng i tng. Java l ngn ng va bin dch va thng dch. u tin m ngun c bin dch bng cng c JAVAC chuyn thnh dng ByteCode(file class). Sau c thc thi trn tng loi my c th nh chng trnh thng dch. Mc tiu ca cc nh thit k Java l cho php ngi lp trnh vit chng trnh mt ln nhng c th chy trn bt c phn cng c th. Ngy nay, Java c s dng rng ri vit chng trnh chy trn Internet. N l ngn ng lp trnh hng i tng c lp thit b, khng ph thuc vo h iu hnh. N khng ch dng

vit cc ng dng chy n l hay trong mng m cn xy dng cc trnh iu khin thit b cho in thoi di ng, PDA, Cc c trng ca Java

n gin Hng i tng c lp phn cng v h iu hnh Mnh Bo mt Phn tn a lung ng

Cc kiu chng trnh Java Chng ta c th xy dng cc loi chng trnh Java nh sau: Applets y l chng trnh chy trn Internet thng qua cc trnh duyt h tr Java nh IE hay Netscape. Bn c th dng cc cng c ca Java xy dng Applet. Applet c nhng bn trong trang Web hoc file HTML. Khi trang Web hin th trong trnh duyt, Applet s c np v thc thi. ng dng thc thi qua dng lnh Cc chng trnh ny chy t du nhc lnh v khng s dng giao din ha. Cc thng tin nhp xut c th hin ti du nhc lnh. ng dng ha y l cc chng trnh Java chy c lp cho php ngi dng tng tc qua giao din ha. Servlet Java thch hp pht trin ng dng nhiu lp. Applet l chng trnh ha chy trn trnh duyt ti my trm. cc ng dng Web, my trm gi yu cu ti my ch. My ch x l v gi ngc kt qu tr li my trm. Cc chng trnh Java API chy trn my ch gim st cc qu trnh ti my ch v tr li cc yu cu ca my trm. Cc chng trnh Java API chy trn my ch ny m rng kh nng ca cc ng dng Java API chun. Cc ng dng trn my ch ny c gi l cc Servlet. hoc Applet ti my ch. Cc x l trn Form ca HTML l cch s dng n gin nht

ca Servlet. Chng cn c th c dng x l d liu, thc thi cc transaction v thng c thc thi qua my ch Web. ng dng c s d liu Cc ng dng ny s dng JDBC API kt ni ti c s d liu. Chng c th l Applet hay ng dng, nhng Applet b gii hn bi tnh bo mt. My o Java (JVM-Java Virtual Machine) My o l mt phn mm da trn c s my tnh o. N c tp hp cc lnh logic xc nh cc hot ng ca my tnh. Ngi ta c th xem n nh mt h iu hnh thu nh. N thit lp cc lp tru tng cho: Phn cng bn di, h iu hnh, m bin dch. Trnh bin dch chuyn m ngun thnh tp cc lnh ca my o m khng ph thuc vo phn cng c th. Trnh thng dch trn mi my s chuyn tp lnh ny thnh chng trnh thc thi. B cng c pht trin JDK (Java Development Kit) Sun Microsystem a ra ngn ng lp trnh Java qua sn phm c tn l Java Development Kit (JDK). JDK bao gm Java Plug-In, chng cho php chy trc tip Java Applet hay JavaBean bng cch dng JRE thay cho s dng mi trng thc thi m c nh ca trnh duyt. JDK cha cc cng c sau: Trnh bin dch, 'javac' C php: javac [options] sourcecodename.java Trnh thng dch, 'java' C php: java [options] classname Trnh dch ngc, 'javap' C php: javap [options] classname Cng c sinh ti liu, 'javadoc' C php: javadoc [options] sourcecodename.java

Chng trnh tm li - Debug, 'jdb C php: jdb [options] sourcecodename.java OR jdb -host -password [options] sourcecodename.java Chng trnh xem Applet , 'appletviewer C php: appletviewer [options] sourcecodename.java / url C l chng ta ch cn im s qua nh vy thi. Tm li, bn ch cn phn bit im khc bit ca Java so vi cc ngn ng khc l sau khi bin dch s l mt file class (ByteCode). V d bn lp trnh C chng hn, sau khi bn Compile, bn s c mt file exe v c th chy c ngay. Nhng nu bn Compile mt chng trnh Java bn s c mt file class v bn khng th chy n bng cch Double click vo n c m bn phi dng trnh thng dch(Interpreter) Java chy.

Mi trng pht trin tch hpIntegrated Development Environment(IDE)

Chng ta tm hiu lp trnh l g. Tc l lp trnh vin (Programmer) dng mt ngn ng lp trnh (Programming language) vit ra mt lot cc lnh cn c gi l vit code hay m ngun. Sau m ngun s c dch ra m my tc l ngn ng my m a cho my tnh thi hnh. Vy chng ta dng ci g, chng trnh g vit m ngun? Bt c mt trnh son tho no. Tuy nhin y bn cn phn bit hai khi nim, l Plain Text Files v Rich Text Files. n gin th ny, v d bn dng Notepad nhp vo 4 ch java, lu li, kim tra bn s thy file txt

ny l 4 bytes (Coi li bi trc hiu v sao 4 ch chim mt 4 byte). Nhng cng 4 ch java m bn nhp vo Microsoft Word, bn s thy dung lng ca file doc ny l my chc KB v c thm rt nhiu byte nh dng, kim tra. M ngun ca chng ta ch cn ng 4 byte m thi, tc l chng ta ch cn Plain Text thi, khng cn v khng th c nhng byte tha. Tm li, bn c th vit m ngun trn bt c trnh son tho no nhng nh dng file phi l Plain Text. Bn hon ton c th dng Notepad vit m ngun ca C, Java, Python, Pascal...Sau lu li vi phn m rng theo qui nh ca mi ngn ng, ri dng trnh bin dch dch chng. thun tin hn, ngi ta pht trin nhng phn mm tch hp cc cng on li, l IDE. Mi trng pht trin tch hp - Integrated Development Environment (IDE) cn c gi l Integrated Design Environment hay Integrated Debugging Environment l mt loi phn mm my tnh c cng dng gip cc lp trnh vin trong vic pht trin phn mm. Cc mi trng pht trin hp nht thng bao gm:

Mt trnh son tho m (source code editor): dng vit m. Trnh bin dch (compiler) v/hoc trnh thng dch (interpreter). Cng c xy dng t ng: khi s dng s bin dch (hoc thng dch) m ngun, thc hin lin kt (linking), v c th chy chng trnh mt cch t ng. Trnh g li (debugger): h tr d tm li. Ngoi ra, cn c th bao gm h thng qun l phin bn v cc cng c nhm n gin ha cng vic xy dng giao din ngi dng ha (GUI). Nhiu mi trng pht trin hp nht hin i cn tch hp trnh duyt lp (class browser), trnh qun l i tng (object inspector), lc phn cp lp (class hierarchy diagram),... s dng trong vic pht trin phn mm theo hng i tng.

Vi Java, bn c rt nhiu la chn, tu vo cu hnh ca my, tu vo nhu cu. Tm thi chng ta s chn Eclipse. ngh

Nh ni trong cc phn trc. lp trnh c, bn cn ti thiu 2 th: 1. 2. Trnh son tho vit m ngun. Chng trnh bin dch dch m ngun ra m my.

Tuy nhin c l khng ai lm nh vy. Vi Java, bn s cn :


Mt IDE, chng ta s chn ECLIPSE B cng c pht trin Java Development Kit (JDK), hin ti l JDK 6

Bn nn download v ci t JDK trc, sau mi ci t Eclipse. Vn m nhiu bn hay bi ri nht l download v ci t JDK. Chng l c qu nhiu gi ci t "na n nhau", v cc bn li khng chc v nhng ch nh JDK, SDK, JRE, JAVA SE...C th bn cng c u ti liu hng dn ci JDK nhng li thy ton l SDK, vy l sao nh? Java Runtime Environment (JRE) l ci m bn cn nu ch mun chy mt chng trnh java(C ngha l bn ch l ngi s dng). Bn hay gp yu cu ci JRE khi m mt trang web c Java Applet. D lm ln nht l JDK (Java Development Kit ) v SDK (Software Development Kit). i khi ta tm hiu JDK nh l mt phn ca SDK. Tm tt th ny: JDK = J2SE (Java 2 Standard Edition) SDK = J2EE (Java 2 Enterprise Edition) C l d thy l Enterprise th s hn Standard. Ch cn bit ci ta cn hin ti l JDK. Nu mun y th bn vn c th thoi mi download SDK, khng c vn g c. Bn vo trang web sau download mt gi JDK, tr nhng gi ci t ch ghi l JRE hay Source Code, Documents, bn c th download bt c gi JDK no. Theo chng ti th bn nn chn nhng gi ci t n thun v d JDK 5 hay JDK 6, khng cn thit download nhng bn ci c nhng

cm t nh "with Java EE" chng hn, v nhu cu hin ti ca chng ta khng nhiu. Mi nht L JDK 6, nhng bn hon ton c th download v ci JDK 5. Khng cn ci JRE v trong gi JDK bao gm JRE ri. Download JDK Ty tng thi im m mn hnh download ca Sun s khc nhau. V cng ty bn ci t bn chn m mn hnh tip theo cng s khc nhau. Chnh v vy bn cn ty vo thc t m thao tc cho ph hp.Diy l 2 trng hp JDK 5 v JDK 6 bn tham kho. JDK 5:

JDK 6:

Nhc li, nu mun, bn vn c th Download SDK ti y: Download SDK Lun nh ci bn cn trong thi gian u ny l hai chng trnh Javac.exe v Java.exe. Bn c th tm thy hai chng trnh ny trong th mc Bin ca th mc ci t Java. Tip theo bn cn Download Eclipse Download Eclipse Bn c th chn Eclipse Classic hay Eclipse IDE For Java Developers download. Rt n gin, ch vic chn v double click down v thi. ng qu cng nhc v lo lng. Hy nh y ch l IDE, bn c th thay gi ci t khc, c th thay IDE khc. Chng ta tm dng y. Vic download ch xin bn lun nh: ng qu cng nhc. Bn JDK 5 hay 6 g cng c. Bn c th dng Eclipse hay JBuilder, NetBeans hay bt c mt IDE no k c

dng Notepad. Trong thi gian u, ci m bn thc s cn ch l mt trnh soan tho, mt trnh Javac bin dch v mt trnh Java chy v "ngm ngha thnh qu."

Ci t JDK
Sau khi download JDK v my, bn double click vo n bt u ci t. Di y l hnh nh ci t gi JDK 5. Mt ln na nhc li l bn hy thoi mi la chn gi ci thch hp, JDK 5 hay JDK 6 cng c. Double click vo gi ci t btu tin hnh ci t.

Click chn I accept the terms....Sau bm nt Next

Ch :Th mc ci mc nh c khong trng gia cc ch,iu ny c th gy li sau ny. Bn nn thay i tn ngn gn hn v khng c khong trng gia cc ch. V d: C:\Program Files\Java\jdk6\

Hoc thay i nh hnh di:

Click vo Next button

Sau JRE cng s c ci. Bn c nguyn th mc nh mc nh.

Click Finish hon tt ci t

Nu bn download SDK, cc bc cng tng t. Bn vo y tham kho video hng dn ci t JDK

Ci t Eclipse
Eclipse l mt IDE (Integrated Development Environment) dng cho vic pht trin cc ng dng vit bng java. Hin nay, trn th trng c rt nhiu IDE pht trin Java tt nhng khng phi IDE no cng m bo c y cc phng din: min ph, i hi cu hnh my thp, d s dng, d ci t, v giao din p. Sau khi dng th, chng ti nhn thy Eclipse l mt IDE c th m bo tt cc yu cu trn. Ngoi ra, Eclipse cn c th c tch hp cc plug-in sao cho ph hp vi yu cu ngi s dng.
Ni l ci t, tht s bn ch cn gii nn file ci t download vo mt th mc(Folder) no m thi. Sau trong Folder mi, bn tm file eclipse.exe chy chng trnh. y l mn hnh u tin khi bn s dng Eclipse. nguyn nh mc nh hay thay i ni s lu cc cng vic ca bn, sau click chn "Use this as the default and do not ask again"

Cn y l mn hnh tip theo

Bn nn to mt shortcut icon cho eclipse screen desktop nh sau: kch phi vo C:\eclipse\eclipse.exe ->Send To -> Desktop (create shortcut). Vy l chng ta ci t xong JDK v Eclipse. Lc ny bn hon ton c th vit code v chy th nghim. Tuy nhin, bn cn tm hiu qua v thit lp bin mi trng cng nh

i nt v lp trnh hng i tng trc khi chng ta cng nhau vit nhng dng code u tin.
Bn vo y tham kho video hng dn ci t Eclipse

Thit lp cc bin mi trng


Trc ht bn tham kho nguyn vn ni v vic ci t bin Path ca Sun Microsystem: "You can run the Java 2 SDK without setting the PATH variable, or you can optionally set it as a convenience" i khi th ny: Nu sau khi vit code xong , bn lu file java cng th mc ci JDK, c th l bn lu trong th mc Bin, th bn hon ton c th bin dch v chy th chng trnh ca mnh m khng gp li no c, cng khng cn thit lp bin mi trng no c. Mcch chnh ca vic thit lp bin mi trng l bn c th chy cc chng trnh nh java.exe, javac.exe... t cc th mc khc nhau (M khng phi nhp Full Path). Tm li, vic thit lp bin mi trng nhm to thun li cho chng ta. Nu bn dng Eclipse chng hn, bn khng cn phi bn khon vic thit lp ny. C 2 bin bn cn thit lp: JAVA_HOME v PATH Copy hoc ghi ra giy ng dn th mc ci t. V d C:\Program Files\Java\jdk6\ nh trong phn ci t JDK. Sau , bn vo Control Panel -> System -> Advanced System Settings sau click vo"Environment Variables" button. Hoc Control Panel -> System, v chn Advanced tab sau click "Environment Variables" button nu bn ang dng Windows XP. Hoc bn vo bng cch Right Click ln My Computer, sau click vo Advanced Tab, trong phn System Variables bn click vo New to mt System Variables mi.

Trong ca s New System Variables, bn nhp JAVA_HOME vo Variable Name, nhp ng dn th mc ci JDK vo Variable Value(V d C:\Program Files\Java\jdk6\)

Tip tc bn click vo Path-->Edit..-->V nhp <Java Home>\binvo bin Path ging hnh di y. <Java Home>\bin c th nhp trc tip v d:C:\Program Files\Java\jdk6\bin hoc nhp ging hnh di %JAVA_HOME%\bin Bn nh c du ";" gia cc bin.

Nh vy l chng ta thit lp xong bin mi trng. Bn vo y tham kho video.

Gii thiu v lp trnh hng i tng


n gin, chng ta s b qua mi khi nim tru tng. Ch cn nh th ny: T thu "khai thin lp a" b mn lp trnh, c tng cng l 3 loi lp trnh, 3 phng php lp trnh: 1. 2. 3. Lp trnh tun t Lp trnh cu trc Lp trnh hng i tng

Thng thng, nhiu bn s rt m h vi khi nim Lp trnh hng i tng. Khoan hy ni ti nh ngha, chng ta ly mt v d v tm nghim ca phng trnh bc 2 chng hn phn bit.

Lp trnh tun t: Chng trnh c lp trnh theo phng php ny s yu cu ngi s dng tun t nhp cc hng s a-b-c, sau chng trnh s tnh Delta, sau cn c vo

cng thc v Delta m a ra li gii. Tm li l tng bc, tng bc mt, nu bn khng nhp hng a th chng trnh s i v thi hn cho n khi no bn nhp th s a ra li nhc nh bn tip tc nhp hng c... Lp trnh cu trc, hay cn gi l lp trnh theo hng th tc:Bi ton gii phng trnh bc hai s c chia ra thnh mt s cng vic, hay cn gi l th tc khc nhau. V d nh ta c th c cc th tc (cc hm) sau trong bi ton gii phng trnh bc hai: hm tnh Delta, hm nhp liu, hm so snh Delta... Lp trnh hng i tng: Mi th s c qui ra thnh cc i tng(Object). Trong v d ca chng ta, nu dng phng php lp trnh hng i tng ta c th coi bi ton gm 1 i tng (Object) l Phng trnh.i tng phng trnh ny c th tm coi gm c nhng tnh cht chung (d liu) l c hng s (mt hoc nhiu) v nghim (mt hoc nhiu).ng x (phng thc) ca Object phng trnh c th l:tip nhn cc hng s, tnh ton,a ra kt qu. Vi phng trnh bc hai ca chng ta chng hn, bn s da vo i tng phng trnh tnh ton. Tm li, ngi ta em gi tt c d liu v cc phng thc c lin quan vi nhau thnh mt nhm, chnh l i tng (Object)

Lp trnh hng i tng (OOP, t ch Anh ng object-oriented programming), l k thut lp trnh h tr cng ngh i tng. Nhng i tng trong mt ngn ng OOP l cc kt hp gia m v d liu m chng c nhn nhn nh l mt n v duy nht. Mi i tng c mt tn ring bit v tt c cc tham chiu n i tng c tin hnh qua tn ca n. Nh vy, mi i tng c kh nng nhn vo cc thng bo, x l d liu (bn trong ca n), v gi ra hay tr li n cc i tng khc hay n mi trng Lp trinh truyn thng l lp trnh cu trc hay lp trnh hng th tc. Mt bi ton c gii quyt bng cch chia ra thnh nhiu bi ton nh v thc hin thng qua cc chng trnh con. Phng php lp trnh ny c mt s hn ch nh:

Ngn ng khng phn chia r rng gia cp ci t v cp s dng. S trn ln khin chng trnh kh c kh sa.

Khng c tnh k tha.

OOP l phng php lp trnh ly i tng lm nn tng, c cc tnh cht c bn sau:

Tnh tru tng (abstraction): y l kh nng ca chng trnh b qua hay khng ch n mt s kha cnh ca thng tin m n ang trc tip lm vic ln, ngha l n c kh nng tp trung vo nhng ct li cn thit. Mi i tng phc v nh l mt "ng t" c th hon tt cc cng vic mt cch ni b, bo co, thay i trng thi ca n v lin lc vi cc i tng khc m khng cn cho bit lm cch no i tng tin hnh c cc thao tc. Tnh cht ny thng c gi l s tru tng ca d liu. Tnh tru tng cn th hin qua vic mt i tng ban u c th c mt s c im chung cho nhiu i tng khc nh l s m rng ca n nhng bn thn i tng ban u ny c th khng c cc bin php thi hnh. Tnh tru tng ny thng c xc nh trong khi nim gi l lp tru tng hay lp c s tru tng. Tnh ng gi (encapsulation) v che du thng tin (information hiding): Tnh cht ny khng cho php ngi s dng cc i tng thay i trng thi ni ti ca mt i tng. Ch c cc phng thc ni ti ca i tng cho php thay i trng thi ca n. Vic cho php mi trng bn ngoi tc ng ln cc d liu ni ti ca mt i tng theo cch no l hon ton ty thuc vo ngi vit m. y l tnh cht m bo s ton vn ca i tng. Tnh a hnh (polymorphism): Th hin thng qua vic gi cc thng ip (message). Vic gi cc thng ip ny c th so snh nh vic gi cc hm bn trong ca mt i tng. Cc phng thc dng tr li cho mt thng ip s ty theo i tng m thng ip c gi ti s c phn ng khc nhau. Ngi lp trnh c th nh ngha mt c tnh (chng hn thng qua tn ca cc phng thc) cho mt lot cc i tng gn nhau nhng khi thi hnh th dng cng mt tn gi m s thi hnh ca mi i tng s t ng xy ra tng ng theo c tnh ca tng i tng m khng b nhm ln.

Th d khi nh ngha hai i tng "hinh_vuong" v "hinh_tron" th c mt phng thc chung l "chu_vi". Khi gi phng thc ny th nu i tng l "hinh_vuong" n s tnh theo cng thc khc vi khi i tng l "hinh_tron".

Tnh k tha (inheritance): c tnh ny cho php mt i tng c th c sn cc c tnh m i tng khc c thng qua k tha. iu ny cho php cc i tng chia s hay m rng cc c tnh sn c m khng phi tin hnh nh ngha li. Tuy nhin, khng phi ngn ng nh hng i tng no cng c tnh cht ny.

Mt v d khc trong vic Mua bn xe hi: Nhng yu t lin quan l:


Cc kiu xe hi. Nhn vin bn hng. Khch hng.

Nhng hot ng lin quan n vic mua bn l:


Nhn vin bn hng a khch i coi xe. Khch hng chn xe Khch hng tr tin. Xe c giao cho khch hng

Trong Lp trnh hng i tng, mi vn c chia thnh nhiu i tng (Objects). Nh trn cc kiu xe, nhn vin, khch hng l nhng i tng. Chng ta cng cn bit mt s khi nim c bn trc khi tm hiu Java.

Lp (class)
Mt lp c th c hiu l khun mu to ra cc i tng. Trong mt lp, ngi ta thng dng cc bin m t cc thuc tnh v cc hm m t cc phng thc ca i tng. Khi nh ngha c lp, ta c th to ra cc i tng t lp ny. vic s dng c d dng, thng qua h thng hm to (constructor), ngi ta dng lp nh mt kiu d liu to ra cc i tng.

Lp con (subclass)
Lp con l mt lp thng thng nhng c thm tnh cht k tha mt phn hay ton b ccc tnh ca mt lp khc. Lp m chia s s k tha gi l Lp cha (parent class). Lp tru tng hay lp c s tru tng (abstract class) Lp tru tng l mt lp m n khng th thc th ha thnh mt i tng thc dng c. Lp ny c thit k nhm to ra mt lp c cc c tnh tng qut nhng bn thn lp cha c ngha (hay khng ngha) c th tin hnh vit m cho vic thc th ha. Phng thc (method) Phng thc ca mt lp thng c dng m t cc hnh vi ca i tng (hoc ca lp). V d nh i tng thuc lp in thoi c cc hnh vi sau: chung, chuyn tn hiu t sng sang dng nghe c, chuyn tn hiu ging ni sang dng chun, chuyn tn hiu ln tng i.v.v. Khi thit k, ngi ta c th dng cc phng thc m t v thc hin cc hnh vi ca i tng. Mi phng thc thng c nh ngha l mt hm, cc thao tc thc hin hnh vi c vit ti ni dung ca hm. Khi thc hin hnh vi ny, i tng c th phi thc hin cc hnh vi khc. V d nh in thoi phi chuyn tn hiu ging ni sang dng chun trc khi chuyn ln tng i. Cho nn mt phng thc trong mt lp c th s dng phng thc khc trong qu trnh thc hin hnh vi ca mnh. Ngi ta cn nh ngha thm vi loi phng thc c bit:

Hm to (constructor) l hm c dng to ra mt i tng, ci t cc gi tr ban u cho cc thuc tnh ca i tng . Hm hy (destructor) l hm dng vo vic lm sch b nh dng lu i tng v hy b tn ca mt i tng sau khi dng xong, trong c th bao gm c vic xa cc con tr ni ti v tr v cc phn b nh m i tng dng.

Nhiu ngn ng lp trnh c sn hm to mc nh (thng thng khng c tham s) v hm hu.

Thuc tnh (attribute) Thuc tnh ca mt lp bao gm cc bin, cc hng, hay tham s ni ti ca lp . y, vai tr quan trng nht ca cc thuc tnh l cc bin v chng s c th b thay i trong sut qu trnh hot ng ca mt i tng. Cc thuc tnh c th c xc nh kiu v kiu ca chng c th l cc kiu d liu c in hay l mt lp nh ngha t trc. Nh ghi, khi mt lp c thc th ho thnh i tng c th th tp hp cc gi tr ca cc bin ni ti lm thnh trng thi ca i tng. Mi thuc tnh ca mt lp cn c gi l thnh vin d liu ca lp . Thc th (dentity) Thc th ha (instantiate) l qu trnh khai bo c mt tn (c th c xem nh l mt bin) tr thnh mt i tng t mt lp no . Mt lp sau khi c tin hnh thc th ha c mt i tng c th gi l mt thc th. Hay ni ngc li mt thc th l mt i tng ring l ca mt lp nh trc. Nh cc bin thng thng, hai thc th ca cng mt lp c th c trng thi ni ti khc nhau (xc nh bi cc gi tr hin c ca cc bin ni ti) v do hon ton c lp nhau nu khng c yu cu g c bit t ngi lp trnh. Cng cng (public) Cng cng l mt tnh cht c dng gn cho cc phng thc, cc bin ni ti, hay cc lp m khi khai bo th ngi lp trnh cho php cc cu lnh bn ngoi cng nh cc i tng khc c php dng n n. Ring t (private) Ring t l s th hin tnh cht ng mnh nht (ca mt c tnh hay mt lp). Khi dng tnh cht ny gn cho mt bin, mt phng php th bin hay phng php ch c th c s dng bn trong ca lp m chng c nh ngha. Mi n lc dng trc tip n chng t bn ngoi qua cc cu lnh hay t cc lp con s b ph nhn hay b li.

Cu trc mt chng trnh Java

C l chng ta hy th bn ti v cu trc ca mt chng trnh ni chung. V d nh mt bi vn, ta s c cu trc bao gm:


M bi Thn bi Kt lun

Cc ngn ng lp trnh ni chung cng s c cu trc tng t:


Khai bo: cha cc khai bo v ti nguyn s s dng Thn chng trnh: l phn chnh, bao gm cc hm, cc lnh m t cng vic sc thc hin. Gii phng b nh

l ni chung, ty vo tng ngn ng c th s c cc cu trc khc nhau. y l mt v d ca chng trnh C++ int main () { cout << " Hello World "; return 0; } Cn y l chng trnh tng t vit bng Java public class HelloWorld {

public static void main(String[] args) { System.out.println("Hello World"); }

} Phn xanh c th coi l phn khai bo, phn c th coi nh l phn thn chng trnh.

Tm thi cha bn ti vic gii phng b nh. Ni chung, mt chng trnh Java c chia thnh cc lp (class) ring bit. Tht ra y lun c s ln ln v m h cho cc bn mi lm quen vi Java. Nhiu ngi trong chng ta quen thuc vi h thng Th mc v Tp tin ca Windows. Mt chng trnh Java c th ch gm c mt File cng c th gm nhiu File khc nhau. Cc file ny c th nm cng Folder, cng c th nm trong cc Folder khc nhau. Class nh mt chng trong File truyn ca bn. Bn c th vit nhiu truyn v lu trong vi Folder khc nhau. Mi Folder nh vy gi l mt gi hay Package. Tm li: -Mt chng trnh Java c th bao gm mt hay nhiu Package. -Mi package s c mt hay nhiu File. -Trong mi File s c mt hay nhiu Class. Nu mun s dng "bt c ci g" Package khc, chng ta phi dng pht biu "import" Dng c bn ca mt lp c xc nh nh sau : class classname{ ... memberVariableDeclarations ... methodDeclarations ... }

V d:

Class classname{

int num1,num2; Show()

// Khai bo bin vi cc du phy gia cc bin { // Method trong Class

statement (s); // Kt thc bi du chm phy

} Lp (Class) trong Java:

Trong Java, mt lp (class) l mt tp hp cc attribute v cc phng thc (method-cn gi l cc hm thnh vin). Lp l c s to to ra cc i tng (Object). V d v ci xe chng hn: Lp (class) xe s c nhng attribute nh s ch ngi, mu sc...v cc method nh chy, phanh, dng... Hay nh trong dng c bn pha trn num1, num2 l attributes cn Show() l mt Method. Chng ta tm dng y. Chng ti mun bn c mt ci nhn khi qut nn tm thi chng ta khng bn ti chi tit. Phn sau chng ta s quay li vi cu trc chi tit ca mt chng trnh Java.

Chng trnh u tin


Chng trnh: Chng ta hy bt u t chng trnh Java c in nht vi mt ng dng n gin. Chng trnh sau y cho php hin th mt

thng ip: // This is a simple program called "First.java" class First{

public static void main(String args[]) {

System.out.println("My first program in Java");

}}

Tn file ng vai tr rt quan trng trong Java. Trong Java cc m cn phi gom thnh cc lp. Bi vy tn lp v tn file c th trng nhau. Do Java phn bit rch ri ch in hoa v ch in thng (case-sensitive). V d tn file 'First' v 'first' l hai file khc nhau. t tn fle bn nn lu :

Nu bn c import mt lp v d tn l MyClass, th tn file bn khng c t l MyClass . Nu bn to file vi mc ch to lp MyClass, th khi lu file bn phi lu vi tn file l MyClass.java

bin dch m ngun, ta x dng trnh bin dch javac. Trnh bin dch xc nh tn ca file ngun ti dng lnh nh m t di y: C:\jdk1,2,1\bin>javac First.Java Trnh dch javac to ra file First.class cha cc m "bytecodes". Nhng m ny cha th thc thi c. chng trnh thc thi c ta cn dng trnh thng dch "java interpreter" Lnh c thc hin nh sau: C:\jdk1,1,1\bin>java First

Kt qu s hin th trn mn hnh nh sau: My first program in Java

Phn tch: // This is a simple program called "First.java" K hiu "// " dng thuyt minh dng lnh. Trnh bin dch s b qua dng thuyt minh ny. Java cn h tr thuyt minh nhiu dng. Loi thuyt minh ny c th bt u vi /* v kt thc vi */ /*This is a comment that extends to two lines*// *This isa multi line comment */ Dng k tip khai bo lp c tn First. to mt lp thm ta bt u vi t kho class, k n l tn lp (v cng chnh l tn file). class First Tn lp ni chung nn bt u bng ch in hoa. T kho 'class' khai bo nh ngha lp. 'First' l nh danh cho tn ca lp. Mt nh ngha lp trn vn khng nm gia hai ngoc mc (curly braces) ng v m. Cc ngoc ny nh du bt u v kt thc mt khi cc lp c nh nghi. public static void main(String args[ ]) y l phng thc chnh, t y chng trnh bt u vic thc thi ca mnh. Tt c cc ng dng java (Dng application) u s dng mt phng php "main" ny. Chng ta s tm hiu tng t trong pht biu ny. T kho 'public' l mt ch nh truy xut. N cho bit thnh vin ca lp c th c truy xut t bt c u trong chng trnh. Trong trng hp ny, phng thc "main" c khai bo 'public', bi vy JVM c th truy xut phng thc ny. T kho 'static' cho php main c gi ti m khng cn to ra mt th hin (instance) ca lp. Nhng trong trng hp ny, bn copy ca phng thc main c php tn ti trn b nh, thm ch nu khng c mt th hin ca lp c to ra. iu ny rt quan trng v JVM trc tin gi phng thc main thc thi

chng trnh. V l do ny phng thc main cn phi l tnh (static). N khng ph thuc vo cc th hin ca lp c to ra. T kho 'void' thng bo cho my tnh bit rng phng thc s khng tr li bt c gi tr no khi thc thi chng trnh. Phng thc 'main()' s thc hin mt s tc v no , n l im mc m t tt c cc ng dng Java c khi ng. 'String args[]' l tham s dng trong phng thc 'main'. Cc bin s trong du ngoc n nhn tng thng tin c chuyn vo 'main'. Nhng bin ny l cc tham s ca phng thc. Thm ch ngay khi khng c mt thng tin no c chuyn vo 'main', phng thc vn c thc hin vi cc d liu rng khng c g trong du ngoc n. 'args[]' l mt mng kiu "String". Cc i s (arguments) t cc dng lnh c lu vo mng. M nm gia du ngoc mc ca 'main' c goi l 'method block'. Cc pht biu c thc thi trong main cn c ch r trong khi ny. System.out.println("My first program in Java"); Dng lnh ny hin th chui "My first program in Java" trn mn hnh. Pht biu 'println()' to ra mt cng xut (output). Phng thc ny cho php hin th mt chui nu chui c a vo vi s tr gip ca 'System.out'. y System l mt lp nh trc, n cho php truy nhp vo h thng v 'out' l mt chui xut c kt ni vi du nhc (console).

Thc hnh Hello World


Trong bi thc hnh ny, chng ti mun bn th vit code, dch v chy th chng trnh Hello World vi 2 cch khc nhau, mc ch l bn tht s hiu vn . Sau ny, chng ta s ch dng Eclipse m thi. Dng Notepad v Command Line M Notepad v nhp vo chng trnh sau, lu li vi tn HelloWorld.java // This is a simple program called "HelloWorld.java"

class First{

public static void main(String args[]) {

System.out.println("Hello World");

}}

Vo Start --> Run g cmd ca s dng lnh m ra Chuyn i vo th mc lu tr tp tin v g javac HelloWorld.java Kim tra li ni dung th mc: Nu bn thy c thm file HelloWorld th bn dch thnh cng Dng lnh java HelloWorld chy th chng trnh (Xin lu l ch java HelloWorld, khng phi java HelloWorld.class). Nu mn hnh hin ln ch Hello World th bn hon thnh chng trnh u tin ca mnh.

Dng Eclipse

Vo menu File -->New --->Java Project to mt d n Java mi. Ca s sau s xut hin cho php nhp tn ca d n. V d: Tn d n l Test

Click vo Finish sang trang k tip.Trong Test project, bn to mt lp tn l First bng cch vo menu File --> New -->Class ca s hin ra. Sau khi nhp tn First vo Name

Nhp chng trnh HelloWorld vo khung gia nh hnh bn di. Khi bn Click nt Save m khng thy li th coi nh bn dch hon tt chng trnh, click vo nt Run chy, bn s thy dng ch Hello World bn di. Vy l bn thnh cng!

Mi bn vo y tham kho Video

Trc khi tip tc


Hy cng nhau n li nhng g ta tho lun

Lp trnh (Programming) l mt dng dch t ngn ng t nhin thnh ngn ng my thng qua mt ngn ng lp trnh (Programming language). Java l mt ngn ng lp trnh hung i tng: Mi th u qui v i tng (Object) Mi chng trnh Java u bao gm cc lp (Class) Class c th coi nh l mt khi nim, trong khi Object l mt m hnh tht. V d: Class Ngi -->Object : anh A, ch B; Class xe --> Xe Honda, xe Toyota C nhiu cch vit code, dch v chy mt chng trnh. Thng thng cc lp trnh vin s dng mt IDE.

Thng thng nhiu bn s d dng vt qua vic vit code cho chng trnh n gin u tin. Tuy nhin, cng rt nhiu bn s

ch dng bc ti . Vn l d ngn ng no, cng s c rt nhiu khi nim, c php...Bn cn phi kin tr. Cng nh khi chng ta hc ngoi ng. S rt nhiu ngi d dng nm bt nhng cu nh "This is a book" hay "That is a pen" . Nhngi khi chng ta c dm chn ti ch, khng tin xa hn c na. Bn cn c gng i t nht l 51% con ng. Thc hnh l cha kha ca thnh cng. Chng ta s c gng i t n gin n phc tp, cc v d thc hnh s da vo v d n gin nht v s pht trin dn dn.

Lp (Class) trong Java


Speak one way you simply lp is a template, but objects (i tng) is the following sn phm make to 'based template tc is a class. All objects are property is for one grade chung Property and hnh vi. Each grade definition an entity, during which each Objects is one th hin execute the. Do you may also nh ngha an grade within an grade non. Nh bn was in the first, Class of that will make a into the program of you are . Khai bo grade Kh cm khai bo an grade, you need to determine the data and its method of grade it. External ra you are also need for hiu r xy dng . class MyClass {

/ / Trng, xy dng, v khai bo phng thc

For example can tool of grade (lp) xe p (xe p) lp xe p cng cng {/ / lp xe p c ba lnh vc cng cng int nhp; int cng c; int cng tc ; / / lp xe p c mt trong xy dng xe p cng cng (int startCadence, startSpeed int, int startGear) {gear = startGear; nhp = startCadence; tc = startSpeed;} / / lp xe p c bn phng php public void setCadence (int newValue) {nhp = newValue;} public void setGear (int newValue) {gear = newValue;} public void applyBrake (int lng gim) { -= lng gim tc ;} public void tng tc (int tng) + = {tc tng;}

} Do not is too busy tm about chi tit. You will found lp has full Fields, contructor and its format Phng (Phng php)

Based on this form you can generate the Objects xe p different like xe p ua, xe p hnh the ...

We ta temporary stop here. You are here Class.

reference video Java

Lp Objects and is a hai concept you need the nam Firmware tht.

Lp (Class) trong Java - Phn 2


Nh cp trong phn trc. Class v Object l hai khi nim m chng ti mun bn c bit nm vng. nm vng class v object, bn nn c mt ci nhn tng qut. Chng ta lp trnh cho rt nhiu mc ch: t gii mt bi ton n gin nh tm nghim ca phng trnh; v mt hnh nh ln mn hnh; mt ch tri ch n gin; hin ln thng tin sau khi ngi s dng nhp d liu...cho ti nhng chng trnh iu khin my mc, tnh ton phc tp... Bn cn nm r mc ch lp trnh, sau

th hnh dung chng trinh s gm nhng i tng no. Cch n gin nht l t mt ci ln chia dn ra thnh nhng ci nh. Chng ta tip tc vi mt v d: Gi s bn mun vit mt chng trnh ch n gin chng hn.

Th ngh xem chng ta cn g? Mt ln na xin bn nh l hy thoi mi, ng qu cng nhc. Quay li v d ca chng ta, c l chng ta s cn mt cng c v hnh ging hnh trn. Chng ta cng cn mt cng c khc xem xt nhng g ngi s dng nhp vo c ng khng.C l nh vy l ri. Bn ng ch ti chi tit, hy nhn tht tng qut. Lun nh l chng ta cn i t n gin v mi ci ch l gi , bn hon ton c th lm mi chuyn. Vi cng c v hnh, tm gi l Lp V Hnh. Ta s th ngh xem ta cn g? Ta cn phi v ng thng, ta cn phi t mu. Ta cn s ngang, dc. Ta cng cn mt cng c to sn nhng s liu cho ch. T suy lun trn, ta tm coi nh Lp V Hnh s c cc d liu (Attibutes) l s ngang, dc. Lp ny cng s c mt phng thc (Method) tm gi l DrawCross v ch v mt phng thc tm gi l CreateWords to sn s liu. Bn c th to mt b khung, i khi nh sau(Khoan bn ti Public hay Static....):

class DrawCrossWord{ int numberV; int numberH; DrawCross() { }

CreateWords () { } } y ch l ci nn bn d hnh dung v class m thi. Bn c th thm bt, sa i...ty . Hy tip tc thm mt bc na. Ta thy phng thc (Method) DrawCross mun v c th phi c s liu, v d nh v bao nhiu hng ngang-bao nhiu hng dc. Ni cch khc phng thc ny cn thm Tham S. Vy ta c th thm nh sau:

class DrawCrossWord{ int numberV; int numberH; DrawCross(numberV,numberH) { ...... ...... }

CreateWords () { ...... ...... } }

n gin ta coi nh xong v c bn lp DrawCrossWord (Khng chi tit, cng khng bn ti phng thc CreateWords). Mun v ch, bn phi c mt Object, Object ny to ra tlp DrawCrossWord bng t kha New V d: DrawCrossWord object1= new DrawCrossWord(); Hy ngh ti khi bn v li mt hnh vung m c hay thy gio v mu cho bn trn bng. Ngha l n khng ging hon ton, nhng c y 4 cnh v 4 gc vung. Object1 bn va to bng t kha New cng vy, n c y cc d liu v phng thc nh lp DrawCrossWor. Tuy nhin, nh phn trc, bn lu lp th tru tng, cn i tng th c th. D liu ca lp th tru tng, cn i tng th phi c th. Mun dng Object1 v, bn phi cung cp d liu c th, v d 5 hng ngang v 5 hng dc. Ta s c DrawCrossWord object1= new DrawCrossWord(); object1.DrawCross(5,5); Vy l bn to ra mt lp, t lp bn to ra mt i tng. Dng mt phng thc ca i tng , bn v ra ch 5 hng ngang v 5 hng dc. Chng ta s xt mt v d na trong phn sau.

Lp (Class) trong Java - Phn3


Chng ta s mt ln na coi li cu trc ca mt chng trnh Java. Cu trc ca mt chng trnh Java Nh v d Hello World m chng ta lm, bn c th thy chng trnh Hello World ch c duy nht 1 lp, v lp ny ch c duy nht 1 hm main(). Xin lu l mi chng trnh (Dng Application) Java phi c 1 hm (phng thc) main(). class First{

public static void main(String args[]) {

System.out.println("Hello World");

}} y chnh l cu trc c bn nht ca mt chng trnh Java. Tuy nhin nh chng ta cng cp trong phn trc, mt chng trnh Java thng thng c nhiu lp v cc lp c th:

Trong 1 file duy nht. Trong nhiu file khc nhau, v cc file ny c th nm trong cng mt Package hay nm trong nhiu Package khc nhau(th mc hay Folder,cn gi l mt gi). Ni cch khc, chng trnh c chia thnh cc lp hoc cc gi ring bit. Nhng gi ny s c ch dn trong chng trnh. Thng tin ny c ch ra vi s tr gip ca pht biu nhp "import". Mi chng trnh c th c nhiu hn mt pht biu nhp.

Di y l mt v d v pht biu nhp: import java awt.*; Pht biu ny nhp gi 'awt'. Gi ny dng to mt i tng GUI. y java l tn ca th mc cha tt c cc gi 'awt'. K hiu "*" ch tt c cc lp thuc gi ny. Trong java, tt c cc m,bao gm cc bin, v cch khai bo nn c thc hin trong phm vi mt lp. Mt chng trnh n gin c th ch c mt vi lp. Nhng lp ny c th m rng thnh cc lp khc. Mi pht biu u c kt thc bi du chm phy ";". Mi lp hay phng thc u c bt u v kt thc bi cp du "{}". Chng trnh cn c th bao gm cc ghi ch, ch dn. Khi dch, chng trnh dch s t loi b cc ghi ch ny.Tm li ta c th c nhng dng cu trc sau: class abc { class cdf { void method1() { } void method2() { } }

class ghk { } public static void main(String[] args) { ....... } }

import ...... import...... class abc { class cdf { void method1() { } void method2() { } } class ghk { } public static void main(String[] args) { ....... } } 1. 2. nhau. 3. Cc Method lun Phi c tr tr v, v v vy phi lun c Kiu ca tr tr v (S, ch....). Trong v d, chng ta ghi Void, tm hiu l "g cng c"!! Dng th nht tt c gi gn trong mt file, hoc trong Dng th hai, cc lp nm trong cc Package khc

cng mt Package

V d: n gin, chng ta s ly chng trnh Hello World lm v d v lp v i tng. y l chng trnh m chng ta thc hnh trong bi trc: // This is a simple program called "HelloWorld.java" class First{

public static void main(String args[]) {

System.out.println("Hello World");

}} Chng ta s ln lt thc hnh nh sau: 1. 2. 3. To mt lp cng Package vi lp First To mt lp khc Package vi lp First To mt lp nm trong lp First

Thc hnh Class v Object Phn 1


Chng ta s bin i chng trnh Hello World. Chng trnh nguyn thy ch gm duy nht 1 File v chng ta cng khng cp g n Package. Phn ny chng ta s to mt chng trnh gm 2 Class khc nhau, cng nm trong 1 Package. Lp th nht s c mt Method gi l printString() c mc ch in ra mn hnh mt dng ch bt k Lp th hai, ta s to ra mt Object t lp th nht. Sau gi phng thc printString() in dng ch Hello World ln mn hnh. Mc ch bn hiu: 1. 2. 3. M hnh Package---> Class Cch truy cp 1 class t mt class khc trong cng Cch to mt Object bng lnh New

Package

4.

Cch truy cp cc Method ca cc Class.

Chng ta bt u: Vo menu File -->New --->Java Project to mt d n Java mi. Ca s sau s xut hin cho php nhp tn ca d n. V d: Tn d n l Test2

Click vo Finish sang trang k tip.Trong Test2 project, bn to mt lp tn l First bng cch vo menu File --> New -->Class ca s hin ra. Sau khi nhp tn First vo Name

Click vo Finish sang trang k tip.Trong Test2 project, bn to thm mt lp tn l Second bng cch vo menu File --> New -->Class ca s hin ra. Sau khi nhp tn Second vo Name

Bn s thy 2 tab First.java v Second.java. Chng ta s to Method printString() trong lp Second.java Click vo tab Second.java v nhp vo nh sau (Bn ch cn nhp phn in m, cc phn kia Eclipse lm sn cho bn) Tt c u n gin vi bn ngoi tr dng "String displayString".Tm thi bn ch cn bit l khai bo cho mt tham s kiu chui, tc l nhng dng ch nh "Hello World" chng hn. package Package2; public class Second { void printString(String displayString) { System.out.println(displayString); } }

Lu li nu khng thy li (Nhng k hiu mu ) th coi nh bn bin dch thnh cng File Second.java Tip tc vi lp First.java. Click vo tab First.jav v nhp vo nh sau (Bn ch cn nhp phn in m, cc phn kia Eclipse lm sn cho bn) package Package2; public class First { public static void main(String[] args) { Second sc = new Second(); sc.printString("Hello World"); } } Lu li nu khng thy li (Nhng k hiu mu ) th coi nh bn bin dch thnh cng File First.java Bn hy chy th, click vo nt Run chy, bn s thy dng ch Hello World bn di. Vy l bn thnh cng!

Chng ta to mt Object tn l sc t Class Second, sau ta gi phng thc printString() in dng ch "Hello World" ln mn hnh.y l cch gi mt phng thc: Object.methodName();

Thc hnh Class v Object Phn 2


Tip tc gi nguyn Project Test2. Phn ny chng ta s to mt chng trnh gm 2 Class khc nhau, nm trong 2 Package. Lp th nht nm trong Package tn l Package2b s c mt Method gi l printString() c mc ch in ra mn hnh mt dng ch bt k

Lp th hai, vn nh c nm trong Package2, ta s to ra mt Object t lp th nht. Sau gi phng thc printString() in dng ch Hello Viet Nam ln mn hnh. Mc ch bn hiu: 1. 2. 3. 4. M hnh Package---> Class Cch truy cp 1 class t mt class khc trong cc Cch to mt Object bng lnh New Cch truy cp cc Method ca cc Class.

Package khc nhau

Chng ta bt u: Bn hy click vo Test2, mc ch ch m bo l chng ta ang lm vic vi Project Test2 m thi. Sau ny bn hon ton c th d dng nh c v tr.

Tip theo, bn vo File--> New---> Package to mt Package mi. t tn package ny lPackage2b

Click vo Package2b trong ca s bn tri nh bn lm vi Test2, mcch l m bo chng ta s lm vic vi Package2b. Sau bn to mt Class mi theo cc bc trong phn trc. t tn cho lp ny l Third.java Click vo tab Third.java v nhp vo tng t nh bn lm vi lp Second.java package Package2b; public class Third { void printString(String displayString) { System.out.println(displayString); } } Tip theo, trong lp First.java, bn thm vo hai dng nh sau: package Package2; public class First { public static void main(String[] args) { Second sc = new Second();

sc.printString("Hello World"); Third th = new Third(); th.printString("Hello Viet Nam"); } } Bn s thy bo li:

L do l v bn truy xut mt lp t mt Package khc. Hy thm dng import sau vo First.java package Package2; import Package2b.*; public class First { public static void main(String[] args) { Second sc = new Second(); sc.printString("Hello World"); Third th = new Third(); th.printString("Hello Viet Nam"); }

} Bn vn tip tc nhn c li. Ln ny l vi Method printString() Bn hy quay li Third.java v thm public pha trc Method printString() nh sau (Tm thi chng ta coi nh lm vy u cng c th truy xut printString()) package Package2b; public class Third { public void printString(String displayString) { System.out.println(displayString); } } By gi bn sa xong li v hon ton c th chy th chng trnh t First.java. Bn s thy 2 dng: Hello World Hello Viet Nam Bn to mt Object th t lp Third ca gi Package2b, bn ngoi gi Package2 cha chng trnh chnh ca bn. Chng ta tm ngh y.

Thc hnh Class v Object Phn 3


Phn ny bn s thc hnh vi cc lp xp lng vo nhau (Nested Classes) Cn lu l c 2 loi Nested Classes

Kiu Static: c nh ngha vi t kha static. Cn c gi l static nested classe Kiu Non-static: Cn c gi l inner classes.

y l dng c bn ca 2 loi :

class OuterClass {

...

static class StaticNestedClass {

...

class InnerClass {

...

-Kiu Non-static c th truy xut trc tip cc thnh vin khc ca Outer Clas

Ngc li, mun truy cp Non-static class (T ngoi vo trong Outer--->Nes Bn phi to mt Object t Outer class bng New OuterClass outerObject = new OuterClass()

Sau ta phi dng c php sau: OuterClass.InnerClass innerObject = outerObject.new InnerClass();

-Kiu Static khng th truy xut trc tip cc thnh vin khc ca Outer Class

Mun truy xut (T trong ra ngoi Nested--->Outer) phi thng qua mt Objec

OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNested

Ta s lm thc hnh hiu r hn.

Tip tc gi nguyn Project Test2.

Phn ny chng ta s to mt chng trnh gm 3 Class khc nhau, nm trong mt

Lp th nht tn l First chnh l lp m ta to trong 2 phn trc. Lp ny cn s c hm main() v cc khi to nhm in cc chui ra mn hnh.

Lp th hai tn l FirstB ng vai tr l Static class. FirstB s c mt Method gi l ra mn hnh mt dng ch bt k.

Lp th ba tn l FirstC ng vai tr l Non-Static class. FirstC s c mt Method g ch in ra mn hnh mt dng ch bt k.

Mc ch bn hiu: 1. 2. 3. 4. M hnh Package---> Class Cch truy cp cc class Static v Non-static Cch to mt Object bng lnh New Cch truy cp cc Method ca cc Class.

Chng ta bt u: T trong ra ngoi(Nested class--->Outer class)

Bn hy click vo tab First thay i code ca First.java. Bn hy thm 2 class v nh sau:

package Package2; import Package2b.*; public class First { public void printFirst(String displayString) { System.out.println(displayString); } public static void main(String[] args) { Second sc = new Second(); sc.printString("Hello World"); Third th = new Third(); th.printString("Hello Viet Nam"); } public static class FirstB { public void printFirstB(String displayString) { System.out.println(displayString); printFirst("Hello from Outer"); } } public class FirstC { public void printFirstC(String displayString) { System.out.println(displayString); printFirst("Hello from Outer"); } } } Mc ch l chng ta th gi phng thc printFirst() ca Outer Class (First) t static class.Bn s thy bo li nh hnh di:

l v kiu static khng th truy xut trc tip cc thnh vin khc ca Out hp ca chng ta l First class). Hy coi li trn. Bn phi thay printFirst("Hello fro mi nh sau: public static class FirstB { public void printFirstB(String displayString) { System.out.println(displayString); First.FirstB nestedObject = new First.FirstB(); nestedObject.printFirstB("Hello from Outer"); } } Lc ny bn s khng cn gp li na. T ngoi vo trong (Outer class ---> Nested class) Bn hy thm hai dng sau vo hm main() ging bn di: public static void main(String[] args) { Second sc = new Second(); sc.printString("Hello World"); Third th = new Third(); th.printString("Hello Viet Nam"); FirstC fc = new FirstC(); FirstB fb = new FirstB();

} Bn s nhn c li trong cu lnh "FirstC fc = new FirstC();":

L do v ta khng th truy xut trc tip kiu Non-static t bn ngoi (Outer class-Object. Bn to mt Object t Outer class sau dung c php sau: OuterClass.InnerClass innerObject = outerObject.new InnerClass();

C th, bn thay "FirstC fc = new FirstC();" bng hai dng nh sau: First f = new First(); First.FirstC innerObject = f.new FirstC();

Bn s khng cn b li na:

Bn hy xa "nestedObject.printFirstB("Hello from Outer");" v "printFirst(" trong2 class FirstB v FirstC. Sau thm vo hm main() nh sau: public static void main(String[] args) { Second sc = new Second(); sc.printString("Hello World"); Third th = new Third(); th.printString("Hello Viet Nam"); FirstB fb = new FirstB(); fb.printFirstB("Hello from FirstB"); First f = new First(); First.FirstC innerObject = f.new FirstC(); innerObject.printFirstC("Hello from FirstC"); }

By gi bn c th chy chng trnh m khng b li.y l ton b chng trn b li bn c th copy v paste thng vo file First.java:

package Package2; import Package2b.*;

public class First { public void printFirst(String displayString) { System.out.println(displayString); } public static void main(String[] args) { Second sc = new Second(); sc.printString("Hello World"); Third th = new Third(); th.printString("Hello Viet Nam"); FirstB fb = new FirstB(); fb.printFirstB("Hello from FirstB"); First f = new First(); First.FirstC innerObject = f.new FirstC(); innerObject.printFirstC("Hello from C"); } public static class FirstB { public void printFirstB(String displayString) { System.out.println(displayString); First.FirstB nestedObject = new First.FirstB(); } } public class FirstC { public void printFirstC(String displayString) { System.out.println(displayString); } } } Chng ta tm dng y

Trn file for Class and Object


We ta Please re a number trn vn lin quan to Class and Object. -Chng trnh Java normal including multiple C l a s s . Lp (Class) including the followingMt t t r i b u t e s and M e t h o d s

-Object the following is the sn phm generate form tc is a word Class -Class normal to be: 1. 2. 3. File one is chung, says is the way non lng nhau in a File is in the different chung but a directory hay trn gi File is in the different on the different trn gi.

Class Main

-Gi as the folder trong my tnh -Mun use unexpected c something in the property Class gi non ta be NHP KHU -This is a most as base of a program as ng dng Java classFirst{publicstaticvoidmain(Stringarg s [ ]) { S y s t e m . o u t . p r i n t l n (" H e l l o W o r l d " ) ; } }

- Xin lu for lng nhau Cc lp hc

1. out in 2. 3.

Khng tnh : be . word in ra outside is not the words Tnh : be . outside the word trong Not in ra word out. With the following is not what you must use the Object

Access Levels
Chng ta thc hnh 3 bi v Class v Object. Chng ti c bit nhn mnh tm quan trng ca phn ny v nu bn mun i su tm hiu Java, bn phi nm vng hai khi nim Class v Object.

Hy thc hnh vi ln 3 bi trc. Khi bn thnh tho v hiu r vn , bn s d dng nm bt mi th. Phn ny chng ta tm hiu v mc ch nh truy xut (Access Level) Nh bn thy trong bi thc hnh th 3, nu ta khng dng t kha Public, ta s nhn c thng bo li. l v lin quan n mc truy xut. Access Level: Ta thy vic truy xut c th p dng cho cc truy xut bin, phung thc, lp. C cc mc truy xut chnh p dng cho c Bin-Phng thc-Lp nh sau: No Modifier: L mc Default- Mc nh. Ch thy v truy xut c trong cng Package Private : Ch thy v truy xut c trong cng Class Protected: Ging Default cng thm cc Class "extend" t lp hin hnh(subClass). Public : C th nhn thy v truy xut t mi Package v mi Class y l bng tm tt quyn truy xut (Y=Yes; N=No): Modifier Public Own Class Y Same Package Y Y Y N World Y N N N

Subclass Y Y N N

Protected Y Default Private Y Y

Gii thch: Ct Own Class: Th hin cc member cng mt Class c th truy xut cc thnh vin (member) ca lp c hay khng da vo ch nh (Modifier) ca thnh vin . C th l d c ch nh private hay public...Cc member ca Class vn truy xut trc tip cc memberca chnh class .

Ct Same Package: Th hin cc member trong cng Package c th truy xut cc thnh vin (member) ca Package c hay khng da vo ch nh (Modifier) ca thnh vin . C th ngoi tr nu thnh vin ch nh l private, cc member trong Package c th truy xut mi member khc. Ct SubClass: Th hin mt subclass khc Package c th truy xut cc thnh vin (member) ca package cha own class c hay khng da vo ch nh (Modifier) ca thnh vin . Xin lu l cc subclass l cc class con ca mt class da vo lnh "extend" cn gi l derived class, extended class, hay child class. Class gc goi l superclass hay parent class. Cc subclass c th nm cng hoc khc package, trong trng hp ny ch p dng cho khc package. Cng package p dng nh trng hp trn. Ct World: Th hin tt c cc Class trong cc Package khc c th truy xut cc phn t khc c hay khng da vo ch nh (Modifier) ca phn t . Chng ta s bn tip v Access Level trong phn sau.

Access Levels phn 2


Access Level cng khng d th hn Class v Object. Chng ta s lm vi v d. Chng ta s vn gi nguyn bi thc hnh c (C l chng my chc, chng trnh ca chng ta s thnh mt chng trnh v i! ) Bn vo Package2, to mt lp mi tn Base. Sau nhp vo nh sau: package Package2; public class Base { public String publicStr = "publicString"; protected String protectedStr = "protectedString"; String defaultStr = "defaultString"; private String privateStr = "privateString"; public void print() { System.out.println("Package2.Base has access to"); System.out.println(" " + publicStr); System.out.println(" " + protectedStr); System.out.println(" " + defaultStr);

System.out.println(" Base b = new Base(); System.out.println(" System.out.println(" System.out.println(" System.out.println(" } }

" + privateStr); // -- other Base instance b." + b.publicStr); b." + b.protectedStr); b." + b.defaultStr); b." + b.privateStr);

Tt c attribute ch l cc bin String. Chng ta thit lp cc mc truy xut khc nhau cho cc bin kiu String ca Class Base, mc ch l xem th t nhng ni khc truy xut cc bin ra sao, c hay khng.

Tip theo, bn vo First.java thm mt dng nh sau: package Package2; import Package2b.*; public class First { public void printFirst(String displayString) { System.out.println(displayString); }

public static void main(String[] args) { Second sc = new Second(); sc.printString("Hello World"); Third th = new Third(); th.printString("Hello Viet Nam"); FirstB fb = new FirstB(); fb.printFirstB("Hello from FirstB"); First f = new First(); First.FirstC innerObject = f.new FirstC(); innerObject.printFirstC("Hello from C"); new Base().print();

} public static class FirstB { public void printFirstB(String displayString) { System.out.println(displayString); First.FirstB nestedObject = new First.FirstB(); } } public class FirstC { public void printFirstC(String displayString) { System.out.println(displayString); } } } Dng new Base().print(); l mt dng rt gn, bn hon ton c th vit theo kiu c: Base bs = new Base(); bs.print(); Sau khi Save v khng thy li, bn click vo Run chy th chng trnh. Ngoi nhng dng c, bn s thy thm: Package2.Base has access to

publicString protectedString defaultString privateString b.publicString b.protectedString b.defaultString b.privateString Bn rt ra c iu g? Th nht: Trong bn thn class Base, cho d bn c t mc truy xut (Modifier) ca cc bin String l g, ni rng ra l d bn c t Modifier ca cc Member l g th cc thnh phn khc trong lp vn truy xut trc tip c. Bn tham kho li ct Own Class trong phn trc. Th hai: Trong cng mt gi nh trng hp Same Package, nu bn t mc truy xut lprivate th chng ta khng th truy xut trc tip c. Bn th sa li private void print(); Bn s nhn c li trong First.java Xin lu : mc class, chng ta ch c Public, Abstract hay Final (Chng ta s bn sau vAbstract v Final). C ngha l bn s khng th "th" t mc truy xut ca class Base l private class Base() c. Chng ta tm dng y. Phn sau chng ta s tip tc bn v Access Level.

Access Levels phn 3


Nh phn trc bn ti: 1. 2. Access Level khng n gin Access Level c th p dng cho Class, Method hay nh

v d m ta lm trong phn trc thng qua Class Base, access level cn p dng cho bin (variable). Thm ch sau ny, bn s thy access level cn p dng cho Constructor, Interface. 3. Tm thi cho n thi im ny, chng ta s ch coi nh access level p dng cho 3 loi:Class, Method v Variable.

Bng di y tm tt phm vi p dng ca access level:

Modifier public private protected abstract final native volatile

Method Yes Yes Yes Yes Yes Yes No

Variable Yes Yes Yes No Yes No Yes

Class Yes Yes Yes Yes Yes No No

Ngoi nhng modifier nh public, private...m chng ta tho lun, Java cn cung cp cc modifier sau, vic gii thch s rt ngn gn v nhiu khi nim chng ta cha bn ti, tm thi chng ta s lit k v gii thch ngn gn: Static: Phng thc c th c gi m khng cn n i tng. Abstract : Ng rng phng thc khng c code bn trong v n s c b sung cc lp con (subclass). Final: Phng thc khng th c tha k hoc ghi (Overridden). Native: Ch ra rng phn thn ca phng thc c vit trn cc ngn ng khc Java v d C, hoc C++. Synchronized: S dng vi phng thc trong qu trnh thc thi threads. Volatile: c s dng vi cc bin thng bo rng gi tr ca bin c th c thay i vi ln khi thc thi chng trnh v gi tr ca n khng c t vo thanh ghi. Tm thi coi nh chng ta ch lit k. Chng ta s quay li tho lun chi tit sau. Tm li bn cn nh:

C nhiu Modifier do Java cung cp Mc ch chnh l kim sot vic truy cp Mt s khc nhm kim sot cc thuc tnh. Vic truy cp c th bao gm nhiu thnh phn nh Class, Method, Variable... Mun cho php hay ngn cp vic truy cp vo mt bin, mt phng thc..bn cn nm vng vic s dng cc Modifier.

Ht phn ny, chng ta tho lun qua v cu trc mt chng trnh Java. Vi cu trc bao gm nhiu class, chng ta cng tm hiu v class v "sn phm" thc t ca n l object. Mo: Bn hon ton c th dng Public mi ni, mi lc "g ri" tm thi, cho chng trnh c th chy m khng gp tr ngi g. Tuy nhin, p dng access level l v cng cn thit. Bn phi nm r v p dng nhun nhuyn. Chng ta tm dng y.

Kiu d liu
D bn lp trnh bng ngn ng no th bn cng phi quan tm n cc kiu d liu. Nh bn ti trong phn u,mc ch ca programming l chuyn ngn ng t nhin ra ngn ng my, nhm gii mt bi ton bt k. T ta thy rng, lc no cng c nhu cu nhp d liu t my tnh x l. V d n gin nht l bn lp trnh mt bi ton gii phng trnh bc hai. Bn phi cho chng trnh bit cc hng s a-b-c, ni cch khc bn phi nhp cc s a,b,c. Mt v d khc, bn vit mt chng trnh n gin nhp tn ngi s dng vo v s hin ln mn hnh cu cho Hello..., tc l ngi dng phi nhp mt chui. Cc s hay chui k trn chnh l cc kiu d liu. Trong Java kiu d liu chia thnh hai loi: Nguyn thy (Primitive) l cc kiu d liu c xc nh sn Tham chiu (Reference) l cc kiu d liu i tng Primitive: C 8 kiu primitive

Reference: C 3 kiu reference

i i vi kiu d liu s, ta s c cc php ton

Mi bn tham kho y . Chng ta tm hiu v: 1. 2. 3. 4. Cu trc chng trnh Java. Cc phn t chnh lm nn mt chng trnh Java Mi lin h (Access level) Cc kiu d liu

(Class v Object)

Bt u phn sau chng ta s tho lun chi tit v Java. Bn c th tham kho cc v d v Java ti y .

Bin v Mng (Variable and Array)


Chng ta bn qua v cu trc mt chng trnh (program), chng ta cng tho lun v cc phn t to nn chng trnh

l Class v Object. Chng ta cng bn v cc kiu d liu (Data type). Chng ta th hnh dung ra vic t cc D liu (Data) vo chng trnh xem. Vn ly v d n gin v gii phng trnh bc hai. Khoan bn ti hng i tng hay khng hng i tng. Hy coi nh ch lp trnh n s nht: tun t. i khi chng trnh s yu cu ngi dng nhp cc hng s a-b-c. V d ch cng on tnh delta chng hn. R rng mi ngi s dng s nhp cc hng s a-b-c khc nhau. V vy bn phi c mt ci g trung gian lu d liu do ngi dng cung cp. Xa hn na, bn thn delta cng l trung gian i ti mc ch cui cng l tnh nghim ca phng trnh. Tt c nhng ci trung gian chnh l bin (Variable) ca chng trnh. Vy bin (Variable) dng lu tr cc d liu cn thit hay cc d liu to ra trong qu trnh thc thi chng trnh. Bin c xc nh nh kiu d liu v tn bin cng vi phm vi tc ng. V d vi chng trnh bc hai trn, chng ta c th c 3 bin l nhng con s c tn l a-b-c v phm vi l ton b chng trnh (S bn sau, tm thi chng ta ch bao qut).y l cch khai bo mt bin trong chng trnh Java TypeOfValue VariableName TypeOfValue l kiu d liu m ta tho lun trong bi trc, v d int, long, char... VariableName l tn bin, do bn t t, v d a,b,c... Java c nhng yu cu hn ch t tn bin m bn c th gn gi tr vo

Tn bin c th l mt ch ci (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, hay Z) Tn bin c th bt u bng ch ci, underscore "_", hoc dollar sign $ c ngha l int a, int _a hay int $a u hp l. Sau k t u tin c th dng ch hoc s (0, 1, 2, 3, 4, 5, 6, 7, 8, or 9), hoc underscores "_" Tn bin khng c trng vi cc tn sau. L do l Java dnh ring nhng tn . Nn (khng bt buc)t tn bin vi ch u tin khng vit hoa, v d myVariablechng hn.

abstract case continue enum for instanceof new return switch transient

assert catch default extends goto int package short

boolean char do final if interface private static

break class double finally implements long protected strictfp throw volatile

byte const else float import native public super throws while

synchronized this try void

Bn vo y tham kho v bin trong Java.

Mng c dng lu tr cc khon mc (items) cng kiu d liu lin k nhau trong b nh. Mi ln ta khai bo kch thc ca mt mng, n s khng th thay i. D liu trn mng c th l kiu d liu nguyn thu hoc i tng. Cng nh cc bin, ta c th gn cc gi tr vo mng ti cc phn t c to ra trong mng. Nu khng, Java s gn gi tr mc nh vo tt c cc phn t ca mng, gi tr mc nh ph thuc vo kiu d liu. V d : nu kiu d liu l nguyn (int) th gi tr mc nh ban u s l 0. Khai bo mng: Mng c th c khai bo bng ba cch :

Cch khai bo

M t

C php Datatype identifier[]

V d char ch[ ];khai bo

Ch n thun Ch n thun

khai bo Khai bo v to mng

khai bo mng Khai bo v cp Datatype identifier[]=new pht b nh cho datatype [size ] cc phn t mng s dng ton tnew

mng k t c tn ch char ch[] = newchar [10 ];Khai b o mt mng ch v lu tr 10 k t char ch []= {A,B,C,D };kha i bo mng ch v lu 4 ch ci kiu k t

Khai bo,kin Khai bo Datatype identifier[]= to v khi mng,cp pht b {value1,value2valueN }; to nh cho n v gn cc gi tr ban u cho cc phn t ca mng

xc nh tn v s phn t ca mng ta cn xem xt cc phn t mng.S phn t bt u vi 0 cho phn t u,1 cho phn t th hai v c tip nh vy. Bn vo y tham kho v mng trong Java. Chng ta tm dng y.

Vi vn lin quan n bin (Variable)


Nu hc C th c l bn tng t nht l mt ln "vt ln" vi con tr (pointer) , nu cha th...cng khng sao! Chng ti cp n ngn ng C v mun bn nm vng mt khi nim, l "b nh" Chng ta khng i su vo phn tch b nh. Tuy nhin, thit ngh c rt nhiu bn i lc cng thy khng r rng gia b nh v cc thit b lu tr nh a cng, CD,DVD... i khi c 2 loi b nh dng lu d liu: lu di v tm thi. 1. 2. Tm thi nh RAM, Cache. Lu di nh a cng, a mm, CD,DVD.

Tm thi v ch cn...tm thi! Tht ra,c nhng file trong sut qu trnh s dng my ch s dng duy nht mt ln. Chnh v vy tt nht l chng ta ch lu chng tm u , sau khi dng xong hay tt my th khng s dng na. u chnh l RAM, Cache.

Chng ta cng ch quan tm ti b nh tm thi v n lin quan rt nhiu khi bn lp trnh khng phi ch trong Java m trong tt c cc ngn ng. Nhng t nh b nh, nh, cp pht... y chnh l ni v b nh tm thi. Hin ti chng ta ch bn ti cc bin (Variable) m thi. Bn hnh dung b nh tng t nh mt ci t hp th bu in (P.O Box), gm c nhiu nh, c g cn lu tm th c b vo cc nh , khi kt thc chng trnh th ly ra. Trong cc phn trc chng ta c bn v bin (variable), i khi l mt trung gian lu gi gi tr. Gi tr ny cng c tnh tm thi v s c lu trong b nh. Mi variable s c mt ngn t hay mt nh c a ch xc nh. Cc bin chng ta bn u l bin c kch thc v kiu d liu xc nh, gi cc bin kiu ny l bin tnh. Khi khai bo bin tnh, mt lng nh cho cc bin ny s c cp pht m khng cn bit trong qu trnh thc thi chng trnh c s dng ht lng nh ny hay khng. Mt khc, cc bin tnh dng ny s tn ti trong sut thi gian thc thi chng trnh d c nhng bin m chng trnh ch s dng 1 ln ri b. Mt s hn ch c th gp phi khi s dng cc bin tnh. trnh nhng hn ch trn, ngn ng C cung cp cho ta mt loi bin c bit gi l bin ng. Tuy nhin cc bin ng khng c a ch nht nh nn ta khng th truy cp n chng c. V th, ngn ng C li cung cp cho ta mt loi bin c bit na khc phc tnh trng ny, l bin con tr (pointer). Chng ta ch ni qua hnh dung, qua phn C++ chng ta s nhc li. Gi tr mc nh:khi cc bn khai bo bin m khng khi to gi tr cho chng, java s t ng khi to cc bin vi cc gi tr mc nh sau:

Tn kiu byte short int Long

Gi tr mc nh 0 0 0 0L

Mt s lu trong tnh ton:


Nu mi ton hng u thuc kiu du chm ng th php tnh chuyn thnh php tnh du chm ng Nu mt ton hng l double th tt c cc ton hng khc u chuyn thnh kiu doubletrc khi thc hin php ton. Nu khng c ton hng no l kiu double th cc ton hng u c chuyn v kiufloat.

p kiu (Type Casting) : i khi p kiu l tnh hung phi x l khi cng mt bin c dng integer vi mt bin c dng float chng hn, ni chung l tnh ton vi cc bin khc kiu. x l tnh hung ny, Java s dng tnh nng p kiu (type casting) ca cc phn mm trc C, C++. Lc ny mt kiu d liu s chuyn i sang kiu khc. Khi s dng tnh cht ny, bn cn thn trng v khi iu chnh d liu c th b sai gi tr. on m sau y thc hin php cng mt gi tr du phy ng (float) vi mt gi tr nguyn (integer). float c=34.896751f; Int b = (int)c +10; u tin gi tr du phy ng c c i thnh gi tr nguyn 34. Sau n c cng vi 10 v kt qu l gi tr 44 c lu vo b. Chng ta s ni li v p kiu trong nhng v d c th. Np chng (overloading) v Ghi (overriding) Chng ta bn qua v Method. Ni nm na l cch ng x ca mt Object no . V d mt ci xe th c cc hnh ng nh chy, khi ng, dng... c nhng hnh ng , ta c cc phng thc, tc l

Nhng iu g s c thc hin khi cc hnh ng c yu cu Hay cch thc mt hnh ng p ng khi c yu cu thc thi ra sao.

Tuy nhin, trong thc t ta cng c nhu cu c nhng phng thc tng t nhng c mt vi iu kin (tham s) khc nhau. V d nh phng thc khi ng xe,cng mt phng thc nh a cha

kha vo khi ng, ta li mun c thm nhng trng hp nh khng phi cha kha ca xe th sao, xe ht xng th sao... Phng thc c np chng (Method overloading) l nhng phng thc trong cng mt lp, c cng mt tn song c danh sch cc tham s khc nhau. S dng vic np chng phng thc thc thi cc phng thc ging nhau i vi cc kiu d liu khc nhau.V d phng thc printFirst() m chng ta lm trong bi thc hnh trc c th b np chng (overload) bi cc tham s ca kiu d liu khc nh integer, double v float hoc ngay cString. y l v d: public public public public public public public public public void void void void void void void void void printFirst(boolean b) printFirst(char c) printFirst(char[] s) printFirst(float f) printFirst(double d) printFirst(int i) printFirst(long l) printFirst(Object obj) printFirst(String s)

Phng thc c ghi (Method Overriding) khi Subclass Method c cng tn, cng kiu v loi tham s vi method ca Super-class.Tuy nhin phn "ni dung" th khc nhau, y l mt v d. Trong v d di. public class A { int i = 0; void doSomething (int k) { i = k; } } class B extends A { int j = 0; void doSomething (ing k) { j = 10; i = 2 * k; } } Ta thy subclass B overrides method doSomething() trong class A.

Phn ny bn ch cn nh vy.

Phng thc khi to lp


Chng ta tm hiu qua v lp (Class). l nhng thc th c thuc tnh v hnh ngchung. i tng(Object) l mt mu thc c nh ngha bi lp(Class). i tng c nhng hot ng. V d i tng ng Trn Vn A xut pht t lp con ngi th c nhnghot ng nh i, ni, suy ngh...Cc bc i ca ng A ra sao (ng ln-->t mt chn ti trc--->dn trng tm vo chn trc-->buc chn cn li ti....), khi no th ng Trn Vn A i, trong trng hp no th ng suy ngh... chnh l nhng phng thc (Method) ca i tng Trn Vn A. Phng thc l Nhng iu g s c thc hin khi cc hnh ng c yu cu Hay cch thc p ng khi mt hot ng c yu cu thc thi. Thng thng c 4 kiu hnh vi c bn l : to, truy vn, cp nht v hy. T 4 kiu hnh vi ta c 4 loi phng thc tng ng. V d 1. 2. g. 3. Ta cn mt phng thc cp nht tui ca ng Trn Vn A theo thi gian, hay mt phng thc cp nht mn lp xe ca chic Toyota. 4. Cui cng, nu khng x dng na (Lay-off ), ta cn mt phng thc hy i tng. Ta s bn v phng thc khi to lp (Constructor) trong Java Phng thc khi to lp (Constructor) l mt loi phng thc c bit rt khc vi cc kiu khi to c bn. N khng c kiu tr v. N c tn trng vi tn ca lp. Hm khi to lp thc thi nh mt phng thc hoc mt chc nng bnh thng song n khng tr v bt c mt gi tr no. Ni chung chng c dng khi to cc bin thnh vin ca mt lp v n c gi bt c lc Ta cn mt phng thc khi to ng Trn Vn A t Ta cn mt phng thc truy vn xem tui ca ng

lp ngi, hay khi to mt chic Toyota t lp xe. Trn Vn A l bao nhiu, hay mu xe ca chic Toyota l mu

no bn to ra i tng ca lp . Ni tm li mc ch ca Constructor l to mt Object. Phng thc khi to lp c hai loi: Tng minh (explicit): Bn c th lp trnh nhng phng thc khi to lp khi nh ngha lp. Khi to mt i tng ca mt lp, nhng gi tr m bn truyn vo phi khp vi nhng tham s ca phng thc khi to (s lng, th t v kiu d liu ca cc tham s) Ngm nh (Implicit): Khi bn khng nh ngha mt hm khi to cho mt lp, JVM cung cp mt gi tr mc nh hay mt phng thc khi to ngm nh. Bn c th nh ngha nhiu phng thc khi to cho mt lp. Ging nh cc phng thc khc, phng thc khi to lp c th b np chng (overload) y l mt v d v explicit: public class Point { int m_x; int m_y; //============ Constructor public Point(int x, int y) { m_x = x; m_y = y; } //============ Parameterless default constructor public Point() { this(0, 0); // Calls other constructor. } ... }

Cu lnh iu khin trong Java phn 1


Theo kin c nhn th cc cu lnh iu khin l tri tim ca cc ngn ng lp trnh. Trc ht bn vui lng nhn li nhng g chng ta i qua:

Chung trnh Java gm nhiu Class hp li. Class l nhng thc th c thuc tnh vhnh ng chung. Mi th trong lp trnh hng i tng qui v Object. i tng(Object) l mt mu thc c nh ngha bi

lp(Class), ni cch khc Class l mu cn Object l nhng sn phm to ra da vo mu . i tng c nhng thuc tnh v hnh ng. Cc buc thc hin hnh ng, hay cch m hnh ng p ng khi c gi l phng thc (Method) ca i tng (Object). Cng vic ca chng ta l vit nhng dng code hay lnh to ra cc method hay kt hp cc method li trong cc class. Sau kt hp cc class li thnh mt gi (Package).

Chng ta th mt v d: Ta coi con ngi l mt class. Class con ngi c cc thuc tnh:

Tn Chiu cao Mu tc

V cc hnh ng:

i Ngi n Ni

T class con ngi, ta to ra mt Object l Trn Vn A c cc thuc tnh:


Tn: Trn Vn A Chiu cao: 1m70 Mu tc:en

V cc hnh ng:

i Ngi n Ni

T cc hnh ng trn, tam to ra mt s method:

i : public void di() Ngi: public void ngoi()

V d cho phng thc di(): public void di() { ng ln; t mt chn ti trc; dn trng tm vo chn trc; buc chn cn li ti; } Cn y l phng thc ngoi():

public void ngoi() { ng li; h thp thn hnh xung; dn trng tm vo hai chn; t bn ta xung gh; } Ta s p dung vo mt chng trnh: public class ConNguoi{ public void di() { ng ln; t mt chn ti trc; dn trng tm vo chn trc; buc chn cn li ti; } public void ngoi() { ng li;

h thp thn hnh xung; dn trng tm vo hai chn; t bn ta xung gh; }

} T y bn c th to ra ng Trn Vn A: ConNguoi TranVanA = new ConNguoi(); Sau gi mt phng thc, v d di(): TranVanA.di(); Tuy nhin mc ch ca phn ny l cc cu lnh iu khin trong chng trnh. V d chng trnh ca chng ta nhm ch ra cng vic mt ngy ca ng Trn Vn A chng hn, ta c th hnh dung nh sau: Bui sng: ng A i Bui chiu ng A ngi Bui ti ng A i (i u khng bit? Vy chng trnh ca ta s th ny: Nu l bui sng: gi phng thc di() Nu l bui chiu: gi phng thc ngoi() Nu l bui ti: gi phng thc di() y chnh l nn tng ca mi chng trnh ch khng phi ring g chng trnh Java. Ngay c mt chng trnh n gin nh Hello World, chng ta cng c nhu cu khi no lc no th in dng ch ra mn hnh. Ni tm li Nu (If) l mt cu lnh cn bn nht v gn nh khng th thiu trong bt c chng trnh no. )

Cu lnh iu khin trong Java phn 2


Cu lnh iu khin r nhnh.

Cu lnh ifelse Cu lnh ifelse kim tra kt qu mt iu kin v thc thi thao tc ph hp trn c s kt qu . Cu trc cu lnh nh sau: if (iu kin) { Cc cu lnh thc thi khi iu kin ng; } else { Cc cu lnh thc thi khi iu kin sai; } Trong : iu kin y l mt biu thc Boolean nh ton t so snh.biu thc ny tr v gi tr true hoc false(ng hoc sai). Cn cc cu lnh thc thi c th l mt hay mt tp cc cu lnh.nu l mt cu lnh th khng cn phi c 2 du ngoc. C th hiu cu trc ny nh sau: Nu (iu kin ng) th { Cc cu lnh thc thi khi iu kin ng; } Cn khng th {

Cc cu lnh thc thi khi iu kin sai; } V d:chng trnh kim tra xem s a l chn hay l v in ra mn hnh thng bo Class kiemtra{ Public static void main(String args [ ] ){ int a=10; if (a % 2 = = 0) System.out.printf(so +a+ la so chan); else System.out.printf(so +a+ la so le); } } Kt qu chng trnh s in ra mn hnh dng ch so 10 la so chan. Cc pht biu ifelse lng nhau. Cc pht biu ifelse c th t lng nhau theo cc cu trc nh sau: if (iu kin 1) if (iu kin 2){ } else{ }

else { } Hoc l: if (iu kin 1){ } else{ if (iu kin 2){ } else { } } Cu lnh switchcase Pht biu switchcase dng khi biu thc xt iu kin c nhiu kt qu.pht biu ny cng c th c vit li bng cc pht biu if else lng nhau. Cu trc ca pht biu ny nh sau: switch (biu thc) { case kt qu 1:{ Cc cu lnh thc th khi biu thc c kt qu 1; break; }

case kt qu 2:{ Cc cu lnh thc th khi biu thc c kt qu 2; break; } case kt qu n:{ Cc cu lnh thc th khi biu thc c kt qu n; break; } default:{ Cc cu lnh thc th khi biu thc khng c kt qu no ging cc kt qu a ra; } v d:in ra mn hnh thng bo v s a class kiemtra1{ int a=2; switch (a){ case 1:{ system.out.printf(so +a+ l so 1); break; } case 2:{ system.out.printf(so +a+ l so 2);

break; } case 3:{ system.out.printf(so +a+ l so 3); break; } default: systemprintf(so +a+ la so nguyen khac 1,2,3);

} } Kt qu l s in ra mn hnh dng ch so 2 la so 2 v ta khi to a=2,cn nu a khc 1,2,3 gi d a=4 th s in ra dng ch so 4 la so nguyen khac 1,2,3 Chng trnh trn c th vit li bng cc pht biu ifelse lng nhau nh sau: Class kiemtra2{ int a=2; if (a= =1) system.out.printf(so +a+la so 1); else { if (a= =2) system.out.printf(so +a+la so 2); else { if (a= =3) system.out.printf(so +a+la so 3); else

system.out.printf(so +a+la so nguyen khac 1,2,3); } } } Kt qu ca chng trnh vn l in ra mn hnh dng ch so 2 la so 2.

Cu lnh iu khin trong Java phn 3


Vng lp. Vng lp while Vng lp while c s dng khi vng lp c thc hin mi cho n khi iu kin thc thi vn l True. S lng ln lp khng c xc nh trc song n s ph thuc vo tng iu kin. Dng vng lp while, bn phi lun nh mt iu v cng quan trng l phi lm sao thot khi vng lp, nu khng chng trnh ca bn s chy v tn khng bao gi dng. C php while(condition){ action statement;:: } condition: Biu thc Boolean, n tr v gi tr True hoc False. Vng lp s tip tc cho n khi no gi tr True c tr v. action statement: Cc cu lnh c thc hin nu condition nhn gi tr True on chng trnh sau tnh giai tha ca s 5.Giai tha c tnh nh tch 5*4*3*2*1 Class WhileDemo { Public static void main(String args[]) { int a = 5,fact = 1; while (a.>= 1) {

fact *=a; a--; } System.out.println(The Factorial of 5 is +fact); } } v d trn, vng lp c thc thi cho n khi iu kin a>=1 l True. Bin a c khai bo bn ngoi vng lp v c gn gi tr l 5. Cui mi vng lp, gi tri ca a gim i 1. Sau nm vng gi tr ca a bng 0. iu kin tr v gi tr False v vng lp kt thc. Kt qu s c hin th The factorial of 5 is 120 Vng lp for Vng lp for c s dng tng t nh vng lp while nhng bn c th kim sot c s ln lp.Vng lp for thng c s dng khi cn lp mt khi lnh m lp trnh vin bit trc s cn lp bao nhiu ln C php for (init-stmt; condition; next-stmt) { body }

condition: Biu thc Boolean, n tr v gi tr True hoc False. Vng lp s tip tc cho n khi no gi tr True c tr v. init-stmt: Con s hay bin khi to cho s ln lp. next-stmt: Con s hay bin tip theo ca vng lp sau khi thn vng lp c thc hin. Khi bt u vng lp for, ta cn khi to mt bin nht nh bng init-stmt dng trongcondition , nu condition tr v true, khi lnh cn lp s c thc hin, sau khi thc hin xong khi lnh cn lp, next-stmt s c thc hin, tip theo, condition s li c kim tra, c nh vy cho n khi condition tr v false, khi vng lp s kt thc. Hy so snh hai chng trnh c mc ch nh nhau, mt ci dng vng lp while, ci kia dng vng lp for:

while: int number = 1; while (number <= 12) { System.out.println(number + " squared is " + (number * number)); number++; } for: for (int number = 1; number <= 12; number++) { System.out.println(number + " squared is " + (number * number)); } Chng ta tm dng y, c th ni n lc ny nhng vn c bn nht ca cng vic lp trnh chng ta bn qua. Phn tip theo chng ta s tip tc cc bi thc hnh.

Thc hnh Overloading v Overriding Phn 1


Chng ta s tip tc s dng chng trnh Hello World thc hnh. Xin mt ln na nhc li l

Chng ta ang n gin ha mi vic C lm tt ci n gin th mi lm tt ci phc tp. Sau ny chng ta s tho lun vit Robot v lm mt t in. Khng c IDE no "xn" hay "khng xn" c, bn ton quyn s dng Eclipse, Jbuilder hay Netbeans.

Chng ta s bt u thc hnh Overloading v Overriding y l file First.jav m chng ta lm package Package2; import Package2b.*; public class First { public void printFirst(String displayString) {

System.out.println(displayString); } public static void main(String[] args) { Second sc = new Second(); sc.printString("Hello World"); Third th = new Third(); th.printString("Hello Viet Nam"); FirstB fb = new FirstB(); fb.printFirstB("Hello from FirstB"); First f = new First(); First.FirstC innerObject = f.new FirstC(); innerObject.printFirstC("Hello from C"); new Base().print();

} public static class FirstB { public void printFirstB(String displayString) { System.out.println(displayString); First.FirstB nestedObject = new First.FirstB(); } } public class FirstC { public void printFirstC(String displayString) { System.out.println(displayString); } } }

Trong chng trnh c mt method l printFirst(String displayString) Chng ta s Overload phng thc ny. Bn thm cc phng thc sau vo First.java. package Package2; import Package2b.*; public class First { public void printFirst(String displayString) {

System.out.println(displayString); } public void printFirst(String displayString,String displayString2) { System.out.println(displayString); System.out.println(displayString2); } public static void main(String[] args) { Second sc = new Second(); sc.printString("Hello World"); Third th = new Third(); th.printString("Hello Viet Nam"); FirstB fb = new FirstB(); fb.printFirstB("Hello from FirstB"); First f = new First(); First.FirstC innerObject = f.new FirstC(); innerObject.printFirstC("Hello from C"); new Base().print(); First overFirst = new First(); overFirst.printFirst("Hello from original", "Hello from overloaded");

} public static class FirstB { public void printFirstB(String displayString) { System.out.println(displayString); First.FirstB nestedObject = new First.FirstB(); } } public class FirstC { public void printFirstC(String displayString) { System.out.println(displayString); } } }

Rt n gin, nhng mc ch ca chng ta l hiu thi. Save li v chy th, bn s thy thm hai dng Hello from original Hello from overloaded

Chng ta Overload phng thc (method) printFirst(String displayString) Tng t, bn thm mt phng thc sau: package Package2; import Package2b.*; public class First { public void printFirst(String displayString) { System.out.println(displayString); } public void printFirst(String displayString,String displayString2) {

System.out.println(displayString); System.out.println(displayString2); } public void printFirst(int overInt) { System.out.println("Number: "+ overInt); } public static void main(String[] args) { Second sc = new Second(); sc.printString("Hello World"); Third th = new Third(); th.printString("Hello Viet Nam"); FirstB fb = new FirstB(); fb.printFirstB("Hello from FirstB"); First f = new First(); First.FirstC innerObject = f.new FirstC(); innerObject.printFirstC("Hello from C"); new Base().print(); First overFirst = new First(); overFirst.printFirst("Hello from original", "Hello from overloaded"); overFirst.printFirst(20);

} public static class FirstB { public void printFirstB(String displayString) { System.out.println(displayString); First.FirstB nestedObject = new First.FirstB(); } } public class FirstC { public void printFirstC(String displayString) { System.out.println(displayString); } } }

Bn s thy thm dng kt qu: Number: 20 Bn c th th vi mt s tham s khc. Mi bn tham kho y video

Thc hnh Overloading v Overriding Phn 2


Nhc li: Phng thc c ghi (Method Overriding) khi Subclass Method c cng tn, cng kiu v loi tham s vi method ca Super-class.Tuy nhin phn "ni dung" th khcnhau Chng ta s tip tc vi chng trnh Hello World ng nn, chng ta ang i theo mt cch ring. Theo nh ngha, cc cng vic s l:

To mt Super-class T Super-class, chng ta s to mt Subclass. Trong Subclass, to mt method c cng kiu v tham s nh method trong Super-class. Sau "xo xo", thm mm thm mui vi th to thnh mt method mi.

Chng ta s dng class First nh Super-class, v Second nh Subclass Bn hy vo Second.java (Chng ta to trc), v thm dng sau vo chng trnh. package Package2; public class Second extends First{ public void printFirst(String displayString) { System.out.println("Here is an example about method overriding"); System.out.println("Hello from Second2 "+displayString); } void printString(String displayString) { System.out.println(displayString); }

} y chnh l chng ta Override phng thc printFirst(String displayString) trong First.

Tip theo chng ta s th chy phng thc ny. Bn thm dng sau vo First.java package Package2; import Package2b.*; public class First { public void printFirst(String displayString) { System.out.println(displayString); } public void printFirst(String displayString,String displayString2) { System.out.println(displayString); System.out.println(displayString2); } public void printFirst(int overInt) { System.out.println("Number: "+ overInt);

} public static void main(String[] args) { Second sc = new Second(); sc.printString("Hello World"); Third th = new Third(); th.printString("Hello Viet Nam"); FirstB fb = new FirstB(); fb.printFirstB("Hello from FirstB"); First f = new First(); First.FirstC innerObject = f.new FirstC(); innerObject.printFirstC("Hello from C"); new Base().print(); First overFirst = new First(); overFirst.printFirst("Hello from original", "Hello from overloaded"); overFirst.printFirst(20); Second secondOver = new Second(); secondOver.printFirst("Test from First");

} public static class FirstB { public void printFirstB(String displayString) { System.out.println(displayString); First.FirstB nestedObject = new First.FirstB(); } } public class FirstC { public void printFirstC(String displayString) { System.out.println(displayString); } } public class FirstOver extends First { public void printFirst(String displayString) { System.out.println("From Overriding method: "+displayString); }

} } Chng ta gi phng thc printFirst(String displayString) ca Sencond. Xin nhc li l bn ang chy phng thc printFirst(String displayString) ca Second, khng phi ca First. Bn s thy thm hai dng sau: Here is an example about method overriding Hello from Second2 Test from First Bi thc hnh rt n gin, nhng mong bn c gng lm vi ln. Khi bn nm vng mc ch, bn s d dng lm nhng bi kh hn. d theo di, phn tip theo chng ta s gii thch mt s lnh Java.

Dng Overloading v Overriding lm g nh?


Khi u lc no cng kh c. C qu nhiu cu hi cho ngi mi bt u. Lp trnh li l mt lnh vc khng h d. Chng ta s c rt nhiu cu hi trong nhng bc u tin. Phn trc ta tm hiu cng nh thc hnh Overloading v Overriding. Nhng my ci c tc dng g? Nhc li: Java l ngn ng lp trnh hng i tng. Trong chng trnh Java c nhiu lp, nhiu i tng. Overriding Chng ta th hnh dung c hai Class l Voi v Chut. Chng ta xy dng lp Voi trc. Trong lp Voi c mt phng thc n. Tip theo chng ta c nhu cu xy dng lp Chut v trong lp ny cng cn c phng thc n.

Trong trng hp ny, thay v vit mi mt phng thc n mi, chng ta ch vic copy (extends) class Voi, tha hng phng thc n, thm cht mm mui (Overriding) thnh phng thc n cho Chut l xong. Overloading Tuy nhin, trong lp Voi, i khi cn c cc phng thc n chui ring, n ma ring. Vi trng hp , ta cng "mn" phng thc n gc, sau "xo xo" li (Overloading ) thnh cc phng thc n chui ring, n ma ring. Ch v d cho d hiu (khng bit d hiu hn hay li khin cng kh hiu hn? )

Java Syntax Reference


C qu nhiu lnh cng nh qui nh, y chng ta ch tm thi tng hp mt s iu cn thit m thi. Chng ta s coi li chng trnh Hello World quen thuc. // This is a simple program called "HelloWorld.java" class First{

public static void main(String args[]) {

System.out.println("Hello World");

} } Mc d n gin, nhng chng trnh ny cha ng nhiu ci c bn nht. Ghi ch (comment)


T du // n cui dng. V d: // ay l ghi ch! Tt c nhng g gia du /* v du */, vi kiu ny bn c th xung dng nn nu ghi ch di th bn nn dng kiu ny. V d: /* y l ghi ch */

Khong trng(whitespace) Khong trng bao gm blanks, newline, tab. Khi bn t tn th khong trng l v ngha i vi trnh bin dch (compiler). Ni ngn gn l bn khng nn t tn bao gm khong trng. V d: thay v t tn My Program, bn nn t l My_Program hay MyProgram. t tn bin, lp, phng thc...Hay cn gi l nh danh(identifier) Khi t tn bin, phng thc, lp...bn c th dng ch ci (a,b,c...), s (1,2,3...), du dollar ($), du gch di nh v d trn (_), nhng k t u tin ca tn khng c l s hay k t c bit (Ngoi tr hai du _ v $). N cng nm ngoi cc t dnh ring (bn di). V d:

Chp nhn: a123BC, THIS_IS_A_TEST, Stgrie54. Khng chp nhn: 123aBC, THIS-IS-A-TEST, ###ghhgg

Nhng t dnh ring hay cn gi l t kha(reserved word) T kho/t d phng (Keyword/Reserve Words): Mt s nh danh c Java xc nh trc. Ngi lp trnh khng c php s dng chng nh mt nh danh. V d 'class', 'import' l nhng t kho

abstract do

if

package

synchronize d this

boolean double implement private s break byte case catch char else import

protecte throw d throws transient true try

extend instanceof public s false final finally int interface long return short static

class const

float for

native new null

strictfp super switch

void volatile while

continue goto default assert

Ch e trong cc s: C th mt vi bn s bi ri khi thy con s 4e51 chng hn. 3e45 c ngha l 3* 1045 4e51 c ngha l 4* 1051 K t phn cch (separator): Thng bo cho trnh bin dch vic phn nhm cc phn t ca chng trnh, v d nh ni dung ca mt lp, ni dung ca mt phng thc hay kt thc mt dng lnh. Mt vi k t phn cch ca java c ch ra di y: { };,

Nguyn dng (literals): L cc gi tr khng i trong chng trnh. Nguyn dng c th l cc s, chui, cc k t hoc cc gi tr Boolean. V d 21, 'A', 31.2, "This is a sentence" l nhng nguyn dng. K hiu mt k t (characterLiteral): Dng cp du ' (single quotes) k hiu mt k t. V d 'A', 'c'. K hiu mt chui (stringLiteral): Dng cp du " (double quotes) k hiu cho mt chui. V d "Day la mot chuoi". Cc kiu d liu (data type): C cc kiu Primitive nh: int, double, boolean, char, long, byte, short or float Hay Reference nh: Array, Class, Interface Khai bo bin (Variable): Khai bo bin theo cu trc: var_datatype variablename Trong var_datatype l kiu d liu, variablename l tn bin.

V d: int bien_thu_nhat, long bien_thu_hai Khai bo mng (Array): Mng c dng lu tr cc khon mc (items) cng kiu d liu lin k nhau trong b nh. Mi ln ta khai bo kch thc ca mt mng, n s khng th thay i. D liu trn mng c th l kiu d liu nguyn thu hoc i tng. Cng nh cc bin, ta c th gn cc gi tr vo mng ti cc phn t c to ra trong mng. Nu khng, Java s gn gi tr mc nh vo tt c cc phn t ca mng, gi tr mc nh ph thuc vo kiu d liu. V d : nu kiu d liu l nguyn (int) th gi tr mc nh ban u s l 0. Mng c th c khai bo bng ba cch :

Cch khai M t bo Ch n Ch n thun khai thun khai bo bo mng Khai bo v to mng

C php Datatype identifier[]

V d char ch[ ];khai bo mng k t c tn ch char ch[] = newchar [10 ];Khai b o mt mng ch v lu tr 10 k t

Khai bo v Datatype identifier[]=new cp pht b datatype [size ] nh cho cc phn t mng s dng ton t new

Khai bo,kin to v khi to

Khai bo Datatype identifier[]= char ch []= mng,cp {value1,value2valueN }; {A,B,C,D }; pht b nh khai bo cho n v mngch v lu 4 gn cc gi ch ci kiu k tr ban u t cho cc phn t ca mng

Ton t gn (=): Du bng (=) l mt ton t gn, khng phi k hiu bng nh thng thng. Cu trc nh sau:

variable=expression; V d ta mun ni 1 bng 1 th ta phi vit l 1==1; Cn k hiu a=1; li c ngha l gn gi tr 1 vo bin a. Ngoi ra ta cng c cu trc: variable+=expression; C ngha l: variable=variable + expression; Din t return: Thng thng khi vit mt phng thc (method) chng ta s cn mt gi tr tr v. Ni nm na l cn mt kt qu. V d ta vit mt phng thc tnh tng ca hai s, th ta cn bit kt qu tng l bao nhiu. V d: public int tinh_tong(int a, int b){ return a + b; } Ta c 2 cch din t return: return expression; return; Cch th hai dng cho void method. Ngoi ra bn cng cn coi li v : If, While, For. Chc bn mt ngy vui v.

Cc ton t
D mun hay khng, chng ta cng phi tm hiu v cc ton t trong lp trnh Java. Mt chng trnh thc t bao hm vic to ra cc bin. Cc ton t kt hp cc gi tr n hoc cc biu thc con thnh nhng biu thc mi, phc tp hn v c th tr v gi tr. iu ny lin quan n vic thc hin cc php ton logic, s hc, quan h v so snh trn cc biu thc. Cc bng di ay lit k cc dng ton t, xin lu khi dng ton t l chng ta ni n cc du v d +,-,*...Cn khi ni ton hng l chng ta ni n cc phn t c ghp ni bng ton t v d 2 + 5 Cc dng ton t trong Java:

Ton Ton Ton Ton Ton Ton

t t t t t t

s hc bit quan h logic iu kin gn

Cc ton t s hc S dng vi cc ton hng s. Cc ton hng kiu boolean khng s dng c, song cc ton hng k t v d char hay String cho php s dng loi ton t ny

Ton t + -

M t Cng.Tr v gi tr tng hai ton hngV d 5+3 tr v kt qu l 8 TrTr v gi tr khc nhau gia hai ton hng hoc gi tr ph nh ca ton hng. V d 5-3 kt qu l 2 v 10 tr v gi tr m ca 10 NhnTr v gi tr l tch hai ton hng. V d 5*3 kt qu l 15 ChiaTr v gi tr l thng ca php chiaV d 6/3 kt qu l 2 Php ly moduloGi tr tr v l phn d ca php chiaV d 10%3 gi tr tr v l 1 Tng dnTng gi tr ca bin ln 1. V d a++ tng ng vi a= a+1 Gim dnGim gi tr ca bin 1 n v. V d a tng ng vi a=a-1 Cng v gn gi trCng cc gi tr ca ton hng bn tri vo ton hng bn phi v gn gi tr tr v vo ton hng bn tri.V d c+=a tng ng c=c+a Tr v gn gi tr Tr cc gi tr ca ton hng bn tri vo ton ton hng bn phi v gn gi tr tr v vo ton hng bn tri.V d c-= a tng ng vI c=c-a Nhn v gn Nhn cc gi tr ca ton hng bn tri vi

* / % ++ +=

-=

*=

ton ton hng bn phi v gn gi tr tr v vo ton hng bn tri.V d c *= a tng ng vi c=c*a /= Chia v gnChia gi tr ca ton hng bn tri cho ton ton hng bn phi v gn gi tr tr v vo ton hng bn tri.V d c /= a tng ng vi c=c/a Ly s d v gnChia gi tr ca ton hng bn tri cho ton ton hng bn phi v gn gi tr s d vo ton hng bn tri.V d c%=a tng ng vi c=c%a

%=

Ton t Bit Cc ton t dang Bit cho php ta thao tc trn tng Bit ring bit trong cc kiu d liu nguyn thu. Ton t Bit da trn c s i s Boolean. N thc hin php tnh trn hai bit c v tr tng ng trn hai ton hng to ra mt kt qa mi.

Ton t ~ &

M t Ph nh bit (NOT)Tr v gi tr m ca mt s. V d a=10 th ~a=-10 Ton t ANDTr v gi tr l 1 nu cc ton hng l 1 v 0 trong cc trng hp khc. V d nu a=1v b=0 th a&b tr v gi tr 0 Ton t ORTr v gi tr l 1 nu mt trong cc ton hng l 1 v 0 trong cc trng hp khc. V d nu a=1v b=0 th aIb tr v gi tr 1 Exclusive ORTr v gi tr l 1 nu ch mt trong cc ton hng l 1 v tr v 0 trong cc trng hp khc. V d nu a=1v b=1 th a^b tr v gi tr 0 Dch sang phiChuyn ton b cc bt cu mt s sang phi mt v tr, gi nguyn du ca s m. Ton hng bn tri l s b dch cn s bn phi ch s v tr m cc bt cn dch.V d x=31 tc l 00011111 vy x>>2 s l 00000111. Dch sang triChuyn ton b cc bt cu mt s sang tri mt v tr, gi nguyn du cu s m. Ton hng bn tri l s b dch cn s bn phi ch s v tr m cc bt cn dch.

>>

<<

Cc ton t quan h Thng dng trong cu trc iu khin nh If, For.. so snh hai ton hng.

Ton t M t == So snh bngTon t ny kim tra s tng ng ca hai ton hngV d if (a= =b) tr v gi tri True nu gi tr ca a v b nh nhau So snh khcKim tra s khc nhau ca hai ton hngV dif(a!=b) Tr v gi tr true nu a khc b Ln hnKim tra gi tr ca ton hng bn phi ln hn ton hng bn tri hay khngV du if(a>b) . Tr v gi tr true nu a ln hn b,ngc lai (nh hn hoc bng ), tr v False Nh hnKim tra gi tr ca ton hng bn phi c nh hn ton hng bn tri hay khngV du if(a<b) . Tr v gi tr true nu a nh hn b , ngc li (ln hn hoc bng tr v False Ln hn hoc bngKim tra gi tr ca ton hng bn phi c ln hn hoc bng ton hng bn tri hay khngV du if(a>=b) . Tr v gi tr true nu a ln hn hoc bng b , ngc li (nh hn tr v False Nh hn hoc bngKim tra gi tr ca ton hng bn phi c nh hn hoc bng ton hng bn tri hay khngV du if(a<=b) . Tr v gi tr true nu a nh hn hoc bng b , ngc li (ln hn tr v false)

!= >

<

>=

<=

Cc ton t logic

Ton t M t

&

V (AND)Tr v mt gi tr ng (True) nu ch khi c hai ton t c gi tr TrueV d: if(sciencemarks>90) AND (mathmarks>75) th gn Y cho bin c nhn hc bng Hoc (OR)Tr v gi tr True nu mt gi tr l True hoc c hai u l TrueV d Nu age_category is Senior_citizen OR special_category is handicapped th gim gi tua l hnh. Gi cng s c gim nu c hai iu kin u c tha mn XORTr v gi tr True nu ch mt trong cc gi tr l True, cc trng hp cn li cho gi tr False (sai) Ton hng n t NOT. Chuyn gi tr t True sang False v ngc li.V d: Qu trnh thc thi cc dng lnh tip tc cho n khi kt thc chng trnh.

^ !

Cc ton t iu kin

C php : biu thc 1?biu thc 2: biu thc 3; biu thc 1 Biu thc logic. Tr tr v gi tr True hoc False biu thc 2 Gi tr tr v nu biu thc 1 xc nh l True biu thc 3 Gi tr tr v nu biu thc 1 xc nh l False

Ton t gn

Chng ta ni v ton t gn trong phn trc. Ton t gn (=) dng gn mt gi tr vo mt bin. Bn c th gn nhiu gi tr n nhiu bin cng mt lc. h t u tin ca cc ton t Th t u tin ca cc ton t Khi lp trnh, thng thng mt dng code ca bn khng ch n gin l mt ton t m l rt nhiu ton t v ton hng. Khi th t thc hin s l mt vn . V d: 5+3*6; Nu bn tnh theo th t t tri qua phi, bn s c:

u tin bn tnh 5+3=8; Sau bn tnh tip 8*6=48;

Kt qu l 48 Tuy nhin nu bn tnh php nhn 3*6 trc th kt qu s khc:


u tin bn tnh 3*6=18; Sau bn tnh 5+18=23;

Kt qu l 23 R rng l hai kt qu khc nhau. Chnh v vy cn mt qui nh.

Th t 1. 2. 3. 4. 5.

Ton t Cc ton t n nh +,-,++, Cc ton t s hc v cc ton t dch nh *,/, +,-,<<,>> Cc ton t quan h nh >,<,>=,<=,= =,!= Cc ton t logic v Bit nh &&,II,&,I,^ Cc ton t gn nh =,*=,/=,+=,-=

Theo , cch tnh u tin l sai v cch tnh th hai vi kt qu l 23 mi ng.

Thay i th t u tin Bn c th thay i th t u tin bng cch dng du ngoc n (). Tng phn ca biu thc c gii hn trong ngoc n c thc hin trc tin. Nu bn s dng nhiu ngoc n lng nhau th ton t nm trong ngoc n pha trong s thc thi trc, sau n cc vng pha ngoi. Nhng trong phm vi mt ngoc n th quy tc th t u tin vn gi nguyn tc dng. Nh v d trn, nu bn tht s mun kt qu l 48, bn c th vit biu thc nh sau: (5+3)*6; Chng ta tm dng y.

Thc hnh v cc lnh iu khin phn 1


Phn ny chng ta s thc hnh lnh If-Else. Bn thm nhng dng code sau vo First.java package Package2; import Package2b.*; public class First { public void printFirst(String displayString) { System.out.println(displayString); } public void printFirst(String displayString,String displayString2) { System.out.println(displayString); System.out.println(displayString2); } public void printFirst(int overInt) { System.out.println("Number: "+ overInt); } public static void main(String[] args) { Second sc = new Second(); sc.printString("Hello World"); Third th = new Third(); th.printString("Hello Viet Nam");

FirstB fb = new FirstB(); fb.printFirstB("Hello from FirstB"); First f = new First(); First.FirstC innerObject = f.new FirstC(); innerObject.printFirstC("Hello from C"); new Base().print(); First overFirst = new First(); overFirst.printFirst("Hello from original", "Hello from overloaded"); overFirst.printFirst(20); Second secondOver = new Second(); secondOver.printFirst("Test from First"); int a=10; if (a % 2 == 0) System.out.printf("so "+a+" la so chan"); else System.out.printf("so "+a+" la so le"); } public static class FirstB { public void printFirstB(String displayString) { System.out.println(displayString); First.FirstB nestedObject = new First.FirstB(); } } public class FirstC { public void printFirstC(String displayString) { System.out.println(displayString); } }

Tt c u l nhng cu lnh quen thuc. Nu bn thc mc v k hiu '%' th bn coi li trong phn cc ton t .

Lu li v chy th, bn s thy thm dng ch so 10 la so chan Nu thay bin a bng 9, bn s nhn c kt qu: so 9 la so le y l mt bi thc hnh n gin. Nhng bn nn kin nhn. T t chng ta s c nhng bi phc tp hn. Bn vo y tham kho trc mt s v d. Chng ta s phn tch cc v d trong cc phn sau.

Thc hnh v cc lnh iu khin phn 2


Phn ny chng ta s thc hnh pht biu Switch...case.

Vn dng chng trnh Hello World. Bn thm nhng dong code (in m) sau vo First.java package Package2; import Package2b.*; public class First { public void printFirst(String displayString) { System.out.println(displayString); } public void printFirst(String displayString,String displayString2) { System.out.println(displayString); System.out.println(displayString2); } public void printFirst(int overInt) { System.out.println("Number: "+ overInt); } public static void main(String[] args) { Second sc = new Second(); sc.printString("Hello World"); Third th = new Third(); th.printString("Hello Viet Nam"); FirstB fb = new FirstB(); fb.printFirstB("Hello from FirstB"); First f = new First(); First.FirstC innerObject = f.new FirstC(); innerObject.printFirstC("Hello from C"); new Base().print(); First overFirst = new First(); overFirst.printFirst("Hello from original", "Hello from overloaded"); overFirst.printFirst(20); Second secondOver = new Second(); secondOver.printFirst("Test from First"); int a=10; int b; if (a % 2 == 0){ b=1; System.out.printf("so "+a+" la so chan");

}else { b=2; System.out.printf("so "+a+" la so le"); } switch(b){ case 1: System.out.printf("so "+a+" la so chan. Switch...case"); break; case 2: System.out.printf("so "+a+" la so le. Switch...case"); break; } } public static class FirstB { public void printFirstB(String displayString) { System.out.println(displayString); First.FirstB nestedObject = new First.FirstB(); } } public class FirstC { public void printFirstC(String displayString) { System.out.println(displayString); } }

} Lu li v chy th, bn s thy thm dng ch. so 10 la so chanso 10 la so chan. Switch...case Phn sau chng ta s tip tc vi While v For.

Thc hnh v cc lnh iu khin phn 2


Bn thm nhng dong sau(in m) vo First.java. package Package2; import Package2b.*;

public class First { public void printFirst(String displayString) { System.out.println(displayString); } public void printFirst(String displayString,String displayString2) { System.out.println(displayString); System.out.println(displayString2); } public void printFirst(int overInt) { System.out.println("Number: "+ overInt); } public static void main(String[] args) { Second sc = new Second(); sc.printString("Hello World"); Third th = new Third(); th.printString("Hello Viet Nam"); FirstB fb = new FirstB(); fb.printFirstB("Hello from FirstB"); First f = new First(); First.FirstC innerObject = f.new FirstC(); innerObject.printFirstC("Hello from C"); new Base().print(); First overFirst = new First(); overFirst.printFirst("Hello from original", "Hello from overloaded"); overFirst.printFirst(20); Second secondOver = new Second(); secondOver.printFirst("Test from First"); int a=10; int b; if (a % 2 == 0){ b=1; System.out.printf("so "+a+" la so chan"); }else { b=2; System.out.printf("so "+a+" la so le"); } switch(b){ case 1: System.out.printf("so "+a+" la so chan. Switch...case"); break;

case 2: System.out.printf("so "+a+" la so le. Switch...case"); break; } //Tinh tong cac so tu 1-10 int sum = 0; int i = 1; while ( i <= 10 ) { sum = sum + i; i++; } System.out.println("\nThe sum is: " + sum); } public static class FirstB { public void printFirstB(String displayString) { System.out.println(displayString); First.FirstB nestedObject = new First.FirstB(); } } public class FirstC { public void printFirstC(String displayString) { System.out.println(displayString); } } } Chy th bn s thy thm dng: The sum is: 55

Code khng c g mi ngoi tr '\n'. y l k hiu xung dng (new line). y l c mun xut hin khi thc hin chng trnh hay ni cch khc l khi xut d liu ra, y l bng cc k t . Chui thot \n M t a con tr n dng k tip (Bt u mt dng mi )

\r \t \\ \ \

a con tr v u dng (Ging k t carriage return) a con tr n v tr Tab-Stop (Nh v tr Tab cu k t) In vch cho ngc (backslash) In du nhy n () In du nhy kp ()

Nh ni trong phn trc, nu bn khng mun lp v tn, bn phi lm sao tho chng ta dng bin i, v c mi ln lp th bin i s tin gn n gii hn. Ni cch kin thot khi vng lp cng c t l cao hn. C th lc u iu kin lun l T Nhim v ca chng ta l lm sao sau mt s vng lp nht nh th iu kin s kh vng lp.

Nu bn l qun hay c s xut luc vit code v thy chng trnh "c v" nh ang Break ngng.

Thc hnh v cc lnh iu khin phn 4


Phn ny chng ta s thc hnh vi For. Bn thm nhng dng code sau(in m) vo First.java package Package2; import Package2b.*; public class First { public void printFirst(String displayString) { System.out.println(displayString); } public void printFirst(String displayString,String displayString2) { System.out.println(displayString); System.out.println(displayString2); } public void printFirst(int overInt) { System.out.println("Number: "+ overInt); } public static void main(String[] args) { Second sc = new Second(); sc.printString("Hello World");

Third th = new Third(); th.printString("Hello Viet Nam"); FirstB fb = new FirstB(); fb.printFirstB("Hello from FirstB"); First f = new First(); First.FirstC innerObject = f.new FirstC(); innerObject.printFirstC("Hello from C"); new Base().print(); First overFirst = new First(); overFirst.printFirst("Hello from original", "Hello from overloaded"); overFirst.printFirst(20); Second secondOver = new Second(); secondOver.printFirst("Test from First"); int a=10; int b; if (a % 2 == 0){ b=1; System.out.printf("so "+a+" la so chan"); }else { b=2; System.out.printf("so "+a+" la so le"); } switch(b){ case 1: System.out.printf("so "+a+" la so chan. Switch...case"); break; case 2: System.out.printf("so "+a+" la so le. Switch...case"); break; } //Tinh tong cac so tu 1-10 int sum = 0; int i = 1;

while ( i <= 10 ) { sum = sum + i;

i++; } System.out.println("\nThe sum is: " + sum); String test = "Here is For loop"; for (int i2 = 0; i2 < test.length(); i2 = i2 + 1) { // Test and Loop System.out.print(test.charAt(i2)); System.out.print(" "); }

} public static class FirstB { public void printFirstB(String displayString) { System.out.println(displayString); First.FirstB nestedObject = new First.FirstB(); } } public class FirstC { public void printFirstC(String displayString) { System.out.println(displayString); } }

} Code thm vo rt ngn, nhng c n hai phng thc mi: length() v charAt(). Tm thi chng ta chp nhn l nhng phng thc c sn ca String, mt dng tnh c bao nhiu k t trong mt chui, ci cn li tr v k t ti v tr trong du ngoc n. Cc phn sau ta s ni li vn ny.

Dng thm vo th nht: khai bo mt bin chui.

Dng th hai l lnh for: bt u t 0 v sau mi vng th cng thm 1 cho n khi no bng vi s k t ca chui test ( y l 16 k c khong trng). Dng th ba: In ra mn hnh k t ti i2 (Lu l index s bt u t 0, c ngha l ch H c index l 0, ch e c index l 1...) Dng cui cng: In ra mt khong trng. Mc ch l cho d nhn m thi.

Lu li v chy th bn s thy thm dng: Here is For loop

Chng ta tm dng y. Hello World cng phnh to ra qu nhiu, hn na nhng ci c bn nht chng ta cng bn qua. Cc phn sau chng ta s thc hnh ring l nhng chng trnh hon chnh.

Applet
Applet l chng trnh chy trn Internet thng qua cc trnh duyt h tr Java nh IE hay Netscape,FireFox.Bn c th dng cc cng c ca Java xy dng Applet. Applet c nhng bn trong trang Web hoc file HTML. Khi trang Web hin th trong trnh duyt, Applet s c np v thc thi. Applet v HTML

Bn dng cc th nhng Applet vo trang web. Th c bn nht phi c l cp th <applet></applet>. Ngoi ra cn c cc cp th khc

C hai vn cng ngh c bn c t ra l: tc x l v an ton d liu. Do hot ng trn nguyn l thng dch nn

cc JAVA APPLET chy c phn chm hn cc trnh ng dng khc c bin dch ra ngn ng my, tuy nhin l gi phi tr cho tnh ph dng (c th chy trn nhiu mi trng lp trnh khc nhau) v vi s tin b ca cng ngh phn cng th JAVA APPLET vn p ng c cc yu cu v tc . Vn an ton d liu trn mng c t ra do JAVA APPLET hot ng trong mi trng ca trnh duyt mng. Chc bn s khng c hi lng nu trong lc bn ang xem cc trang WWW ca mt cng ty cnh tranh th chnh cc applet ca cng ty ny li ang lng sc a cng ca bn v chuyn i cc thng tin qu gi ca bn. loi b tnh trng , nhng nh sng lp JAVA quyt nh hn ch tp lnh thao tc c s dng trong cc applet. Cc JAVA APPLET khng oc php, v d nh c v ghi cc tp tin ca nhng ngi s dng mng; iu ngn chn vic ci VIRUS ln a cng cng nh ngn chn vic truyn i cc thng tin t a cng... Mt vi v d: Dng Hyperlink: Nu bn n gin ch mun link ti mt applet ang chy trn mt trang web khc th bn khng cn dng th applet, ch cn dng hyperlink thi v d: Click vo y xem v d.

S dng Applet trn mt server khc Dng codebase tr ti URL : <applet codebase=http://javaboutique.internet.com/centipedo/classes code =centipedo.class width=500 height=448> </applet> Ni tm li bn co hai cch mt l link ti mt applet, thc cht l mt class file m chng ta quen thuc. Hai l nhng vo mt trang HTML. Chng ti s gii thiu ring v HTML. Tm thi d thc hnh cho nhng bi sau, bn ch cn nhp ging nh v d trn vo mt IDE no hay n gin nht l dng Notepad.

Tm mt Hosting min ph
Chng ti mun bn tht s thy "cng trnh" ca mnh c tm vc "th gii" nn bn qua v vn Hosting. Nu bn vit v chy mt ng dng Java dng Application th khng cn bn tm ti web hay hosting lm g. Nhng nu bn vit mt Applet th bn nn quan tm ti Web v hosting. Chng ti s chia s vi cc bn v web, v PHP, ASP...trong cc phn khc. Tm thi vi Applet, bn ch cn bit qua mt cht v HTML v nhng m applet nh chng ta ni trong phn trc vo trang HTML m thi. Bn hon ton c th chy th Applet ca mnh bng Applet Viewer hay bng trnh duyt IE, FireFox trn computer ca bn m khng cn phi "ht" i u c! Nhung s th v hn v cung tt hn nu bn mun sau ny tm hiu thm v JSP, Serverlethay PHP,ASP... Mun vy vic u tin l bn phi tm ni lu tr trang web ca bn, sau ny c th l c web site ca bn, l tm mt nh cung cp Hosting. C l logic nht cho nhng ai mi hc l tm mt Hosting min ph. C rt nhiu nh cung cp Hosting min ph. Cc nh cung cp free web hosting cng cho php bn chn mt tn min. Tuy nhin, theo chng ti bn nn ng k mt tn min vnh vin min ph, sau hosting th s hay hn. Trc ht l tn min Theo chng ti hin ti nh cung cp tn min min ph tt nht l co.cc. Bn vo http://www.co.cc, sau bn click vo Register

nh hnh di Bn nn ng k ngay vi tn, n s c li cho chng ta nu chng ta mun thay i tn. Hn na nu cha s dng bn hon ton c th kim tin t nhng tn min . Bn vo y tham kho bi vit lin quan.

Trang tip theo, trong phn Search for available domain names: CO.CC + CC.CC Bn chn mt tn cho web site tng lai ca bn ngay trong textbox.

Nu tn bn chn c ngi ng k bn s thy m hnh:

Bn c th chn mt trong nhng tn c ch available Free. Hoc bn cng c th nhp tn khc th li. Nu tn bn chn cha c ai chn bn s thy m hnh

Ti y bn click vo Sign Up bt u ng k. Nu Ok, web site ca bn s c dng: http://www.tenbanchon.co.cc. Sau in cc thng tin cn thit ng k.

Tip theo bn s nhn c thng bo

Bn c th: 1.
2.

Click vo nut Setup Set up ngay lc ny. Hoc bn c th Login vo sau v theo ng

dn (My account -> Manage domain -> Domain Setup) Set up Tuy nhin bn phi Setup trong vng 48 gi. Nu khng tn min s ht hiu lc. Mi vic hon tt, bn s nhn c thng bo ca co.cc xc nhn ng k. Tip theo l tm nh cung cp hosting. Bn vo freehostia ng k hosting. Vic ng k khng c g kh c. Ch xin lu nhp domain name m bn va ng k vi www.co.cc

Sau khong 15 pht bn s nhn c mail xc nhn ca freehostia. Trong c mi chi tit v password, username... Bn c th vo Control Panel bt u cng vic.

Bn s phi lm vic cui cng. y l ni dung c trong mail m freehostia gi cho bn.

IMPORTANT!!! Please change the DNS of your domain to the following and allow 24-48 hours for the DNS update: dns1.freehostia.com dns2.freehostia.com chnh l vic Setup m ta phi lm sau khi ng k vi co.cc Bn ng nhp vo co.cc Sau click vo Manager Domain

Tip tc click vo tenbandangky.co.cc phn DNS. Sau click vo nt Setup nhp cc thng s ni trn.

Bn cn phi ch trong vng 48 ting. Vic cn li ch l vo Control Panel ca Freehostia, vo phn File Maneger v upload cc file cn thit ln Host m thi. Lu l bn cn phi upload cc file vo th mc tenbanchon.co.cc (Bn click vo tenbanchon.co.cc vo th mc ) Li hay gp: Bn nh phi c file index. Xin cc bn nh upload file index vo ng ch. Index khc vi index. Nhiu bn t tn file l Index.html v s gp mt trang ging nh th ny

Nu bn dng JSP, bn cng s thy trang nh vy. L do l rt t Free Web Hosting h tr JSP. Chng ta s

bn ti vn ny trong phn JSP. Tm thi bn nn to mt trang index.html hay index.php. Chng ta s nhc li khi c bi thc hnh v Applet.

Tm mt Hosting min ph phn 2


Li hay gp: Bn nh phi c file index. Xin cc bn nh upload file index vo ng ch. Index khc vi index. Nhiu bn t tn file l Index.html hay Index.htm v s gp mt trang ging nh th ny

Bn cn i tn file Index (vit hoa ch I) thnh index. Ngoi Freehostia, bn cng c th vo http://000webhost.com ng k. Bn c th chn mt trong hai cch: dng lun tn min ca http://000webhost.com, hoc dng tn min cahttp://www.co.cc. Theo chng ti th bn nn dng cch th hai. Nh phn JSP sau bn s thy dng tn min duy nht s thun li th no. Click vo Sign up v theo hng dn. Sau khi bn in y thng tin v click nt Create My Account,Nu l IP ng bn s qua trang xc nhn IP. Bn s phi in 6 s xc nhn IP bng cch download ci phn mm ca h v chy n s c 6 s v in vo v click confirm & activate l xong.

Nu khng, bn s c chuyn qua trang xc nhn

Trong c y mi thng tin cn thit bn truy cp, upload, thay i web site ca bn. Sau ny bn c th Login vo theo a ch: http://members.000webhost.com/login.php Lu : Khi ng nhp vo i khi h bt bn xc minh IP mt ln na th bn lm tng t n khi ch Need IP Confirmation bin mt l xong. Trng hp ny thng xy ra nu bn dng internet cafe Tuy nhin ngay lc ny khi nhn c trang xc nhn, bn c th click vo Enter Control Panel bt u vic upload cc trang web ca mnh. y l mt phn giao din ca Control Panel

Mun upload, xa hay thay i cc trang web, bn click vo File Manager Bn s thy mn hnh sau:

n y mi thao tc bn s thy cng nh khi bn lm vic vi Windows m thi. Ch xin lu l bn phi:


1.

Upload cc trang web vo th mc public

html (Bn click vo public html xem ni dung trong )


2.

Bn phi c trang index trong th mc public

html. l trang s m ra khi ai vo theo a ch www.tenbanchon.co.cc (Bn nh point tn min hay l setup co.cc nh phn trc bn) Bn c th to mt trang html n gin, sau upload ln website ca bn xem kt qu.

M notepad, ghi vi ch g . Lu li vi tn l index.html. Xin nhc li l index.html hay index.htm khng phiIndex.html. Khi

lu bn bao tn index.html trong cp du "" v chn All file l OK.


Login vo 000webhost. Vo Control Panel Upload file index.html vo th mc puclic html (Bn phi vo puclic html trc, sau chn upload) Chim ngng trang web

Phn sau chng ta s thc hnh mt Applet c th. Trc ht bn cn ng k mt Tn min v mt Free Hosting, bt k nh cung cp no, ty thuc vo bn.

Thc hnh Applet


y l mt bi thc hnh n gin, nhng li rt nhiu cng on v cn mt cht kin nhn. Ton b gm c nhng bc sau:

Vit code v dch ra file Class mt Applet n gin. Vit mt file HTML sau nhng Applet vo bng Tag <Applet> Upload c hai ln Host Chy th

Bn vo y chp Code ca chng trnh. Ch l mt chng trnh kiu nh Hello World m chng ta lm. Tuy nhin y l mt Applet. Chng ta s phn tch sau. Trong phn ny chng ti mun bn chy th hon chnh mt Applet. Sau chng ta s quay li phn tch. Quan im ca chng ti l nhn thy "thnh qu" ri th c nhng phn tch s d hiu hn. y l cc bc: Bn m Eclipse ra.

Vo File-->New-->Java Project: To mi mt Project. t tn ty bn. y chng ti t tn l AppletPro1.

Sau trong AppletPro1 (Hay tn project m bn t), bn Click vo File-->New-->Class: To mt file mi, chng ti t tn l HelloApplet. Bn mun t tn g cng c, nhng phi lu Tn Class cng phi trng vi tn File. V d bn t tn abc th bn phi thay dng trn thnh public class abc extends Applet. Lu li compile nh bnh thng. Lc ny:

Bn c 1 file HelloApplet.class trong th mc thng thng l .....\workspace\AppletPro1\bin\HelloApplet.class (Hy tm workspace trong Mydocuments Bn hon ton c th chy th bng cch click vo run nh chng ta tng lm. Ch xin lu l y bn xem bng Applet viewer.y lhnhnh khi bn dng Applet viewer (Click vo Run):

Tuy nhin chng ta mun ton th gii bit ti tc phm ca chng ta, nn chng ta s host ln mt server.

V vy, tip theo bn cn vit mt trang HTML. Nu bn cha nm r v HTML th bn c thvo y tham kho. y l ni dung trang HTML ca chng ta, bn dng Notepad nhp vo v lu li vi phn m rng l .html: <HTML>

<HEAD>

<TITLE> A Simple Program </TITLE>

</HEAD>

<BODY>

Here is the output of my program:

<APPLET CODE="HelloApplet.class" WIDTH=150 HEIGHT=25>

</APPLET>

</BODY>

</HTML>

Cch lu li nh sau:

Sau khi nhp ni dung vo Notepad, bn bm vo Save, trong phn file name bn nhp vo tenfile.html. V d chng ti t l Hello.html Sau chn Save as type l All type. Cui cng click vo Save lu li. Xin lu l bn phi nh ni lu, trnh trng hp lu xong li mt cng tm.

Tip theo bn phi upload 2 file: HelloApplet.class v Hello.html ln Server. Lu l ch cn file HelloApplet.class, khng cn file HelloApplet.java. Hy vo: http://cp.freehostia.com/members/ V login theo tn v mt khu bn c. Click vo File Manager.

Thng thng bn s thy mn hnh trn. Nu khng bn tm th mc www vo. Sau bn click vo tenbandangky.freehostia.com nh mi tn ch pha trn vo th mc chnh v upload file ti y. ang tenbandangky.freehostia.com, trong phn upload fle, bn browse tm 2 fileHelloApplet.class v Hello.html v upload ln server. Vy l xong, bn c th vo tenbandangky.freehostia.com/Hello.html xem thnh qu.

Phn tch Hello World Applet


Trong cc phn trc, chng ta bit rng hm main() l bt buc cho cc chng trnh Java Application. Bn khng th chy dng ch Hello World n gin nu khng c hm main(). Applet cng la mt chng trnh Java, nhng khc cc Java Application. Applet c nhng vo trang HTML v s c thc thi nu Browser c h tr Java Applet. Mt Applet c chu k sng ca ring n. Chu k ny bao gm: init(), start(), stop(), destroy() Trong phng thc init() tng ng vi main() trong Java Application.

Trong v d thc hnh ca chng ta, bn khng thy init() v chng ta cha c nhu cu "ch bin" init(), tuy nhin n vn c gi khi trnh duyt np trang web ca bn v n c tha k t lp Applet (java.applet.Applet) . Bn hy thm dng sau: import java.applet.Applet; import java.awt.Graphics; public class HelloApplet extends Applet { public void init() { } public void paint(Graphics g) { g.drawString("Hello world!", 50, 25); } } V Save li, upload li HelloApplet.class ln Server v chy th, mi th s vn nh c. Tm tt v cc phng thc init(), start(), stop(), destroy() : Phng thc init() ch c gi ng duy nht mt ln trong vng i ca mt applet, l thi im m applet ln u tin c np. N thng c s dng c cc th PARAM, bt u ti v cc hnh nh hoc cc file media khc m bn cn v thit lp giao din ngi s dng. Phng thc start() c gi t nht l mt ln trong vng i ca mt applet, khi m applet c khi ng v khi ng li. Trong mt s trng hp th n c th c gi nhiu hn 1 ln. Nhiu applet m bn vit s c th khng c phng thc start()tng minh v n s ch tha k li t siu lp ca chng. Phng thc start() thng c s dng khi ng bt c mt lung no m applet s cn n khi n chy. Phng thc stop() c gi t nht mt ln trong vng i ca mt applet, khi trnh duyt ri khi trang c nhng applet. Applet ca bn nn dng phng thc stop() ngng chy bt c mt lung no ang din ra. Phng thc destroy() c gi hy Applet. Chng ta quay li chng trnh HelloApplet.java Dng u tin: Applet bt buc phi l lp con ca lp java.applet.Applet (lu vit hoa ch Applet th hai-y l li rt hay gp) chnh v vy tt c mi applet ca bn phi bao gm dng u tin: import java.applet.Applet

Dng th hai: Bn khng In mt dng ch ra mn hnh nh trong Java Application m bn phi v n ra. Chnh v vy bn phi dng cc phng thc trong lp Graphics, v chng ta phi : import java.awt.Graphics. Gi awt l mt vn m ta s bn sau, tuy nhin lc ny bn tm chp nhn nh vy. Dng th ba: Chng ta dng c php extends to ra mt subclass ca lp Applet. Dng th t v nm: Mun biu din Applet ra mn hnh, ta phi dng phng thc pain(). Tham s ca pain() l mt Graphics, hy tng tng n String khi bn thc hnh Hello World. Chng ta gi phng thc drawString() ca lp awt.Graphics v dng ch Hello World ti ta x=50; y=25. Bn tham kho lp Applet: Lp Applet Cn y l lp Graphics Lp Graphics Tm thi chng ta dng y. Ta s thc hnh tip trong phn sau.

Thc hnh Applet phn 2


Hy coi li Class Graphics . Trong Class ny c rt nhiu Method. Phng thc drawString() l mt trong nhng phng thc . Phn ny chng ti ch gi v mun bn mc sc "sng to" Ban th thm hai dng sau vo HelloApplet, lu li v chy th: import java.applet.Applet; import java.awt.Graphics; public class HelloApplet extends Applet { public void paint(Graphics g) { g.drawString("Hello world!", 50, 25); g.drawLine(20,20,90,90); g.drawOval(90,90,40,80); } }

Kt qu:

Da vo bn c th th cc phng thc khc. Hy c gng th cng nhiu cng tt. Mt s phng thc: V ng trn/elip public void drawOval(int x, int y, int width, int height); T ng trn/elip public void fillOval(int x, int y, int width, int height); V cung trn public void drawArc(int x, int y, int width, int height,int startAngle, int arcAngle); V xu k t public void drawString(String str, int x, int y); V nh public void drawImage(Image img, int x, int y,...); Tm tt v Applet:

Phng Chc nng thc

init()

c gi trong qu trnh khi to applet. Trong qu trnh khi to, n s to i tng cung cp cho applet. Phng thc ny c dng ti cc hnh nh ho, khi to cc bin v to cc i tng. c gi gi khi mt applet bt u thc thi. Mt khi qu trnh khi to hon tt, th applet c khi ng. Phng thc ny c dng khi ng li applet sau khi n ngng trc c gi khi ngng thc thi mt applet. Mt applet b ngng trc khi n b hu.

start()

stop()

destroy() c dng hu mt applet. Khi mt applet b hu, th b nh, thi gian thc thi ca vi x l, khng gian a c tr v cho h thng.

Cc Gi v Giao Din phn 1


Chng ta lm hai bi thc hnh Applet rt n gin. Mc ch chnh ch l bn quen m thi, chng ta s quay li vi nhng bi tht s hu ch. Phn ny chng ta s tr li "qu o" vi cc Package v Interface. C hai vn m chng ti mun bn nm vng.

Th nht l Class v Object Th hai l Package v Interface.

Chng ta bn qua v Class v Object: Mt chng trnh Java s gm nhiu Class hp thnh. Cc class ging nh mt mu chung, cn cc object ging nh mt sn phm thc t to thnh t class mu. V d class Xe ni chung s c object Honda c th chng hn. Chng ta tm hiu qua v Package. Nhiu class hp li thnh mt package. Ngoi ra trong Package cn c Interface. Ni chung nhiu lp (class) v interface hp li thnh mt Package. Nhc li: Package tng t nh Folder trong my tnh ca bn. Nh bi thc hnh Applet trc, bn c xem qua hai class l Applet v Graphics. Java c mt th vin khng l cc lp, gi l "Application Programming Interface", hay vit tt l "API".

Bn nn vo tham kho thng xuyn. y l Java Platform API Specification . Gn nh tt c nhng g bn cn l tm ng Package, ng Class v "ch bin" theo bn m thi. V d bn click vo Package applet nh trong hnh:

Trong gi ny c mt lp(class) Applet, click vo Applet, bn s thy cc cc method ca lp ny:

Ni chung nu bn to c thi quen tham kho thng xuyn Java Platform API Specification th bn s d dng hn rt nhiu trong cng vic lp trnh Java. Quay li vn Package v Interface. Gi v giao din l hai thnh phn chnh ca chng trnh Java. Cc gi c lu tr theo kiu phn cp.

Cn v Interface? Ni ngn gn cc method to ra trung gian (interface) gia object v bn ngoi. Nhiu method c lin quan v rng s to thnh interface. Mt v d: Gi s bn cn to mt giao din (interface) xe p ua chng hn. Interface ny c th s nh sau: interface XeDapDua{

void thay_doi_dia(int dia);

void tang_toc_do(int tang);

void phanh(int stop);

} Hay n gin hn, bn mun nh ngha mt interface cng hai s thi chng hn: interface CongHaiso{ void cong(int so_thu_nhat, int so_thu_hai); }

Nhn chung, nh bn thy, cc method trong interface u rng, khng c g, ch l mt cu nh ngha m thi. thc hin hay ni cch khc mun ng dng interface, chng ta s dng t khaimplement. V d: class XedapHero implement XeDapDua { } Nu nhiu hn mt giao din c thc thi, cc tn s c ngn cch vi nhau bi mt du phy. Sau khi implement mt giao din, bn s "thm mm, thm mui" vo cc method rng c cc method theo bn. Chng ta s tip tc bn v gi v giao din trong phn sau.

Cc Gi v Giao Din phn 2


Ti sao chng ta li cn interface? N cho php mt lp c nhiu lp cha (superclass). Cc chng trnh Java c th tha k chmt lp (class) ti mt thi im, nhng c th hin thc hng lot giao din (interface). Khi nh ngha mt lp, bn c th tha k (extends) mt lp khc. V d nh bi thc hnh Applet m chng ta lm chng hn. Tuy nhin, cc giao din khng th tha k (extends) cc lp, nhng chng c th tha k cc giao din khc. Nu khi bn thc hin (implement) mt giao din m tha k cc giao din khc, bn override cc phng thc trong giao din mi giao din tha k. Tt c cc phng thc trong cc giao din phi l kiu public. Bn khng c s dng cc b ng (modifers) chun khc nh protected, private,..khi khai bo cc phng thc trong giao din. Lu : Cc phng thc phi c nh ngha trong mt lp m lp implement mt giao din. C th l nu bn implement mt giao din A c tng cng 10 method th d c dng hay khng, bn cng phi nh ngha y c 10 method . Nh trong v d v XeDapDua phn trc chng hn. Nu bn to mt lp, v d: class XedapHero implement XeDapDua {

} Th ni dung bn trong ca lp XedapHero bt buc phi nh ngha, hay ni cch khc phi khai bo y c 3 method ca XeDapDua. class XedapHero implement XeDapDua {

void thay_doi_dia(int dia){} void tang_toc_do(int tang){} void phanh(int stop){}

} Lu du ; c thay bng {}. Mo: Nu bn implement mt interface no , vic u tin l bn c copy ton b cc method trong interface , cho vo trong ni dung ca class. Thay du ; bng {}. Save li trong Eclipse hay compile nu bn dng cch khc, nu khng thy li l OK. Bn c th thm tht theo bn sau ny. Khi bn nh ngha mt giao din mi, c ngha l bn ang nh ngha mt kiu d liu tham chiu mi. Bn c th s dng cc tn giao din bt c ni u nh bt k kiu d liu khc. Tm tt v Package: Gi c coi nh cc th mc, l ni bn t chc cc lp v cc giao din ca bn. Cc chng trnh Java c t chc nh nhng tp ca cc gi. Mi gi gm c nhiu lp, v/hoc cc giao din c coi nh l cc thnh vin ca n. Ni tm li, cc gi c ch cho cc mc ch sau: 1. Chng cho php bn t chc cc lp thnh cc n v

nh hn (nh l cc th mc), v lm cho vic xc nh v tr tr nn d dng v s dng cc tp tin ca lp mt cch ph hp.

2.

Gip trnh cho vic t tn b xung t (trng lp

tn). Khi bn lm vic vi mt s cc lp bn s cm thy kh quyt nh t tn cho cc lp v cc phng thc. i lc bn mun s dng tn ging nhau m tn lin quan n lp khc. Cc gi giu cc lp trnh vic t tn b xung t. 3. 4. lp. Chng ta s tip tc trong phn tip theo. Cng nh Class v Object, chng ti rt mong bn nm vng Package v Interface. Cc gi cho php bn bo v cc lp, d liu v phng Cc tn ca gi c th c s dng nhn dng cc thc mc rng hn trn mt nn tng class-to-class.

Cc Gi v Giao Din phn 3


to ra mt lp l thnh vin ca gi, bn cn bt u m ngun ca bn vi mt khai bo gi, nh sau: package mypackage; Hy ghi nh cc im sau trong khi to gi:

on m phi bt u vi mt pht biu package. iu ny ni ln rng lp c nh ngha trong tp tin l mt phn ca gi xc nh. M ngun phi nm trong cng mt th mc, m th mc li l tn gi ca bn. Quy c rng, cc tn gi s bt u bng mt ch thng phn bit gia lp v gi. Cc pht biu khc c th xut hin sau khai bo gi l cc cu lnh nhp, sau chng bn c th bt u nh ngha lp ca bn. Tng t tt c cc tp tin khc, mi lp trong mt gi cn c bin dch. cho chng trnh Java ca bn c kh nng s dng cc gi , hy nhp (import) chng vo m ngun ca bn.

S khai bo sau y l hp l v khng hp l :

Hp l package mypackage;import java.io.*; Khng hp l import java.io.*;package mypackage; Bn c cc tu chn sau khi import mt gi:

Bn c th nhp vo mt tp tin c th t gi:

import java.mypackage.calculate

Bn c th nhp (import) ton b gi:

import java.mypackage.*; Nh phn trc, bn thy l Java c mt th vin khng l cc gi, cc lp. Di y l mt s gi thng dng m bn s dng thng xuyn khi lp trnh Java:

Gi java.lang

M t

Khng cn phi khai bo nhp. Gi ny lun c nhp cho bn. Bao gm cc lp tr gip cho bn tt c cc thao tc vo ra.

java.io

java.applet Bao gm cc lp bn cn thc thi mt applet trong trnh duyt. java.awt java.util Cc thnh phn xy dng giao din ho (GUI). Cung cp nhiu lp v nhiu giao din tin ch khc

nhau, nh l cc cu trc d liu, lch, ngy thng, v.v.. java.net Cung cp cc lp v cc giao din cho vic lp trnh mng TCP/IP.

Cch to mt gi: Nh trong cc bi thc hnh trc vi Hello World, bn to cc gi Package2, Package2b... Cc bc sau y cho php to nn mt gi do ngi dng nh ngha:

Khai bo gi bng cch s dng c php "package". on m phi bt u vi khai bo gi. iu ny ch ra rng lp c nh ngha trong tp tin l mt phn ca gi xc nh.

package mypackage;

S dng pht biu import nhp cc gi chun theo yu cu.

import java.util.*;

Khai bo v nh ngha cc lp s nm trong gi . Tt c cc thnh phn ca gi s l public, c th c truy cp t bn ngoi.

Lu cc nh ngha trn trong mt tp tin vi phn m rng .java, v dch cc lp c nh ngha trong gi. Nu th cng vic dch c th thc hin vi tham s "-d", tuy nhin nu dng Eclipse, bn khng cn phi bn tm. Chc nng ny to mt th mc trng vi tn gi, v t tp tin .class vo th mc c ch r.

Chng ta kt thc phn Package v Interface y.

Trc khi i vo phn tch mt s package hay s dng, chng ta s c vi bi thc hnh.

Thc hnh tr chi on s GUESS


Bn vo y tham kho m ngun. Chng ta quen thuc vi thc hnh nn chng ti s khng i vo chi tit. Ch gi vi cch bn tham kho:

Vi mi bi thc hnh, bn c th to mt Project mi, sau to mt class mi c tn trng vi class m ngun. Cui cng bn copy m ngun v paste vo class va to, save li v chy th. Bn cng c th ch cn to mt Project, sau mi bi thc hnh bn to mt lp mi c tn trng vi class m ngun. Cui cng bn copy m ngun v paste vo class va to, save li v chy th.

y l mt chng trnh tr chi n gin. N s to mt s ngu nhin, ngi chi s on v nhp s vo textbox. Ch c vy thi. Bn chy th, phn sau chng ta s phn tch c th.

Gi y chng ta quen phn no vi Eclipse, mi bi thc hnh chng ta s ch phn tch v khng i vo cc chi tit lu th no, chy ra sao...

Phn tch chng trnh Guess


C mt s cu lnh lin quan n nhng phn chng ta cha bn ti nn phn ny chng ta ch phn tch nhng nt chnh. V c nhiu lnh mi nn ta s khng i tng dng theo kiu "truyn thng" m theo cch khc. Trong project m bn to vit class Guess, bn hy vo File->New v to mi mt class mi tn l Guess2. Tip theo bn cn xem th class Guess2 ca chng ta s cn nhng phng thc no? 1. 2. c. 3. 4. Mt phng thc nhn s do ngi s dng nhp vo. Mt phng thc to s ngu nhin. Mt phng thc init() l bt buc phi c. c th thy Applet, phng thc paint() cng phi

C l nh vy l . Chi tit thm, chng ta s thy l chng ta cn v ra li gii thiu v thng bo kt qu. Hai ci ny c th chung trong paint(), tuy nhin r rng khng phi chng ta v cng mt lc kiu nh trong HelloApplet, m ty thi im ta s c nhng dng ch tng ng. Vy ta s thm 2 phng thc. 1. 2. c. 3. 4. 5. 6. Mt phng thc v ra dng gii thiu chng trnh. Mt phng thc nhn s do ngi s dng nhp vo. Mt phng thc to s ngu nhin. Mt phng thc thng bo kt qu. Mt phng thc init() l bt buc phi c. c th thy Applet, phng thc paint() cng phi

Bn c th t tn cho cc phng thc v t chng vo chng trnh Guess2 ca chng ta: import java.applet.Applet; import java.awt.Graphics;

public class Guess2 extends Applet{ public void init() { } public void paint(Graphics g) { }

void DrawInstructions(Graphics g) { } int GetGuess() {

} int CreateNumber() { } void ShowMessage(Graphics g, int guess) { } } Sau khi t cc phng thc rng nh vy vo, bn s thy li ti GetGuess() vCreateNumber(). L do l cc phng thc khng phi ging nh cc phng thc khc m chng ta lm t trc n nay. Bn thy l n phi tr v mt tr int, ch khng phi l loi void method. tm sa li, bn cho i mt gi tr tr v. import java.applet.Applet; import java.awt.Graphics;

public class Guess2 extends Applet{ public void init() { } public void paint(Graphics g) { }

void DrawInstructions(Graphics g) { } int GetGuess() {

return 1; } int CreateNumber() { return 1; } void ShowMessage(Graphics g, int guess) { } } Vy l bn c b khung ca chng trnh. 1. 2. Hy tp thi quen to mt ci sn cho chng trnh Trong lc to khung cho chng trnh, nu c li, hy

trc khi tht s vit code. tm sa li bng gi tr bt k. Phn tip theo chng ta s phn tch code.

Phn tch chng trnh Guess phn 2


Chng ta s tip tc vi Guess2. Chng ta thy rng ch duy nht paint() l c th thc s v Applet ca chng ta ra trnh duyt. Trong chng trnh khung, chng ta c paint(). Chng ta d nh s paint ci g ra trnh duyt? Nhng cu thng bo, cho hi, textbox.. Chng ta hon ton c th t "tt tn tt" cc th vo paint(). Nhng y l chng trnh sng, ngha l bn phi giao tip vi ngi s dng, mi thng ip, mi cng c s c xut hin ty thi im v c lp vi nhau. V vy cch tt nht l: 1. Vit mi th mt method ring, v d cho hi mt

phng thc, bo kt qu mt phng thc, hin textbox mt phng thc. 2. Sau cho cc phng thc vo paint().

3.

Cc phng thc phi c s lin h c th hin th

theo ng ca chng ta. Phn 3 l c bit quan trng. V d trong chng trnh ca chng ta, bn phi rng buc sao kt qu ch hin th khi ngi dng lm g m thi. Tm li, chng ta s t chng trnh nh sau: import java.applet.Applet; import java.awt.Graphics;

public class Guess2 extends Applet{ public void init() { } public void paint(Graphics g) { DrawInstructions(g); int guess = GetGuess(); ShowMessage(g, guess); }

void DrawInstructions(Graphics g) { } int GetGuess() { return 1; } int CreateNumber() { return 1; } void ShowMessage(Graphics g, int guess) {

} } Gi y c l n lc chng ta vit vi dng code c th "mc s th" cng trnh c ri. Trc ht l nhng thng bo, bn hy thm nhng dng sau vo Guess2: import java.applet.Applet; import java.awt.Graphics;

public class Guess2 extends Applet{ public void init() { } public void paint(Graphics g) { DrawInstructions(g); int guess = GetGuess(); ShowMessage(g, guess); }

void DrawInstructions(Graphics g) { g.drawString("Try to guess the number I am", 48, 65); g.drawString("thinking of. The number will be", 48, 80 ); g.drawString("between 0 and 100. You have an", 48, 9 5); g.drawString("unlimited number of tries.", 48, 110); g.drawString("Good Luck.", 95, 140); } int GetGuess() { return 1; }

int CreateNumber() { return 1; } void ShowMessage(Graphics g, int guess) { } }

Save li v chy th Guess2:

Vic tip theo l bn phi t mt textbox vo Applet, ng thi nhn gi tr trong textbox do ngi dng nhp vo. Chng ta gi l textbox, Java gi l TextField Chng ta s bn k v cch lm sao th giao din ca Java hay to cc component, bao gm cc button, textfield... vo Applet. Trong phn ny chng ta s ch ni qua m thi.

TextField l mt lp trong gi java.awt. Nh tho lun trc, mun s dng TextField bn ch vic dng cu lnh import m thi. y mt s bn s hi bi ri gia import v extends. Nu bn dng extends, bn s to mt subclass. Trong lc chng ta n gin ch mun to mt object m thi. Object ch khng phi l subclass Tm li bn cn import java.awt.TextField hay trnh sau ny phi import nhiu ln cc lp trong java.awt bn dng import java.awt.*; Sau bn to mt TextField object bng lnh new quen thuc. Bn cn khai bo mt bin v gn cho n gi tr l mt TextField object. Chng ta s bn ti phm vi bin sau. Lc ny tm thi chng ta thng nht l v bin TextField ca chng ta dng cho ton th chng trnh nn cn t ngoi tt c cc phng thc. Gi y bn c th tm thi sa li code nh sau, nh cho mt con s l s k t trong TextField: import java.applet.Applet; import java.awt.Graphics; import java.awt.*;

public class Guess2 extends Applet{ TextField textField1 = new TextField(10); public void init() { } public void paint(Graphics g) { DrawInstructions(g); int guess = GetGuess(); ShowMessage(g, guess); }

void DrawInstructions(Graphics g)

{ g.drawString("Try to guess the number I am", 48, 65); g.drawString("thinking of. The number will be", 48, 80); g.drawString("between 0 and 100. You have an", 48, 95); g.drawString("unlimited number of tries.", 48, 110); g.drawString("Good Luck.", 95, 140); } int GetGuess() { return 1; } int CreateNumber() { return 1; } void ShowMessage(Graphics g, int guess) { } }

Save li khng c li, tuy nhin khi chy th bn s khng thy TextField no c. Sao vy nh? L do l bn c TextField nhng bn cha gn n vo Applet. Chng ta s ni ngn gn ch ny: Bn hy vo y . Ngay phn u tin, ch cy th mc. Bn s thy lp Applet l subclass ca Panel. M Panel li l subclass ca Container. Click vo link java.awt.Container , bn s thy cc phng thc trong lp Container. Mum gn mt Component nh TextField vo Applet hay ni chung l gn vo mt Container no (Applet cng l mt container v l subclass nh phn tch trn) chng ta dng phng thc add()

Bn phi t add() bn trong mt phng thc. Chng ta c sn mt phng thc bn khi to cc th, l init(). Tm li, bn s t TextField nh sau: import java.applet.Applet; import java.awt.Graphics; import java.awt.*;

public class Guess2 extends Applet{ TextField textField1 = new TextField(10); public void init() { add(textField1); } public void paint(Graphics g) { DrawInstructions(g); int guess = GetGuess(); ShowMessage(g, guess); }

void DrawInstructions(Graphics g) { g.drawString("Try to guess the number I am", 48, 65); g.drawString("thinking of. The number will be", 48, 80); g.drawString("between 0 and 100. You have an", 48, 95); g.drawString("unlimited number of tries.", 48, 110); g.drawString("Good Luck.", 95, 140); } int GetGuess() { return 1; } int CreateNumber() { return 1;

} void ShowMessage(Graphics g, int guess) { } } Gi y nu Save li v chy th bn s thy TextField:

Chng ta s tip tc trong phn sau.

Phn tch chng trnh Guess phn 3


Chng ta tip tc vi Guess2. Trong phn trc, tm sa li, chng ta cho GetGuess() v CreateNumber() tr v mt tr s bt k. n lc chng ta hon chnh 2 phng thc . u tin l GetGuess() y l phng thc chng ta to ra nhn s m ngi dng nhp vo TextField. n gin qu! Ch vic ly d liu trong TextField thi!

Tuy nhin ci m chng ta cn l s. Trong lc d liu trong TextField li l chui (String). Vy chng ta cn ly d liu trong TextField, sau i qua mt d liu dng s, ay chng ta chn l loi int. Vy bn tip tc thay i Guess2 nh sau: import java.applet.Applet; import java.awt.*;

public class Guess2 extends Applet{ TextField textField1 = new TextField(10); public void init() { add(textField1); } public void paint(Graphics g) { DrawInstructions(g); int guess = GetGuess(); ShowMessage(g, guess); } void DrawInstructions(Graphics g) { g.drawString("Try to guess the number I am", 48, 65); g.drawString("thinking of. The number will be", 48, 80); g.drawString("between 0 and 100. You have an", 48, 95); g.drawString("unlimited number of tries.", 48, 110); g.drawString("Good Luck.", 95, 140); } int GetGuess() { String s = textField1.getText(); int num = Integer.parseInt(s); return num; } int CreateNumber() { return 1; }

void ShowMessage(Graphics g, int guess) { } } Bn s phi vit rt nhiu code tng t nh 3 dng code mi thm vo. V vy hy vng bn hiu v "thuc" 3 dng code . 1. u tin bn to mt bin String v gn cho n gi tr

ly t TextField. Phng thc getText() l mt phng thc ca lp TextField . 2. Sau bn to mt bin int, gn cho n gi tr ly t TextField chuyn thnh kiu d liu int thng qua c php Integer.parseInt(String stringValue). 3. Cui cng dng cu lnh return tr gi tr v cho phng thc. Nu ngay thi im ny bn chy th, bn s nhn c cnh bo. Cnh bo ch khng phi li. L do l hin ti TextField ca chng ta rng, nn chui s s l chui rng. Integer.parseInt("") tc l chuyn i mt chui rng thnh s, cng c ngha l khng th c. khng c li, chng ta gn cho TextField mt gi tr mc nh l xong. import java.applet.Applet; import java.awt.*;

public class Guess2 extends Applet{ TextField textField1 = new TextField(10); public void init() { add(textField1); textField1.setText("50"); } public void paint(Graphics g) { DrawInstructions(g); int guess = GetGuess(); ShowMessage(g, guess);

} void DrawInstructions(Graphics g) { g.drawString("Try to guess the number I am", 48, 65); g.drawString("thinking of. The number will be", 48, 80); g.drawString("between 0 and 100. You have an", 48, 95); g.drawString("unlimited number of tries.", 48, 110); g.drawString("Good Luck.", 95, 140); } int GetGuess() { String s = textField1.getText(); int num = Integer.parseInt(s); return num; } int CreateNumber() { return 1; } void ShowMessage(Graphics g, int guess) { } } Bn c th setText l 50, 60...hay 1,2,3,4 g cng c. Gi chy th s khng c li na. Hy tip tc vi CreateNumber() Mc ch ca phng thc ny l to mt s ngu nhin. Lin quan n mi vn v to s ngu nhin, tnh cn, tnh ly tha...bn phi import java.lang.Math; Vic tip theo ch n gin l bn dng method random() ca lp Math m thi. Theo m ngun, v bin m bn tr trong phng thc ny s dng trong ton b chng trnh nn cng nh bin TextField, bn phi khai bo trc v bn ngoi mi phng thc.Tuy nhin thc s y bn hon ton c th dng bin bn trong phng thc.

Tm li: import java.applet.Applet; import java.awt.*; import java.lang.Math; public class Guess2 extends Applet{ TextField textField1 = new TextField(10); int number; public void init() { add(textField1); textField1.setText("50"); } public void paint(Graphics g) { DrawInstructions(g); int guess = GetGuess(); ShowMessage(g, guess); } void DrawInstructions(Graphics g) { g.drawString("Try to guess the number I am", 48, 65); g.drawString("thinking of. The number will be", 48, 80); g.drawString("between 0 and 100. You have an", 48, 95); g.drawString("unlimited number of tries.", 48, 110); g.drawString("Good Luck.", 95, 140); } int GetGuess() { String s = textField1.getText(); int num = Integer.parseInt(s); return num; } int CreateNumber() { float n = (float)Math.random(); number = (int)(n * 100 + 1); return number; } void ShowMessage(Graphics g, int guess)

{ } } Mun c mt s ngu nhin ta dng Math.random(); Tr tr v l kiu double t 0 n 1. Chng ta mun dng kiu float nn ta dng phng php p kiu: (float)Math.random(); Dng tip theo cng l mt ln p kiu na, ln ny l "p" qua kiu int. n*100+1 l lm g? Nu bn thay 100 trong Guess thnh 1 chng hn, bn s thy bn d dng thng khi nhp s 1 vo TextField! n*100+1 to cc s ngu nhin t 1 n 100. V d: n=0.2 n*100+1=21 Chng ta tm dng y. Phn sau chng ta s tip tc vi Guess2.

Phn tch chng trnh Guess phn 4


Chng ta tip tc vi Guess2. Chng ta hon thin hu nh y cc phng thc. Tuy nhin phng thc ShowMessage() cn trng. L do l chng ta khng th "Show" ra ngay t u c, cc li "nhn nh" hay "chc mng" ny ch c "Show" sau khi ngi s dng nhp s vo TextField m thi. Lm sao chng ta bit khi no th ngi s dng nhp s vo TextField? y lin quan n s kin v nm bt s kin m chng ta s bn n trong nhng phn sau. Tm thi chng ta ch cn bit th ny:

Khi ngi dng nhp mt s, click chut, qut mt dng ch, click vo mt button hay press phm enter....tt c l nhng s kin (Event). Mi mt thnh phn, component...u c gn cho mt cng c nghe s kin, khi co s kin no xy ra th chng ta s bit l s kin g, xy ra u.. V t ta c x l thch hp. y l package java.awt.event Bn phi import gi ny vo chng trnh ca chng ta. Trong tng lai, bn cng s phi lp i lp li ng tc ny nu mun chng trnh ca bn "sng" tc l c th giao tip c. Trc tin bn phi implement ActionListener interface. y l Interface dng "nghe ngng" cc s kin v x l s kin. Nn nh y ch l Interface, ngha l rng, ch c nh ngha method m thi. Sau khi implement chng ta s vit code cho cc method. Bn thm dng sau vo Guess2: import java.applet.Applet; import java.awt.*; import java.lang.Math; import java.awt.event.*; public class Guess2 extends Applet implements ActionListener{ TextField textField1 = new TextField(10); int number; public void init() { add(textField1); textField1.setText("50"); } public void paint(Graphics g) { DrawInstructions(g); int guess = GetGuess(); ShowMessage(g, guess); }

void DrawInstructions(Graphics g) { g.drawString("Try to guess the number I am", 48, 65); g.drawString("thinking of. The number will be", 48, 80); g.drawString("between 0 and 100. You have an", 48, 95); g.drawString("unlimited number of tries.", 48, 110); g.drawString("Good Luck.", 95, 140); } int GetGuess() { String s = textField1.getText(); int num = Integer.parseInt(s); return num; } int CreateNumber() { float n = (float)Math.random(); number = (int)(n * 100 + 1); return number; } void ShowMessage(Graphics g, int guess) { } } Bn s nhn c li. L do l v bn cha nh ngha cc method trong mt Interface m bn va implement (xem li phn trc ) Trong Interface ActionListener ch c mt phng thc. Bn copy v paste vo Guess2 nh sau: import import import import java.applet.Applet; java.awt.*; java.lang.Math; java.awt.event.*;

public class Guess2 extends Applet implements ActionListener{ TextField textField1 = new TextField(10); int number; public void init() { add(textField1); textField1.setText("50"); } public void paint(Graphics g) { DrawInstructions(g); int guess = GetGuess(); ShowMessage(g, guess); } public void actionPerformed(ActionEvent event) { } void DrawInstructions(Graphics g) { g.drawString("Try to guess the number I am", 48, 65); g.drawString("thinking of. The number will be", 48, 80); g.drawString("between 0 and 100. You have an", 48, 95); g.drawString("unlimited number of tries.", 48, 110); g.drawString("Good Luck.", 95, 140); } int GetGuess() { String s = textField1.getText(); int num = Integer.parseInt(s); return num; } int CreateNumber() { float n = (float)Math.random(); number = (int)(n * 100 + 1); return number; }

void ShowMessage(Graphics g, int guess) { } } Chng ta cha lm g ht nhng tm thi s khng c li na. By gi bn phi gn mt cng c cho TextField c th nghe ngng c. Trong lp TextField c sn mt phng thc l addActionListener(). Bn thm dng sau vo chng trnh: import import import import java.applet.Applet; java.awt.*; java.lang.Math; java.awt.event.*;

public class Guess2 extends Applet implements ActionListener{ TextField textField1 = new TextField(10); int number; public void init() { add(textField1); textField1.setText("50"); textField1.addActionListener(this); } public void paint(Graphics g) { DrawInstructions(g); int guess = GetGuess(); ShowMessage(g, guess); } public void actionPerformed(ActionEvent event) { }

void DrawInstructions(Graphics g) { g.drawString("Try to guess the number I am", 48, 65); g.drawString("thinking of. The number will be", 48, 80); g.drawString("between 0 and 100. You have an", 48, 95); g.drawString("unlimited number of tries.", 48, 110); g.drawString("Good Luck.", 95, 140); } int GetGuess() { String s = textField1.getText(); int num = Integer.parseInt(s); return num; } int CreateNumber() { float n = (float)Math.random(); number = (int)(n * 100 + 1); return number; } void ShowMessage(Graphics g, int guess) { } } By gi chng ta phi th xem "my nghe ln" ca chng ta c hot ng khng. Bn thm dng sau vo chng trnh: import import import import java.applet.Applet; java.awt.*; java.lang.Math; java.awt.event.*;

public class Guess2 extends Applet implements ActionListener{ TextField textField1 = new TextField(10); int number; public void init() { add(textField1);

textField1.setText("50"); textField1.addActionListener(this); } public void paint(Graphics g) { DrawInstructions(g); int guess = GetGuess(); ShowMessage(g, guess); } public void actionPerformed(ActionEvent event) { System.out.println("Hello"); } void DrawInstructions(Graphics g) { g.drawString("Try to guess the number I am", 48, 65); g.drawString("thinking of. The number will be", 48, 80); g.drawString("between 0 and 100. You have an", 48, 95); g.drawString("unlimited number of tries.", 48, 110); g.drawString("Good Luck.", 95, 140); } int GetGuess() { String s = textField1.getText(); int num = Integer.parseInt(s); return num; } int CreateNumber() { float n = (float)Math.random(); number = (int)(n * 100 + 1); return number; } void ShowMessage(Graphics g, int guess) { }

} Save li v chy th chng trnh. Bn nhp th mt s vo TextField sau Enter, nu thy ch Hello trong Eclipse th mi th hot ng hon ho. Chng ta s tip tc trong phn sau.

Phn tch chng trnh Guess phn 5


By gi l lc chng ta x l s kin. Nhng t t . Trc ht chng ta phi coi li hai th dng so snh v a ra cch x l: 1. 2. S ngu nhin S do ngi dng nhp vo.

Chng ta vit phng thc to s ngu nhin, nhng s u? Cha c! V chng ta gi phng thc u. Bn phi gi to n, xin lu khc vi number trong phng thc, number ny phi l bin ton cc, dng cho c chng trnh: import import import import java.applet.Applet; java.awt.*; java.lang.Math; java.awt.event.*;

public class Guess2 extends Applet implements ActionListener{ TextField textField1 = new TextField(10); int number; public void init() { add(textField1); textField1.setText("50"); textField1.addActionListener(this); number = CreateNumber(); } public void paint(Graphics g) {

DrawInstructions(g); int guess = GetGuess(); ShowMessage(g, guess); } public void actionPerformed(ActionEvent event) { System.out.println("Hello"); } void DrawInstructions(Graphics g) { g.drawString("Try to guess the number I am", 48, 65); g.drawString("thinking of. The number will be", 48, 80); g.drawString("between 0 and 100. You have an", 48, 95); g.drawString("unlimited number of tries.", 48, 110); g.drawString("Good Luck.", 95, 140); } int GetGuess() { String s = textField1.getText(); int num = Integer.parseInt(s); return num; } int CreateNumber() { float n = (float)Math.random(); number = (int)(n * 100 + 1); return number; } void ShowMessage(Graphics g, int guess) { } } Phn th hai l s do ngi dng nhp. Chnh l int guess = GetGuess(); Vy by gi ch cn so snh guess v number v cho cch x l m thi.

Bn thm code sau vo Guess2: import import import import java.applet.Applet; java.awt.*; java.lang.Math; java.awt.event.*;

public class Guess2 extends Applet implements ActionListener{ TextField textField1 = new TextField(10); int number; public void init() { add(textField1); textField1.setText("50"); textField1.addActionListener(this); number = CreateNumber(); } public void paint(Graphics g) { DrawInstructions(g); int guess = GetGuess(); ShowMessage(g, guess); } public void actionPerformed(ActionEvent event) { System.out.println("Hello"); } void DrawInstructions(Graphics g) { g.drawString("Try to guess the number I am", 48, 65); g.drawString("thinking of. The number will be", 48, 80); g.drawString("between 0 and 100. You have an", 48, 95); g.drawString("unlimited number of tries.", 48, 110); g.drawString("Good Luck.", 95, 140); } int GetGuess() { String s = textField1.getText();

int num = Integer.parseInt(s); return num; } int CreateNumber() { float n = (float)Math.random(); number = (int)(n * 100 + 1); return number; } void ShowMessage(Graphics g, int guess) { if (guess < number) g.drawString("Your guess is too low.", 70, 185); else if (guess > number) g.drawString("Your guess is too high.", 70, 185); else g.drawString("You guessed the number!", 65, 185); } } Chy th, bn s khng thy ng tnh g! L do l khi paint() v Applet ra th n s y nh vy. Mun "c g" th bn phi xa mi th, sau v li. Nhng khi no th v li? Chnh l luc chng ta x dng actionPerformed(). Bn xa dng System.out.println() v thay bng lnh repaint(). import import import import java.applet.Applet; java.awt.*; java.lang.Math; java.awt.event.*;

public class Guess2 extends Applet implements ActionListener{ TextField textField1 = new TextField(10); int number; public void init() { add(textField1);

textField1.setText("50"); textField1.addActionListener(this); number = CreateNumber(); } public void paint(Graphics g) { DrawInstructions(g); int guess = GetGuess(); ShowMessage(g, guess); } public void actionPerformed(ActionEvent event) { repaint(); } void DrawInstructions(Graphics g) { g.drawString("Try to guess the number I am", 48, 65); g.drawString("thinking of. The number will be", 48, 80); g.drawString("between 0 and 100. You have an", 48, 95); g.drawString("unlimited number of tries.", 48, 110); g.drawString("Good Luck.", 95, 140); } int GetGuess() { String s = textField1.getText(); int num = Integer.parseInt(s); return num; } int CreateNumber() { float n = (float)Math.random(); number = (int)(n * 100 + 1); return number; } void ShowMessage(Graphics g, int guess) { if (guess < number)

g.drawString("Your guess is too low.", 70, 185); else if (guess > number) g.drawString("Your guess is too high.", 70, 185); else g.drawString("You guessed the number!", 65, 185); } } Gi y bn c mt chng trnh hon chnh, chy "ngon lnh", mi code khc trong Guess ch l phn ph, bn d dng thm tht. Chng ta dng y.

Tm tt quyn truy cp cc thnh phn ca lp


Java cung cp nhiu mc truy cp thng qua cc lp, cc gi v cc ch nh truy cp. Bng sau y s tm tt quyn truy cp cc thnh phn ca lp:

public Cng lp Cng gi- lp tha k (Subclass) Cng gi-khng tha k (nonSubclass) Khc gi-lp tha k (subclass) Khc gi-khng tha k (nonSubclass) Yes Yes

protected No modifier private Yes Yes Yes Yes Yes No

Yes

Yes

Yes

No

Yes

Yes

No

No

Yes

No

No

No

Gi java.lang
Mc nh, mi chng trnh java u nhp gi java.lang. V th, khng cn lnh nhp gi java.lang ny trong chng trnh. Lp String Chui l mt dy cc k t. Lp String cung cp cc phng thc thao tc vi cc chui. N cung cp cc phng thc khi to (constructor) khc nhau: String str1 = new String( ); //str1 cha mt chui rng. String str2 = new String(Hello World); //str2 cha Hello World char ch[] = {A,B,C,D,E};String str3 = new String(ch); //str3 cha ABCDE String str4 = new String(ch,0,2); //str4 cha AB v 0- tnh t k t bt u, 2- l s lng k t k t k t bt u. Ton t + c s dng cng chui khc vo chui ang tn ti. Ton t + ny c gi nh l ni chui. y, ni chui c thc hin thng qua lp StringBuffer. Chng ta s tho lun v lp ny trong phn sau. Phng thc concat( ) ca lp String cng c th thc hin vic ni chui. Khng ging nh ton t +, phng thc ny khng thng xuyn ni hai chui ti v tr cui cng ca chui u tin. Thay vo , phng thc ny tr v mt chui mi, chui mi s cha gi tr ca c hai. iu ny c th c gn cho chui ang tn ti.

Chui mc nh: Mt chng trnh Java c th cha nhiu chui. String Pool i din cho tt c cc ch c to trong chng trnh. Mi khi mt chui c to, String Pool tm kim trong n, nu tm thy nu

chui tn ti th khng to th hin m ch gn th tm thy cho chui mi. Vic ny tit kim rt nhiu khng gian b nh. V d: String day = Monday;String weekday = Monday; y, mt th hin cho bin day, bin c gi tr l Monday, c to trong String Pool. Khi chui bng ch weekday c to, c gi tr ging nh ca bin day, mt th hin ang tn ti c gn n bin weekday. V c hai bin day v weekday cng u nhm ch vo chui ging ht nhau trong String Pool. Cc phng thc lp String: Trong phn ny, chng ta s xem xt cc phng thc ca lp String. charAt( ) Phng thc ny tr v mt k t ti mt v tr trong chui. V d: String name = new String(Java Language);char ch = name.charAt(5); Bin ch cha gi tr L, t v tr cc s bt u t 0. startsWith( ) Phng thc ny tr v gi tr kiu logic (Boolean), ph thuc vo chui c bt u vi mt chui con c th no khng. V d: String strname = Java Language;boolean flag = strname.startsWith(Java); Bin flag cha gi tr true. endsWith( ) Phng thc ny tr v mt gi tr kiu logic (boolean), ph thuc vo chui kt thc bng mt chui con no khng, V d: String strname = Java Language;boolean flag = strname.endsWith(Java);

Bin flag cha gi tr false. copyValueOf( ) Phng thc ny tr v mt chui c rt ra t mt mng k t c truyn nh mt i s. Phng thc ny cng ly hai tham s nguyn. Tham s u tin ch nh v tr t ni cc k t phi c rt ra, v tham s th hai ch nh s k t c rt ra t mng. V d: char name[] = {L,a,n,g,u,a,g,e};String subname = String .copyValueOf(name,5,2); By gi bin subname cha chui ag. toCharArray( ) Phng thc ny chuyn chui thnh mt mng k t. V d: String text = new String(Hello World);char textArray[] = text.toCharArray( ); indexOf( ) Phng thc ny tr v th t ca mt k t no , hoc mt chui trong phm vi mt chui. Cc cu lnh sau biu din cc cch khc nhau ca vic s dng hm. String day = new String(Sunday);int index1 = day.indexOf(n);//cha 2 int index2 = day.indexOf(z,2);//cha 1 nu z khng tm thy ti v tr 2. int index3 = day.indexOf(Sun); //cha mc 0 toUpperCase( ) Phng thc ny tr v ch hoa ca chui. String lower = new String(good morning);System.out.println(Uppercase: +lower.toUpperCase( )); toLowerCase( ) Phng thc ny tr v ch thng ca chui. String upper = new

String(APTECH);System.out.println(Lowercase: +upper.toLowerCase( )); trim() Phng thc ny ct b khong trng hai u chui. Hy th on m sau thy s khc nhau trc v sau khi ct b khong trng. String space = new String( Spaces );System.out.println(space);System.out.println(space.trim()); //Sau khi ct b khong trng equals() Phng thc ny so snh ni dung ca hai i tng chui. String name1 = Aptech, name2 = APTECH;boolean flag = name1.equals(name2); Bin flag cha gi tr false. Lp StringBuffer: Lp StringBuffer cung cp cc phng thc khc nhau thao tc mt i tng dng chui. Cc i tng ca lp ny rt mm do, l cc k t v cc chui c th c chn vo gia i tng StringBuffer, hoc ni thm d liu vo ti v tr cui. Lp ny cung cp nhiu phng thc khi to. V d: class StringBufferCons { public static void main(String args[]) { StringBuffer s1 = new StringBuffer(); StringBuffer s2 = new StringBuffer(20); StringBuffer s3 = new StringBuffer(StringBuffer); System.out.println(s3 = + s3); System.out.println(s2.length()); //chMa 0 System.out.println(s3.length()); //chMa 12 System.out.println(s1.capacity()); //chMa 16 System.out.println(s2.capacity()); //chMa 20 System.out.println(s3.capacity()); //chMa 28 } }

length() v capacity() ca StringBuffer l hai phng thc hon ton khc nhau. Phng thc length() cp n s cc k t m i tng thc cha, trong khi capacity() tr v tng dung lng ca mt i tng (mc nh l 16) v s k t trong i tng StringBuffer. Dung lng ca StringBuffer c th thay i vi phng thc ensureCapacity(). i s int c truyn n phng thc ny, v dung lng mi c tnh ton nh sau: NewCapacity = OldCapacity * 2 + 2 Trc khi dung lng ca StringBuffer c t li, iu kin sau s c kim tra:

Nu dung lng(NewCapacity) mi ln hn i s c truyn cho phng thc ensureCapacity(), th dung lng mi (NewCapacity) c t. Nu dung lng mi nh hn i s c truyn cho phng thc ensureCapacity(), th dung lng c t bng gi tr tham s truyn vo.

Cc phng thc lp StringBuffer: Trong phn ny, chng ta s xem xt cc phng thc ca lp StringBuffer vi mt chng trnh. append() Phng thc ny ni thm mt chui hoc mt mng k t vo cui cng ca i tng StringBuffer. V d: StringBuffer s1 = new StringBuffer(Good);s1.append(evening); Gi tr trong s1 by gi l goodevening. insert() Phng thc ny c hai tham s. Tham s u tin l v tr chn. Tham s th hai c th l mt chui, mt k t (char), mt gi tr nguyn (int), hay mt gi tr s thc (float) c chn vo. V tr chn s ln hn hay bng 0, v nh hn hay bng chiu di ca i tng StringBuffer. Bt k i s no, tr k t hoc chui, c chuyn sang chui v sau mi c chn vo. V d:

StringBuffer str = new StringBuffer(Java sion);str.insert(1,b); Bin str cha chui Jbava sion. charAt() Phng thc ny tr v mt gi tr k t trong i tng StringBuffer ti v tr c ch nh.V d: StringBuffer str = new StringBuffer(James Gosling);char letter = str.charAt(6); //cha G setCharAt() Phng thc ny c s dng thay th k t trong mt StringBuffer bng mt k t khc ti mt v tr c ch nh. StringBuffer name = new StringBuffer(Jawa);name.setCharAt(2,v); Bin name cha Java. setLength() Phng thc ny thit lp chiu di ca i tng StringBuffer. Nu chiu di c ch nh nh hn chiu di d liu hin ti ca n, th cc k t tha s b ct bt. Nu chiu di ch nh nhiu hn chiu di d liu th cc k t null c thm vo phn cui ca StringBuffer StringBuffer str = new StringBuffer(10);str.setLength(str.length() +10); getChars() Phng thc ny c s dng trch ra cc k t t i tng StringBuffer, v sao chp chng vo mt mng. Phng thc getChars() c bn tham s sau: Ch s u: v tr bt u, t ni m k t c ly ra. Ch s kt thc: v tr kt thc

Mng: Mng ch, ni m cc k t c sao chp. V tr bt u trong mng ch: Cc k t c sao chp vo mng ch t v tr ny. V d: StringBuffer str = new StringBuffer(Leopard);char ch[] = new char[10];str.getChars(3,6,ch,0); By gi bin ch cha par reverse() Phng thc ny o ngc ni dung ca mt i tng StringBuffer, v tr v mt i tng StringBuffer khc. V d: StringBuffer str = new StringBuffer(devil);StringBuffer strrev = str.reverse(); Bin strrev cha lived. Lp Math: Lp ny cha cc phng thc tnh (static) thc hin cc thao tc ton hc. Chng c m t nh sau: C php l Math.<tn hm> abs() Phng thc ny tr v gi tr tuyt i ca mt s. i s c truyn n n c th l kiu int, float, double, hoc long. Kiu d kiu byte v short c chuyn thnh kiu int nu chng c truyn ti nh l mt i s. V d: int num = -1;Math.abs(num) //tr v 1. ceil() Phng thc ny tm thy s nguyn nh nht ln hn hoc bng i s c truyn vo. floor()

Phng thc ny tr v s nguyn ln nht nh hn hoc bng i s c truyn vo. System.out.println(Math.ceil(8.02)); //tr v 9.0System.out.println(Math.ceil(-1.3)); //tr v -1.0System.out.println(Math.ceil(100)); //tr v 100.0System.out.println(Math.floor(-5.6)); //tr v -6.0System.out.println(Math.floor(201.1)); //tr v 201System.out.println(Math.floor(100)); //tr v 100 max() Phng thc ny tm gi tr ln nht trong hai gi tr c truyn vo. Cc i s c truyn vo c th l kiu int, long, double, v float. min() Phng thc ny tm gi tr nh nht trong hai gi tr c truyn vo. Cc i s c truyn vo c th l kiu int, long, double v float. round() Phng thc ny lm trn i s c du phy ng. V d, cu lnh Math.round(34.5) tr v 35. random() Phng thc ny tr v mt s ngu nhin kiu double gia 0.0 v 1.0. sqrt() Phng thc ny tr v cn bc hai ca mt s. V d, cu lnh Math.sqrt(144) tr v 12.0. sin() Phng thc ny tr v sine ca mt s, nu gc c truyn n bng radian. V d: Math.sin(Math.PI/2) tr v 1.0, gi tr ca sin 450. PI/2 radian = 90 . Gi tr ca PI c nh ngha trong lp Math

(Math.PI). cos() Phng thc ny tr v cosine ca mt gc tnh bng radian. tan() Phng thc ny tr v tan ca mt gc tnh bng radian. Lp Runtime: Lp Runtime cha thng tin v mi trng thc thi. Lp ny c s dng cho vic qun l b nh, v vic thc thi ca cc qu trnh x l khc. Mi chng trnh Java c mt th hin ca lp ny, cho php ng dng giao tip vi mi trng. N khng th c khi to, mt ng dng khng th to ra mt th hin ca thuc lp ny. Tuy nhin, chng ta c th tham chiu th hin trong lc thc hin chng trnh t vic dng phng thc getRuntime(). By gi, chng ta bit rng vic thu gom cc d liu khng thch hp trong Java l mt tin trnh t ng, v chy mt cch nh k. kch hot mt cch th cng b thu thp d liu khng cn c s dng ta gi phng thc gc() trn i tng Runtime hin thi. xem chi tit vic cp pht b nh, s dng cc phng thc totalMemory() v freeMemory(). Runtime r = Runtime.getRunTime(); .. .. long freemem = r.freeMemory(); long totalmem = r.totalMemory(); r.gc(); Bng sau trnh by mt vi phng thc ca lp ny:

Phng thc exit(int)

ngha

Dng vic thc thi, v tr v gi tr ca chng trnh cho h iu hnh. Nu thot bnh thng th tr v 0; gi tr khc 0 cho thot khng bnh thng.

freeMemory()

Tr v kch thc b nh cha s dng tnh bng byte Tr v th hin Runtime Gi b phn thu thp rc.

getRuntime() gc()

totalMemory() Tr v kch thc b nh tnh bng byte. exec(String) Chy chng trnh mi trng bn ngoi

Bn c th tham chiu n Runtime hin hnh thng qua phng thc Runtime.getRuntime(). Sau , bn c th chy chng trnh calc.exe v tham chiu n calc.exe trong i tngProcess. Lp System: Lp System cung cp cc tin chi nh l, dng vo, dng ra chun v dng li. N cng cung cp phng thc truy cp cc thuc tnh lin quan n h thng Runtime ca Java, v cc thuc tnh mi trng khc nhau nh l, phin bn (version), ng dn, hay cc dch v, v.v..Cc trng ca lp ny l in, out, v err, cc trng ny tiu biu cho dng vo, ra v li chun tng ng. Bng sau m t cc phng thc ca lp ny:

Phng thc exit(int)

Mc ch

Dng vic thc thi, v tr v gi tr ca on m. 0 cho bit c th thot ra mt cch bnh thng. Gi b phn thu thp rc.

gc()

getProperties()

Tr v thuc tnh ca h thng thi gian chy Java. Thit lp cc thuc tnh h thng hin hnh. Tr v thi gian hin ti bng mili giy (ms), c tnh t lc 0 gi ngy 01 thng 01 nm 1970.

setProperties()

currentTimeMillis()

arrayCopy(Object, int, Sao chp mng. Object, int, int) Lp System khng th to th hin (instance) c. Lp Class: Cc th hin ca lp ny cha trng thi thi gian thc hin ca mt i tng trong ng dng Java ang chy. iu ny cho php chng ta truy cp thng tin v i tng trong thi gian chy. Chng ta c th ly mt i tng ca lp ny, hoc mt th hin bng mt trong ba cch sau: S dng phng thc getClass() ca i tng.

S dng phng thc tnh forName() ca lp ly mt th hin ca lp thng qua tn ca lp . S dng mt i tng ClassLoader np mt lp mi.

Lp Class khng c phng thc xy dng (constructor). Lp Object: Lp Object l mt lp cha ca tt c cc lp. D l mt lp do ngi dng nh ngha khng tha k li bt k mt lp no khc, theo mc nh n tha k lp Object. Mt vi cc phng thc ca lp Object c biu din bn di: Phng thc Mc ch

equals(Object) So snh i tng hin ti vi i tng khc. finalize() Phng thc cui cng. Thng thng b nh ngha lp con. Thng bo cho Thread (lung) m hin thi trong trng thi ang ch. Thng bo tt c cc Thread (lung) hin hnh trong trng thi ch. Tr v mt chui i din cho i tng. a Thread (lung) vo trng thi ch.

notify()

notifyAll()

toString() wait()

Gi java.util
Gi Java.util cung cp mt s lp tin ch Java, thng xuyn trong tt c cc loi chng trnh ng dng. N bao gm mt s lp sau: 1. 2. 3. 4. Hashtable Random Vector StringTokenizer

Lp Hashtable (bng bm) Lp Hashtable m rng lp tru tng Dictionary, lp ny cng c nh ngha trong gi java.util. Hashtable c s dng nh x kho (key) n gi tr (value). V d, n c th c s dng nh x cc tn n tui, nhng ngi lp trnh n nhng d n, chc danh cng vic n lng, v c nh vy. Hashtable m rng kch thc khi cc phn t c thm vo. Khi mt Hashtable mi, bn c th ch nh dung lng ban u v yu t np (load factor). iu ny s lm cho hashtabletng kch thc ln, bt c lc no vic thm vo mt phn t mi lm vt qua gii hn hin hnh ca Hashtable. Gii hn ca Hashtable l dung lng nhn ln bi cc yu t c np.V d: mt bng bm vi

dung lng 100, v mt yu t np l 0.75 s c mt gii hn l 75 phn t. Cc phng thc xy dng cho bng bm c biu din trong bng sau: Constructor Hashtable(int) Purpose Xy dng mt bng mi vi dung lng ban u c ch nh.

Hashtable(int, float) Xy dng mt lp mi vi dung lng ban u c ch nh v yu t np. Hashtable() Xy dng mt lp mi bng cch s dng gi tr mc nh cho dung lng ban u v yu t np.

Hashtable hash1 = new Hashtable(500,0.80); Trong trng hp ny, Bng bm hash1 s lu tr 500 phn t. Khi bng bm lu tr va y 80% (mt yu t np vo ca 0.80), kch thc ti a ca n s c tng ln. Mi phn t trong mt hashtable bao gm mt kho v mt gi tr. Cc phn t c thm vo bng bm bng cch s dng phng thc put(), v c truy lc bng cch s dng phng thc get(). Cc phn t c th c xo t mt bng bm vi phng thc remove(). Cc phng thc contains() v containsKey() c th c s dng tra cu mt gi tr hoc mt kho trong bng bm. Mt vi phng thc ca Hashtable c tm tt trong bng sau: Phng thc clear() clone() contains(Object) Mc ch Xo tt c cc phn t t bng bm. To mt bn sao ca Hashtable. Tr v True nu bng bm cha cc i tng c ch nh.

containsKey(Object) Tr v True nu bng bm cha kho c ch nh. elements() get(Object key) Tr v mt tp hp phn t ca bng bm. Tr v i tng c kho c ch nh.

Lp Random: Lp ny l mt b to s gi ngu nhin (pseudo-random). C hai phng thc xy dng c nh ngha. Mt trong nhng phng thc xy dng ny ly gi tr khi u (seed) nh mt tham s. Phng thc xy dng khc khng c tham s, v s dng thi gian hin ti nh mt gi tr khi u. Vic xy dng mt b to s ngu nhin vi mt gi tr khi u l mt tng hay, tr khi bn mun b to s ngu nhin lun to ra mt tp cc gi tr ging nhau. Mt khc, thnh thong n rt hu ch to ra trnh t ging nhau ca cc s random. iu ny c ngha trong vic g ri chng trnh. Mt khi b to s ngu nhin c to ra, bn c th s dng bt k cc phng thc sau y cp mt gi tr t n:

nextDouble() nextFloat() nextGaussian() nextInt() nextLong()

Cc phng thc xy dng v cc phng thc ca lp Random c tm tt trong bng sau:

Phng thc Mc ch random() random(long) to ra mt b to s ngu nhin mi To ra mt b to s ngu nhin mi da trn

gi tr khi to c ch nh. nextDouble() Tr v mt gi tr kiu double k tip gia 0.0 n 1.0 t b to s ngu nhin. Tr v mt gi tr kiu float k tip gia 0.0F v 1.0F t b to s ngu nhin.

nextFloat()

nextGaussian() Tr v gi tr kiu double c phn phi Gaussian k tip t b to s ngu nhin. To ra cc gi tr Gaussian s c mt gi tr trung bnh ca 0, v mt lch tiu chun ca 1.0. nextInt() Tr v gi tr kiu Integer k tip t mt b to s ngu nhin. Tr v gi tr kiu long k tip t mt b to s ngu nhin. Thit lp gi tr khi to t b to s ngu nhin.

nextLong()

setSeed(long)

Lp Vector: Mt trong cc vn vi mt mng l chng ta phi bit n ln nh th no khi chng ta to n. Trong thc t c nhiu trng hp khng th xc nh kch thc ca mng trc khi to n. Lp Vector ca Java gii quyt vn ny. N cung cp mt dng mng vi kch thc ban u, mng ny c th tng thm khi nhiu phn t c thm vo. Mt lp Vector lu tr cc mc l kiu Object, n c th dng lu tr cc th hin ca bt k lp Java no. Mt lp Vector c th lu tr cc phn t khc nhau, cc phn t khc nhau ny l th hin ca cc lp khc nhau. Ti bt k thi im, mt lp Vector c dung lng lu tr mt s lng no cc phn t. Khi mt lp Vector dng ht dung lng ca n, th dung lng ca n c gia tng bi mt s lng

ring cho Vector . Lp Vector cung cp ba phng thc xy dng khc nhau m c th chng ta ch nh dung lng khi to, v tng s lng ca mt Vector, khi n c to ra. Cc phng thc xy dng ny c tm tt trong bng sau: Phng thc xy dng Mc ch Vector(int) To ra mt lp Vector mi vi dung lng ban u c ch nh. To ra mt lp Vector mi vi dung lng ban u c ch nh, v lng tng. To ra mt lp Vector mi vi dung lng khi to mc nh, v lng tng mc nh.

Vector(int, int)

Vector()

Mt phn c thm vo mt lp Vector bng cch s dng phng thc addElement(). Tng t, mt phn t c th c thay th bng cch s dng phng thc setElementAt(). Mt lp Vector c th tm kim bng cch s dng phng thc contains(), phng thc ny n gin ch tm s xut hin ca mt i tng trong Vector. Phng thc elements() tr v mt tp hp cc i tng c lu tr trong lp Vector. Cc phng thc ny v cc phng thc thnh vin khc ca lp Vector c tm tt trong bng di y: Phng thc addElement(Object) Mc ch Thm phn t c ch nh vo lp Vector. Tr v dung lng hin thi ca lp Vector. sao chp lp vector, nhng khng phi l

capacity()

clone()

cc phn t ca n. contains(Object) Tr v True nu lp Vector cha i tng c ch nh. Sao chp cc phn t ca lp Vector vo mng c ch nh. Ly phn t v tr c ch nh. Tr v mt bng lit k ca cc phn t trong lp Vector. m bo rng lp Vector c th lu tr t nht dung lng ti thiu c ch nh. Tr v phn t u tin trong lp Vector. Tm kim lp Vector, v tr v ch mc u tin tm thy i tng. Tm kim lp Vector bt u t v tr ch nh, tr v v tr u tin tm thy. Chn i tng c ch nh ti v tr c ch nh. Tr v True nu lp Vector khng c phn t. Tr v phn t cui cng trong lp Vector. Tm kim lp Vector, v tr v ch mc

copyInto(Object [])

elementAt(int) elements()

ensureCapacity(int)

firstElement() indexOf(Object)

indexOf(Object, int)

insertElementAt(Object, int) isEmpty()

lastElement()

lastIndexOf(Object)

ca i tng tm thy cui cng. lastIndexOf(Object, int) Tm kim lp Vector bt u ti s ch mc c ch nh, v tr v ch mc ca phn t cui cng tm thy. Xo tt c cc phn t t lp Vector. Xo i tng c ch nh t lp Vector. Xo i tng ti ch mc c ch nh. Thay th i tng ti ch mc c ch nh vi i tng c ch nh. Thit lp kch thc ca lp Vector thnh kch thc mi c ch nh. Tr v s ca cc phn t hin thi trong lp Vector. Tr v mt chui cha ni dung ca lp Vector. nh li kch thc ca lp Vector di chuyn dung lng tha trong n.

removeAllElements() removeElement(Object)

removeElementAt(int) setElementAt(Object, int)

setSize(int)

Size()

toString()

trimToSize()

Lp StringTokenizer Mt lp StringTokenizer c th s dng tch mt chui thnh cc phn t (token) nh hn. V d, mi t trong mt cu c th coi nh l mt token. Tuy nhin, lp StringTokenizer i xa hn vic phn tch cc t trong cu. tch ra cc thnh token ta c th tu bin ch ra mt tp du phn cch cc token khi khi to i

tng StringTokenizer. Nu ta khng ch ra tp du phn cch th mc nh l du trng (space, tab, ). Ta cng c th s dng tp cc ton t ton hc (+, *, /, v -) trong khi phn tch mt biu thc. Bng sau tm tt 3 phng thc xy dng ca lp StringTokenizer: Phng thc xy dng StringTokenizer(String) ngha To ra mt i tng StringTokenizer mi da trn chui c ch nh.

StringTokenizer(String, Strng) To ra mt i tng StringTokenizer mi da trn (String, String) chui c ch nh v mt tp cc du phn cch. StringTokenizer(String, String, To ra mt i tng boolean) StringTokenizer da trn chui c ch nh, mt tp cc du phn cch, v mt c hiu cho bit nu cc du phn cch s c tr v nh cc token hay khng.

Lp StringTokenizer ci t giao din Enumeration. V th, n bao gm cc phng thc hasMoreElements() v nextElement(). Cc phng thc c th s dng ca lp StringTokenizer c tm tt trong bng sau: Phng thc countTokens() hasMoreElements() Mc ch Tr v s cc token cn li. Tr v True nu cn c token ang c nh du trong chui. N th ging ht nh hasMoreTokens.

hasMoreTokens()

Tr v True nu cn c token ang c nh du trong chui. N ging ht nh hasMoreElements. Tr v token k tip trong chui. N th ging nh nextToken. Tr v Token k tip trong chui. N th ging nh nextElement. Thay i b du phn cch bng chui c ch nh, v sau tr v token k tip trong chui.

nextElement()

nextToken()

nextToken(String)

Hai phn va qua d tm tt mt s lp hay dng. Chng ta s bt u bn v giao din trong phn ti. Chc bn mt ngy vui v.

Gii thiu v AWT


R rng khi bt tay vo lp trnh, bn khng mun chng trnh ca mnh c giao din kiu nh Hello World. Ai cng mun giao din ha, p mt. Ni ngn gn l Giao din ngi dng ha (Graphical User Interface - GUI). GUI cung cp chc nng nhp liu theo cch thn thin vi ngi dng. GUI a dng t ng dng n ng dng v c th cha nhiu iu khin nh hp vn bn, nh, hp danh sch hay cc iu khin khc. Cc ngn ng lp trnh khc nhau cung cp nhiu cch khc nhau to GUI. Cc ngn ng nh VB hay VC++ c th cung cp chc nng ko v th trong khi phn mm ging nh C++ yu cu ngi lp trnh phi vit ton b m xy

dng GUI. Mt phn t (element) GUI c thit lp bng cch s dng th tc sau:

To i tng Xc nh s xut hin ban u ca i tng Ch ra n nm u Thm phn t vo giao din trn mn hnh

Mt thnh phn (component) GUI l mt i tng trc quan. Ngi dng tng tc vi i tng ny thng qua con tr chut hay bn phm. Cc thnh phn nh l button, label v.v c th c nhn thy trn mn hnh. Bt k ci g chung cho tt c cc thnh phn GUI u c tm thy trong lp Component. to cc i tng GUI chng ta cn nhp gi java.awt. AWT l vit tt ca Abstract Windowing Toolkit. AWT l mt b cc lp trong Java cho php chng ta to GUI v chp nhn cc nhp liu ca ngi dng thng qua bn phm v chut. AWT cung cp cc thnh phn khc nhau to GUI hiu qu v li cun ngi s dng. Cc thnh phn ny ny c th l:

Vt cha (Container) Thnh phn (Component) Trnh qun l cch trnh by (Layout manager) ha (Graphic) v cc tnh nng v (draw) Phng ch (Font) S kin (Event)

i khi nu bn mun to mt giao din p th bn phi c mt Container. Trn Container bn t cc Component nh Label, Button, TextField...Bn dng Layout manager qun l

cch t cc Component, dng Event qun l s kin. Ngoi ra bn dngGraphics, Font... cho chng trnh c p mt. Bi thc hnh Guess gip bn c mt ci nhn ton cnh vn ny. Container ----> Applet Component -----> TextField Event -----> ActionListener Font ----> SetFont Nhc li l v d v Guess ch chng ta c ci nhn ton cnh m thi. Chng ta s ln lt bn v cc thnh phn trn trc khi lm bi thc hnh.

Container - Frame
Trong cc bi thc hnh, a s chng ta s dng Applet. Applet l mt Container v l subclass ca lp Panel m Panel li l subclass ca Container. i khi Container l ni m bn c th t cc thnh phn giao din ca bn nh button, label, TextField vo. Gi java.awt cha mt lp gi l Container. Lp ny trc tip hay gin tip pht sinh ra hai vt cha c s dng ph bin nht l Frame v Panel. Frame l ca s c lp nhng ngc li Panel l vng nm trong ca s khc. Frame: Frame khng ph thuc vo applet v trnh duyt. Frame c th hot ng nh mt vt cha hay nh mt thnh phn (component). Bn c th s dng mt trong nhng constructor sau to mt frame: 1. 2. Frame(): To mt frame nhng khng hin th Frame(String title): To mt frame khng hin th, c

(invisible) tiu . y l mt Frame mu .

Tuy nhin bn khoan chy th. Nu bn t m chy th th bn s khng ng c Frame li bng cch click vo [x] nh thng thng. Bn cn click vo nut vung mu nh hnh di.

Framedemo l mt subclass ca lp Frame. Lp FrameDemo ny c mt phng thc khi to (Constructor):public FrameDemo(String title). Thc cht n cng tng t cu lnh: Frame f = new Frame("I have been Frameed!!!"); th, bn hy thay i code nh sau: import java.awt.Frame; class FrameDemo extends Frame { public static void main(String args[]) { Frame f = new Frame("I have been Frameed!!!"); f.setSize(300,200); f.setVisible(true); } } Save li v chy th bn s thy kt qu ging nh c. Trong phng thc khi to ny ta cho gi phng thc super(). N s gi phng thc khi to ca lp cha (trong trng hp ny l

Frame). N s to mt i tng ca lp con, lp con ny s to Frame. Tuy nhin, Frame vn khng nhn thy c v khng c kch thc. lm c iu ny, ta s dng hai phng thc nm trong phng thc main: setSize() v setVisible(). Ni tm li: to Frame, bn cn: 1. 2. 3. To mt sublass t lp Frame. Sau dng Constructor to object Mun Frame thy c, ta phi dng setSize() v

setVisible(). Phn sau chng ta s tm hiu Panel.

Container - Panel
Panel c s dng nhm mt s cc thnh phn li vi nhau. Cch n gin nht to mt panel l s dng phng thc khi to ca n, hm Panel(). y l v d to Panel. Tuy nhin nu bn ch dng hm Panel() kiu nh Panel p = new Panel(), bn s khng thy Panel bng cch Save v chy th c.L do l v Panel khng c ng vin. Bn phi t Panel ln mt ci g c ng vin dng nh ca s. Trong chng trnh trn, ta cn to mt frame mi v thm Panel mi c to ny vo . Tuy nhin, cng nh phn trc, frame s khng nhn thy c, v khng c kch thc. Chng ta s dng hai phng thc trong phng thc main setSize() v setVisible() thit lp kch thc v hin th frame. Phn sau chng ta s tm hiu v Dialog.

Container - Dialog
Lp 'Dialog' tng t nh lp Frame, ngha l Dialog l lp con ca lp Window. i tng dialog c to nh sau: Frame myframe=new Frame("My frame"); // calling frame String title = "Title"; boolean modal = true; // whether modal or not Dialog dlg=new Dialog(myframe, title, modal); Tham s 'modal' ch ra rng dialog s ngn chn bt k tng tc no xy n vi cc ca s c m khc, trong khi dialog ang

c hin th trn mn hnh. Kiu hp thoi ny ngn chn ngi dng tng tc vi cc ca s khc (ca cng ng dng) trn mn hnh, cho ti khi dialog c ng li. Tm li chng ta tho lun 3 loi Container 1. 2. 3. Frame: Cng vin, dng ca s. Mun thy phi Panel: Khng c ng vin nn phi t vo Frame. Dialog: Ging Frame. Ch yu dng thng bo.

dng setVisible()

Phn sau chng ta s bn ti mt vi Component trc khi t chng vo cc Container ngm ngha.

Component
Cc Component gm nhiu loi, hnh di y s gip chng ta c mt ci nhn bao qut nht v Component

Cch tt nht theo chng ti l c th trc, sau chng ta s bn ti tng Component.

Nhng vic u tin ca chng ta cn gii quyt trc khi t cc Component vo Container l vic ng Frame. Sau ny khi qua phn Swing bn s c cch khc cch chng ta s bn y. Tuy nhin d lAWT hay Swing th bn phi lun nh vn ny. Vi AWT, bn c hai cch vit, hon ton c chc nng nh nhau. Cch 1 Cch ny ch bn hiu m thi. Trc ht ta thy vic click vo [x] ng mt ca s l mt s kin (Event) v vy ta cn import java.awt.event.*; Tip theo, vi AWT, chng ta c interface java.awt.event.WindowListener. y l interface dng "lng nghe" nhng s kin xy ra trn nhng AWT Component. Vy x dng th chng ta s implements interface ny. Bn vo y tham kho java.awt.event.WindowListener. Nh bn thy, trong interface ny c tng cng 7 method, d c x dng hay khng vic u tin l chng ta phi nh ngha tt c 7 method . Tm thi code ca chng ta s th ny: import java.awt.Frame; import java.awt.event.*; class FrameDemo extends Frame implements WindowListener { public FrameDemo(String title) { super(title); } public void windowActivated(WindowEvent e){} public void windowClosed(WindowEvent e){} public void windowClosing(WindowEvent e){} public void windowDeactivated(WindowEvent e){} public void windowDeiconified(WindowEvent e){} public void windowIconified(WindowEvent e){} public void windowOpened(WindowEvent e){} public static void main(String args[]) {

FrameDemo f=new FrameDemo("I have been Frameed!!!"); f.setSize(300,200); f.setVisible(true); } } By gi l lc chng ta phi x l s kin click vo [x] ng mt ca s. V Method m chng ta s "ch bin" chnh l public void windowClosing(WindowEvent e). Nhng trc ht bn phi gn my "nghe ln" vo bng lnh: addWindowListener(this); Sau th mc sc "thm mm thm mui". Tm thi th my nghe ln c hot ng khng bn thm lnh System.out.println("Hello"); vo ri chy th: import java.awt.Frame; import java.awt.event.*; class FrameDemo extends Frame implements WindowListener { public FrameDemo(String title) { super(title); addWindowListener(this); } public void windowActivated(WindowEvent e){} public void windowClosed(WindowEvent e){} public void windowClosing(WindowEvent e){ System.out.println("Hello"); } public void windowDeactivated(WindowEvent e){} public void windowDeiconified(WindowEvent e){} public void windowIconified(WindowEvent e){} public void windowOpened(WindowEvent e){} public static void main(String args[]) { FrameDemo f=new FrameDemo("I have been Frameed!!!"); f.setSize(300,200); f.setVisible(true);

} } Nu mi ln bn click vo [x] v thy ch Hello th coi nh n ri. Hyng Frame li bng cch click vo vung mu . By gi bn ch vic thay System.out.println("Hello") bng lnh System.exit(0) l xong. Lu trong lnh exit l s 0 ch khng phi ch O. V sao li l s 0? C l bn th Google cm t "exit codes" xem. i khi l " hon tt vic thot khi chng trnh!" import java.awt.Frame; import java.awt.event.*; class FrameDemo extends Frame implements WindowListener { public FrameDemo(String title) { super(title); addWindowListener(this); } public void windowActivated(WindowEvent e){} public void windowClosed(WindowEvent e){} public void windowClosing(WindowEvent e){ System.exit(0); } public void windowDeactivated(WindowEvent e){} public void windowDeiconified(WindowEvent e){} public void windowIconified(WindowEvent e){} public void windowOpened(WindowEvent e){} public static void main(String args[]) { FrameDemo f=new FrameDemo("I have been Frameed!!!"); f.setSize(300,200); f.setVisible(true); } } Gi y bn c th ng Frame li c ri!

Cch 2 Chng ti mun bn da trn phn tch ca cch 1 tm hiu v cch 2. y l code, vi b khung ca Frame, bn ch thm vi dng m thi: import java.awt.Frame; import java.awt.event.*; class FrameDemo extends Frame { public FrameDemo(String title) { super(title); } public static void main(String args[]) { FrameDemo f=new FrameDemo("I have been Frameed!!!"); f.setSize(300,200); f.setVisible(true); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent we){ System.exit(0); } }); } } Chng ta tm dng y. Phn sau chng ta s tip tc vi cc Component

Component phn 2
Gi y chng ta c Frame c th ng li c v sn sng chng ta "th vo" vi component th nghim. Hy dng Frame m chng ta to trong bi trc. Bn hy setSize(600,600) cho d nhn.a s cc component c to bng lnh new v "th vo" Container bng lnh add() Trc ht l chng ta thm mt Label

import java.awt.*; import java.awt.event.*; class FrameDemo extends Frame { Label label1=new Label("This is just a label"); public FrameDemo(String title) { super(title); add(label1); } public static void main(String args[]) { FrameDemo f=new FrameDemo("I have been Frameed!!!"); f.setSize(600,600); f.setVisible(true); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent we){ System.exit(0); } }); } } Tip theo l mt TextField ging nh bn lm trong chng trnh Guess. import java.awt.*; import java.awt.event.*; class FrameDemo extends Frame { Label label1=new Label("This is just a label"); TextField tf1=new TextField(30);public FrameDemo(String title) { super(title); add(label1);

add(tf1); } public static void main(String args[]) { FrameDemo f=new FrameDemo("I have been Frameed!!!"); f.setSize(600,600); f.setVisible(true); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent we){ System.exit(0); } }); } } Hy chy th. Bn s khng thy g, k c Label mi add trc! Tht ra nu bn th nhp vi dng vn bn vo khong trng, bn s thy tng t nh sau:

L do l TextField "phnh to" ra v chon ht c Label trc. Bn hy sa li code: import java.awt.*; import java.awt.event.*;

class FrameDemo extends Frame { Label label1=new Label("This is just a label"); TextField tf1=new TextField(30); public FrameDemo(String title) { super(title); add(label1); setLayout(new FlowLayout()); add(tf1); } public static void main(String args[]) { FrameDemo f=new FrameDemo("I have been Frameed!!!"); f.setSize(600,600); f.setVisible(true); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent we){ System.exit(0); } }); } } Mi vic s li bnh thng. Chng ta s bn v Layout sau.Tm thi hiu, bn th tro i th t add ca Label - TextField v khng dng setLayout nh code bn di: import java.awt.*; import java.awt.event.*; class FrameDemo extends Frame { Label label1=new Label("This is just a label"); TextField tf1=new TextField(30); public FrameDemo(String title) { super(title);

add(tf1); add(label1);

} public static void main(String args[]) { FrameDemo f=new FrameDemo("I have been Frameed!!!"); f.setSize(600,600); f.setVisible(true); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent we){ System.exit(0); } }); } } Bn s thy l lc ny ta li ch thy Label m khng thy TextField. Lc ny TextField chon ton b Frame. i khi th ny: 1. 2. 3. 4. C nhiu cch trnh by (Layout) trong Java. Mi loi Container c Layout mc nh ring. Layout mc nh ca Frame l BorderLayout. Theo BorderLayout, nu bn khng qui nh r th

component no bn add sau cng s chim v tr trung tm ca Container v c kch c chon ton b Container cha n. 5. Cn FlowLayout m bn dng trn th cc component s gi kch c mc nh ringca chng v sp xp theo th t m bn add vo t tri sang phi, t trn xung di. Trc khi kt thc phn ny, bn th thay i th t add Label v TextField xem. Chng ta s tip tc phn sau.

Component phn 3

Chng ta tip tc thm mt s Component vo Frame. Chng ta s thm mt TextArea vo Frame. i khi l mt TextField "b hn"! Bn thay i nh sau: import java.awt.*; import java.awt.event.*; class FrameDemo extends Frame { Label label1=new Label("This is just a label"); TextField tf1=new TextField(30); TextArea ta1=new TextArea(); public FrameDemo(String title) { super(title); setLayout(new FlowLayout()); add(label1); add(tf1); add(ta1); } public static void main(String args[]) { FrameDemo f=new FrameDemo("I have been Frameed!!!"); f.setSize(600,600); f.setVisible(true); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent we){ System.exit(0); } }); } } Tip tc bn thm mt Button: import java.awt.*; import java.awt.event.*; class FrameDemo extends Frame {

Label label1=new Label("This is just a label"); TextField tf1=new TextField(30); TextArea ta1=new TextArea(); Button b1 = new Button("My Button"); public FrameDemo(String title) { super(title); setLayout(new FlowLayout()); add(label1); add(tf1); add(ta1); add(b1); } public static void main(String args[]) { FrameDemo f=new FrameDemo("I have been Frameed!!!"); f.setSize(600,600); f.setVisible(true); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent we){ System.exit(0); } }); } } ng bn khon v cch xp ln xn ca chng ta, phn sau khi bn v Layout chng ta s bit cch sp xp sao cho p mt. Tip tc vi CheckBox v RadioButton: import java.awt.*; import java.awt.event.*; class FrameDemo extends Frame { Label label1=new Label("This is just a label"); TextField tf1=new TextField(30); TextArea ta1=new TextArea(); Button b1 = new Button("My Button"); Checkbox c1=new Checkbox("CheckBox",true);

CheckboxGroup cb=new CheckboxGroup(); Checkbox c2=new Checkbox("Radio 1",cb,true); Checkbox c3=new Checkbox("Radio 2",cb,false); Checkbox c4=new Checkbox("Radio 3",cb,false);

public FrameDemo(String title) { super(title); setLayout(new FlowLayout()); add(label1); add(tf1); add(ta1); add(b1); add(c1); add(c2); add(c3); add(c4); } public static void main(String args[]) { FrameDemo f=new FrameDemo("I have been Frameed!!!"); f.setSize(600,600); f.setVisible(true); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent we){ System.exit(0); } }); } } Chng ta s phn tch sau, nhng tht s cng khng c g qu phc tp. Cui cng ta thm mt Choice List: import java.awt.*; import java.awt.event.*; class FrameDemo extends Frame {

Label label1=new Label("This is just a label"); TextField tf1=new TextField(30); TextArea ta1=new TextArea(); Button b1 = new Button("My Button"); Checkbox c1=new Checkbox("CheckBox",true); CheckboxGroup cb=new CheckboxGroup(); Checkbox c2=new Checkbox("Radio 1",cb,true); Checkbox c3=new Checkbox("Radio 2",cb,false); Checkbox c4=new Checkbox("Radio 3",cb,false); Choice ch =new Choice();

public FrameDemo(String title) { super(title); setLayout(new FlowLayout()); add(label1); add(tf1); add(ta1); add(b1); add(c1); add(c2); add(c3); add(c4); ch.addItem("White"); ch.addItem("Red"); ch.addItem("Orange"); ch.addItem("Green"); add(ch); } public static void main(String args[]) { FrameDemo f=new FrameDemo("I have been Frameed!!!"); f.setSize(600,600); f.setVisible(true); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent we){ System.exit(0); } });

} }

Vy l chng ta thm kha kh cc Component vo Frame. Hu ht cc chng trnh bn ch cn thm 2 vic: 1. 2. Sp xp cho p X l cc s kin

Chng ti mun ngh bn nh v t vit li code ny vi ln. Nu bn thnh tho, m bo cc phn sau bn s tip thu rt nhanh. Xin nhc li:

Bn nn to mt b khung ca chng trnh trc Ch no cn return th c cho i mt gi tr tm thi, v d kiu int th cho return 1 hay return 2 g ; kiu String th cho return "Hello" chng hn. Nhng g lin quan n x l s kin th nn th trc bng lnh System.out.println("") Nn thnh tho vic thm bt cc Component vo mt Container

Bn tham kho mt s code v d Label TextField TextArea Button CheckBox v RadioButton Choice List

Label
Lp ny c s dng trnh by mt String. N khng th c sa i. y l mt chui ch c. S dng mt trong nhng constructor sau y to mt label:

Label()

To mt Label trng.

Label(String labeltext)

To mt Label vi ni dung c cho.

Label(String labeltext, int alignment)

To mt Label vi mt ch canh l (alignment) , canh l c th l Label.LEFT, Label.RIGHT hay Label.CENTER.

Cc phng thc c s dng ph bin ca label c trnh by bng bn di: Phng thc Chc nng

setFont(Font f) setText(String s) getText()

Thay i phng ch ca Label Thit lp nhn cho Label Ly ni dung hin ti ca nhn

TextField
Mt Textfield l mt vng ch cha mt dng vn bn, trong vn bn c th c hin th hay c nhp vo bi ngi dng. Trong Java, mt trong nhng constructor sau c th c s dng to mt Textfield:

TextField(): To mt textfield mi. TextField(int columns): To mt textfield mi vi s ct c cho trc. TextField(String s): To mt textfield mi vi chui vn bn c cho trc. TextField(String s, int columns): To mt textfield mi vi ni dung v s ct c cho trc.

Cc phng thc thng c s dng ca i tng TextField c tm tt trong bng sau:

Phng thc setEchoChar(char) setText(String s) getText() setEditable(boolean) isEditable()

Chc nng t cc k t c hin ra thay th k t nhp vo. Gn ni dung cho TextField. Ly ni dung ca TextField.

Xc nh TextField c son tho c hay khng. N tr tham s truyn vo l True.

Xc nh xem trng c ang trong mode son tho kiu Boolean.

TextArea

Mt Textarea c s dng khi vn bn nhp vo c trn hai hay nhiu dng. Texta TextArea l mt trng vn bn c th c son tho vi nhiu dng. to mt Textarea, lm theo cc bc sau:

1. 2. 3.

To mt i tng. Ch ra s dng, s ct i tng ny cn c. B tr phn t ny trn mn hnh.

Trong Java, bn c th s dng cc constructor sau to TextArea:

TextArea(): To mt TextArea mi. TextArea(int rows, int cols): To mt TextArea mi vi s lng ct v TextArea(String text): To mt TextArea mi vcnoij dung c cho TextArea(String text, int rows, int cols): To mt TextArea mi vi cho trc.

Cc phng thc thng c s dng nhiu nht ca TextArea: Phng thc setText(String) getText() setEdiable(boolean) Chc nng Gn ni dung cho TextArea. Tr v ni dung ca TextArea. Xc nh xem TextAreac th c son tho hay khng. TextArea c th c son tho khi gi tr ny l True. Xc nh xem TextArea c ang trong ch son tho c khng. Tr v gi tr l kiu Boolean.

isEdiable()

insertText(String, int) Chn chui c vo v tr c cho trc. replaceText(String, int, int) Thay th vn bn nm gia v tr int, int cho trc.

Button
Nt n hay cn gi l nt lnh l mt phn khng th thiu ca bt k GUI no. S dng button l cch d nht nhn cc tc ng ca ngi dng.

to mt button, bn lm theo cc bc sau:

1. 2. 3.

To phn t Button vi mt nhn ch ra mc ch ca B tr phn t ny trn mn hnh. Hin th phn t trn mn hnh.

Button.

S dng mt trong hai constructor sau to cc button trong Java:

Button() Button(String text)

S dng setLabel() v getLabel() thit lp v ly gi tr nhn ca button.

Checkbox v RadioButton
Checkbox c s dng khi ngi dng tin hnh chn mt hay nhiu ty chn. Ngi dng phi click trn cc checkbox chn hay b chn chng. Mt radiobutton cng tng t nh mt checkbox. N c s dng nh mt option button xc nh cc

chn la. Bn ch c th chn mt option trong nhm cc nt radiobutton, ngc li bn c th chn nhiu hn mt checkbox ti mt thi im.

Lm theo cc bc sau to cc checkbox hay radiobutton:

1. 2. 3. 4.

To phn t. Xc nh trng thi khi u ca phn t (chn hay B tr cc phn t trn mn hnh. Hin th cc phn t trn mn hnh.

khng chn).

Thnh phn checkbox c th s dng mt lp ph c gi l CheckboxGroup to ra cc radiobutton.

S dng cc constructor sau to cc checkbox trong Java:

Checkbox(): To mt checkbox trng. Checkbox(String text): To mt checkbox vi nhn c cho.

to cc radiobutton, u tin chng ta to i tng CheckboxGroup nh sau:

CheckboxGroup cg=new CheckboxGroup();

Sau chng ta to cc i tng, nhw sau:

Checkbox male=new Checkbox("male", cg, true); Checkbox female=new Checkbox("female", cg, false);

Chng ta s dng cc phng thc setState() v getState() thit lp v nhn v trng thi ca checkbox.

Choice List
Thnh thong, rt cn thit trnh by mt danh sch cc chn la n ngi dng trn mt GUI. Ngi dng c th click vo mt hay nhiu mc t danh sch. Mt danh sch chn la c to bng cch s dng mt s cc chui (String) hay cc gi tr vn bn.

to cc danh sch chn la, hy lm theo cc bc c cho sau y:

1. To danh sch cc phn t. 2. Thm cc mc (c kiu l String) vo danh sch, mi ln ch thm c mt mc. 3. B tr danh sch trn mn hnh. 4. Hin th danh sch trn mn hnh.

Java h tr lp Choice cho php chng ta to cc danh sch cha nhiu mc. Khi danh sch va c to ra, n s rng.

Choice colors=new Choice();

Mi thi im ch thm c mt item bng cch s dng phng thc addItem nh c ch ra bn di:

colors.addItem("Red"); colors.addItem("Green");

Qun l cch trnh by (Layout manager)


Layout manager iu khin cch trnh by vt l ca cc phn t GUI nh l button, textbox, option button v.v Mt layout manager t ng b tr cc thnh phn ny trong container.

Cc kiu trnh by khc nhau:

1. 2. 3. 4. 5.

Flow layout Border layout Card layout Grid layout GridBag Layout

Layout mc nh (Default):

Applet v Panel: Flow layout Window, Frame v Dialog: Border layout

Chng ta s ln lt tm hiu tng loi Layout. Flow layout y l layout manager mc nh cho Applet v Panel. Cc thnh phn c xp xp t gc tri trn n gc phi di ca mn hnh. Khi mt s thnh phn c to, chng c xp xp theo hng, t tri sang phi-t trn xung di. Nu mt chng trnh kiu nh mt bn c th mi vic qu n gin. Bn ch vic p dng Flow Layout thi.Tuy nhin, nh bn s thy khi thc hnh, nu bn thay i kch thc Container, mi chuyn s khc. Luc ny GridLayout mi l la chn ng. V tt c cc Layout khc cng vy. C theo kiu no th ta p dng kiu thi! Kh ni thc t khng phi vy, mt chng trnh bn s phi p dng nhiu Layout manager khc nhau.y l code mt chng trnh my tnh n gin vit vi Awt v Swing, chng ta s ln lt phn tch cc chng trnh .Nh bn thy cc bn phm s, k hiu... s khin ta ngh ti mt kiu Layout sao cho thnh tng

nh bn c(GridLayout). Tuy nhin phn trn th sao? V quan trng nht tng th c Container th sao? Awt Calculator

Swing Calculator

Bn cn nm vng cc loi Layout. Nhng ci quan trng nht l p dng trong tng th. Rt t c hi bn ch p dng 1 loi Layout duy nht trong mt chng trnh. V d bn c th hnh dung nh sau: 1. 2. 3. 4. Tng th c chng trnh My tnh s dng loi Layout Tip theo hy suy ngh phn trn cng s dng loi Sau n phn th hai s dng loi Layout no? Cui cng, phn th ba s dng loi no? GridLayout c

no cho php chia lm 3 phn nh hnh di chng hn. Layout no (Cho ring phn m thi)?

c khng?

Tm li, bn c th dng 4 loi Layout khc nhau. Tuy nhin chng ta s phn tch 2 chng trnh trn sau. By gi quay li vi Flow Layout. Cc constructor ca FlowLayout: 1. 2. 3. new FlowLayout() // Mc nh (default), khong

cch gia cc component l 5 pixes. Canh theo Center new FlowLayout(int align)// Qui nh canh l (tri new FlowLayout(int align, int hgap, int vgap)// Qui phi hay center) nh canh l v khong cch theo chiu ngang, dc ca cc component. V d: FlowLayout mylayout = new FlowLayout() //Default Loi th hai bn c th vit: FlowLayout exLayout=new FlowLayout(FlowLayout.RIGHT); Hay setLayout(new FlowLayout(FlowLayout.RIGHT));

Nu vit theo gi tr int th:


1=Center 2=Right 3=Left

V d FlowLayout exLayout=new FlowLayout(2); Bn vo y tham kho code. Hy th thay i LEFT-RIGHT-CENTER. Cng nn th thay i kch thc ca Frame. Bn s hiu hn. Phn sau chng ta s bn ti BorderLayout

BorderLayout
BorderLayout l layout manager mc nh cho Window, Frame v Dialog. Layout ny xp xp ti a 5 thnh phn trong mt container. Nhng thnh phn ny c th c t cc hng North, South, East, West v Center ca container.

NORTH t nh ca container. EAST t pha bn phi ca container. SOUTH t pha di ca container. WEST t pha bn tri ca container. CENTER t gia ca container.

Nu ta khng qui nh g khi thm component vo Frame, Window v Dialog th cc component s c kch thc ti a v component sau cng s ln cc component trc ti v tr Center. Cc Constructor ca BorderLayout: 1. 2. New BorderLayout() New BorderLayout(int hgap,int vgap)

Khc FlowLayout, bn ch cn dng constructor, sau cc component s t ng thm vo theo tri-phi, trn-di.

Trong BorderLayout, sau khi setLayout, vi mi component bn phi qui nh v tr (north, east, west, south, center) V d, thm mt thnh phn vo vng North, bn s dng c php sau:

Button b1=new Button("North Button"); // khai bo thnh phn setLayout(new BorderLayout()); // thit lp layout add(b1,BorderLayout.NORTH); // thm thnh phn vo layout

Cc thnh phn vn gi nguyn v tr tng i ca chng k c khi container b thay i kch thc. Ci ny hon ton khc vi FlowLayout. Nu bn th thay i kch thc Frame trong bi trc, bn s thy cc component thay i v tr. Cc thnh phn c t trong vng North, South c dn nm ngang trong khi cc thnh phn t trong vng East v West li c dn thng ng. Cc thnh phn c t trong vng Center s c dn u vo nhng khu vc nm gia ca container.

Phn sau chng ta s bn v CardLayout Manager

CardLayout
Nh trong phn trc, chng ta c ni n vic trong 1 chng trnh chng ta thng phi p dng nhiu Layout. Cc Layout ny

kt hp vi nhau trn cng mt Container v cng xut hin mt ln. Tuy nhin, i khi chng ta c nhu cu mi ln ch mt layout xut hin. CardLayout chnh l lm vic . Layout ny khng thng dng lm, thng dng trongPanel. CardLayout ging nh mt b bi, mi qun bi (card) l mt Layout. Mi ln ch mt Layout xut hin bn trn c b bi. D hnh dung nht l trong trnh chiu bng PowerPoint. Mi ln bn ch thy mt trang PowerPoint m thi, mi trang li trnh by theo mt kiu. bn vo trang sau xem Demo ca Sun Microsystem Sun's standard demo applets Vi chng trnh my tnh chng hn, cc bn phi dng cc Panel t cc Layout khc nhau. CardLayout cng tng t, nhng mi ln ch c mt Layout xut hin. u tin, chng ta b tr tp hp cc thnh phn c yu cu trn cc panel tng ng. Mi panel s c b tr vo cc layout khc nhau. V d:

panelTwo.setLayout(new GridLayout(2,1));

Panel chnh s cha nhng panel ny. Chng ta thit lp layout ca panel chnh l Cardlayout nh sau:

CardLayout card=new CardLayout();

panelMain.setLayout(card);

Bc k tip l thm cc panel khc vo panel chnh:

panelMain.add("Red Panel", panelOne);

panelMain.add("Blue Panel", panelTwo);

Phng thc add() s dng hai tham s. Tham s u tin l mt String lm nhn ca panel v tham s th hai l tn i tng Panel.

GridLayout
GridLayout tr gip vic chia container vo trong li. Cc thnh phn c t trong cc giao ca dng v ct. Mi li nn cha t nht mt thnh phn. Mt li c s dng khi tt c cc thnh phn c cng kch thc.

GridLayout c to nh sau:

Gridlayout g1=new GridLayout(4,3);

4 l s dng v 3 l s ct. y l mt v d: import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; class Gltest extends Frame { Button btn[]; String str[]={"1", "2", "3", "4", "5", "6", "7", "8", "9"}; public Gltest(String title) { super(title); setLayout(new GridLayout(3,3)); btn=new Button[str.length];

for (int i=0; i<str.length;i++) { btn[i]=new Button(str[i]); add(btn[i]); } } public static void main(String args[]) { Gltest t=new Gltest("Grid Layout"); t.setSize(300,200); t.setVisible(true); t.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent we){ System.exit(0); } }); } }

Chng ta dng y. Phn sau chng ta s bn v GridBagLayout, mt Layout i hi bn phi tht thu hiu v p dng thnh tho v y l mt Layout phc tp v rt hiu qu nu ta p dng ng.

GridBagLayout phn 1
Tht s khng qu phc tp, tuy nhin bn cn ch cn thn. Cng nh GridLayout, b mt ca Container s gm nhiu li.

Tuy nhin cc vic t cc component vo li trong GridBagLayout khng phi th m l mi component c th t trn nhiu . GridBagLayout phi kt hp vi GridBagLayoutConstraints C hai u l Class.

i khi Class th nht ging nh mt qui nh chung, ch ra rng ta s s dng m li nhng mi component c th t trn nhiu .

Class th hai dng ch ra nhng qui nh c th cho cc component c xp t Trnh t thng thng s gm nhng bc: 1. 2. 3. 4. To mt GridBagLayout object To mt GridBagConstraints object

Thit lp GridBagLayout object nh layout manager cho container m b

Qui nh cc constraints, ni cch khc qui nh cc chi tit ngang,dc,

5. 6. 7.

Gi method setConstraints() ca lp GridBagLayout, trong method n

lcomponent bn mun thao tc v Constraints m bn qui nh trong bc Tip tc t bc s 4 cho mi component

Gi add() method ca lp Container thm component bn va qui

Lu l bt u t bc 4, bn phi thao tc vi tng component.

iu quan trng l bn phi hiu cc phng thc trong lp GridBagLayoutConstrain thc no qui nh s dng hay s ct m component chim, phng thc no qui dng no, ct no...

GridBagLayout t cc thnh phn vo v tr chnh xc. Vi layout ny, cc thnh kch thc. N tng t nh GridLayout manager, khi cc thnh phn c xp xp Tuy nhin, th t t cc thnh phn khng theo nguyn tc t tri sang phi v t GridBagLayout gb=new GridBagLayout() ContainerName.setLayout(gb); Bng sau lit k danh sch cc bin thnh vin ca lp GridBagConstraints:

Cc bin Mc ch thnh vin weightx, weighty Ch ra s phn phi ca khong trng trong GridBagLayout. Gi tr mc nh cho cc bin ny l 0.

gridwidth, Ch ra s lng cc (cell) chiu ngang v chiu dc gridheight trong vng hin th ca mt thnh phn. ipadx, ipady Ch ra lng lm thay i chiu cao v chiu rng ti thiu ca thnh phn. N s thm 2*ipadx vo chiu rng ti thiu v 2*ipady vo chiu cao ti thiu ca thnh phn. Gi tr mc nh cho c hai l 0. anchor Ch ra cch xp xp cc thnh phn trong cell. Mc nh s t vo gia cell. Cc thnh vin d liu tnh (static) sau y c th c s dng:

GridBagConstraints.NORTH GridBagConstraints.EAST

GridBagConstraints.WEST GridBagConstraints.SOUTH GridBagConstraints.NORTHEAST GridBagConstraints.SOUTHEAST

gridx, gridy Ch ra v tr cell s t thnh phn. Khi thit lp gi tr ca gridx l GridbagConstraints.RELATIVE th thnh phn c thm s nm v tr bn phi ca thnh phn cui cng. fill Ch ra cch m mt thnh phn c b tr vo cell th no nu nh cell ln hn thnh phn. Mc nh l kch thc thnh phn khng thay i.

Bng sau y cung cp mt danh sch cc bin d liu tnh l cc gi tr cho bin fil

Gi tr GridBagConstraints.NONE

M t Mc nh, khng lm thay i kch thc ca thnh phn.

GridBagConstraints.HORIZONTAL Tng chiu rng ca thnh phn theo chiu ngang (HORIZONTAL) lm cho thnh phn khp vi chiu ngang. GridBagConstraints.VERTICAL Tng chiu cao ca thnh phn theo chiu ng (VERTICAL) lm cho thnh phn khp vi chiu dc. Tng chiu rng, chiu cao ca thnh phn theo c chiu ngang v chiu dc. Xc nh khong cch top, buttom, left v right gia cc thnh phn. Mc nh l 0.

GridBagConstraints.BOTH

insets

S dng phng thc setConstraints() thit lp cc hng s cho mi thnh ph gblay.setConstraints(lb1, gbc);

gblay l i tng ca lp GridBagLayout, lbl l thnh phn Label v gbc l i t GridBagConstraints. Phn sau chng ta s bn qua mt v d hiu hn Layou ny.

GridBagLayout phn 2
C my iu cn nh: 1. 2. Bn phi ln lt qui nh v tr kch thc...cho tng Khi bn thay i chiu cao, chiu rng...ca component,

componenet. s thay i s gi nguyn cho component sau, tr khi bn reset li bng cch cho cc gi tr tr v mc nh.

Khi bn tham kho GridBagLayout v GridBagConstraints , bn s thy c rt nhiu method, tuy nhin c mt s method quan trngnht bn cn phi nh v s dng thnh tho:

fill: Ch ra cch m mt component c b tr vo cell th no nu nh cell ln hn component. Mc nh l kch thc thnh phn khng thay i. weightx: Ch ra s phn phi ca khong trng gia cc ct trong GridBagLayout. Gi tr mc nh cho cc bin ny l 0. Nu bn khng qui nh mt gi tr khc khng cho weightx, cc component s tp trung ti trung tm ca container, l do l v GridBagLayout cho tt c cc khong trng gia cc dng hay ct ra ngoi ra. weighty: Ch ra s phn phi ca khong trng gia cc hng trong GridBagLayout. Gi tr mc nh cho cc bin ny l 0. Nu bn khng qui nh mt gi tr khc khng cho weighty, cc component s tp trung ti trung tm ca

container, l do l v GridBagLayout cho tt c cc khong trng gia cc dng hay ct ra ngoi ra. gridx: Ch ra ta x ca cell pha trn-bn tri. Tc l ta ct ca component. gridy: Ch ra ta y ca cell pha trn-bn tri. Tc l ta hng ca component. gridwidth: Ch ra s lng cc ct trong vng hin th ca mt thnh phn. Tc l component chim bao nhiu ct. gridheight: Ch ra s lng cc hng trong vng hin th ca mt thnh phn. Tc l component chim bao nhiu hng.Xin lu l cc component ch c tri ra nhiu hng nu component nm pha bn tri m thi.

Component mu xanh l cy nm ti ta (0,0), component mu nu nm ti ta (2,3). Lu ch tnh cell trn cng-bn tri m thi. Component mu cam chim 3 ct v 2 hng. Tm li, bn cn xc nh component s di rng bao nhiu, nm ti v tr no.

GridBagLayout phn 3
Chng ta s lm mt v d rt n gin. Tuy nhin, nu bn nm vng, bn hon ton c th lm nhng v d khc phc tp hn. y l kt qu ca chng trnh:

Rt n gin, ch gm 4 buttons: 3 buttons xp pha trn v 1 button xp pha di. Bn vo y coi li 7 bc thao tc vi GridBagLayout. Trc ht l to Frame: import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class Gbltest2 extends Frame{ public Gbltest2(String title) { super(title); } public static void main(String args[]) { Gbltest2 t=new Gbltest2("GridBag Layout"); t.setSize(300,300); t.setVisible(true); t.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent we){ System.exit(0); } });

} } Tip theo bn theo trnh t thm cc button. u tin l khai bo bin, bn khai bo 4 bin button cng vi 1 bin GridBagLayout v 1 bin GridBagConstraints. import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class Gbltest2 extends Frame{ Button b1,b2,b3,b4; GridBagLayout gb; GridBagConstraints gbc; public Gbltest2(String title) { super(title); } public static void main(String args[]) { Gbltest2 t=new Gbltest2("GridBag Layout"); t.setSize(300,300); t.setVisible(true); t.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent we){ System.exit(0); } }); } } Tip theo l 3 buc: 1. 2. 3. To mt GridBagLayout object To mt GridBagConstraints object Thit lp GridBagLayout object nh layout manager cho

container m bn ang thao tc.

import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class Gbltest2 extends Frame{ Button b1,b2,b3,b4,b5; GridBagLayout gb; GridBagConstraints gbc; public Gbltest2(String title) { super(title); gb=new GridBagLayout();//Buoc 1 gbc=new GridBagConstraints();// Buoc 2 setLayout(gb);// Buoc 3 } public static void main(String args[]) { Gbltest2 t=new Gbltest2("GridBag Layout"); t.setSize(300,300); t.setVisible(true); t.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent we){ System.exit(0); } }); } } Vy l xong phn cn bn. Cng vic tip theo chnh l phn kh nht ca GridBagLayout. Bn phi xc nh kch thc, v tr...ca cc component. Trc ht tm thi ta add cc botton vo Frame nh mc nh import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class Gbltest2 extends Frame{

Button b1,b2,b3,b4,b5; GridBagLayout gb; GridBagConstraints gbc; public Gbltest2(String title) { super(title); gb=new GridBagLayout();//Buoc 1 gbc=new GridBagConstraints();// Buoc 2 setLayout(gb);// Buoc 3 b1=new Button("Button 1"); add(b1);//Buoc 6 b2=new Button("Button 2"); add(b2);//Buoc 6 b3=new Button("Button 3"); add(b3);//Buoc 6 b4=new Button("Button 4"); add(b4);//Buoc 6 } public static void main(String args[]) { Gbltest2 t=new Gbltest2("GridBag Layout"); t.setSize(300,300); t.setVisible(true); t.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent we){ System.exit(0); } });

} } Nu Save li v chy th bn s thy:

Cc button u bng nhau v tp trung ti trung tm ca Frame v weightx v weighty u ang c gi tr mc nh l 0. Tip theo chng ta thy

Ba button u tin c cc ta ln lt l (0,0)-(1,0)(2,0), ta cn thay i gi trgridx v gridy cho ph hp. Mi button ch chim 1 cell nn khng cn thay i gridwidth v gridheight.

y l code import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class Gbltest2 extends Frame{ Button b1,b2,b3,b4,b5; GridBagLayout gb; GridBagConstraints gbc; public Gbltest2(String title) { super(title);

gb=new GridBagLayout();//Buoc 1 gbc=new GridBagConstraints();// Buoc 2 setLayout(gb);// Buoc 3 b1=new Button("Button 1"); gbc.gridx =0;//Buoc 4 gbc.gridy =0;//Buoc 4 add(b1);//Buoc 6 b2=new Button("Button 2"); gbc.gridx =1;//Buoc 4 gbc.gridy =0;//Buoc 4 add(b2);//Buoc 6 b3=new Button("Button 3"); gbc.gridx =2;//Buoc 4 gbc.gridy =0;//Buoc 4 add(b3);//Buoc 6 b4=new Button("Button 4"); add(b4);//Buoc 6 } public static void main(String args[]) { Gbltest2 t=new Gbltest2("GridBag Layout"); t.setSize(300,300); t.setVisible(true); t.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent we){ System.exit(0); } }); } } n y nu bn chy th th mi vic s khng c g thay i. L do l theo mc nh cc button c thm vo theo ng kch thc v ta nh trn.

Chng ta mun khi thay i kch thc ca Frame theo chiu ngang v tr tng i ca cc component khng thay i, v vy chng ta s s dng fill, vGridBagConstraints.HORIZONTAL Ta cng tin hnh bc 5: Gi method setConstraints() ca lp GridBagLayout y l code: import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class Gbltest2 extends Frame{ Button b1,b2,b3,b4,b5; GridBagLayout gb; GridBagConstraints gbc; public Gbltest2(String title) { super(title); gb=new GridBagLayout();//Buoc 1 gbc=new GridBagConstraints();// Buoc 2 setLayout(gb);// Buoc 3 b1=new Button("Button 1"); gbc.fill=GridBagConstraints.HORIZONTAL;//Buoc 4 gbc.gridx =0;//Buoc 4 gbc.gridy =0;//Buoc 4 gb.setConstraints(b1, gbc);//Buoc 5 add(b1);//Buoc 6 b2=new Button("Button 2"); gbc.fill=GridBagConstraints.HORIZONTAL;//Buoc 4 gbc.gridx =1;//Buoc 4 gbc.gridy =0;//Buoc 4 gb.setConstraints(b2, gbc);//Buoc 5 add(b2);//Buoc 6 b3=new Button("Button 3"); gbc.fill=GridBagConstraints.HORIZONTAL;//Buoc 4 gbc.gridx =2;//Buoc 4 gbc.gridy =0;//Buoc 4 gb.setConstraints(b3, gbc);//Buoc 5 add(b3);//Buoc 6

b4=new Button("Button 4"); add(b4);//Buoc 6 } public static void main(String args[]) { Gbltest2 t=new Gbltest2("GridBag Layout"); t.setSize(300,300); t.setVisible(true); t.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent we){ System.exit(0); } }); } } Ti y nu bn chy th, mi chuyn vn khng c g thay i. L do l v mc d dng fill, nhng chng ta vn gi tr phn phi khong trng gia cc ct theo mc nh weightx = 0. Chng ta s cho weightx mt gi tr khc 0. import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class Gbltest2 extends Frame{ Button b1,b2,b3,b4,b5; GridBagLayout gb; GridBagConstraints gbc; public Gbltest2(String title) { super(title); gb=new GridBagLayout();//Buoc 1 gbc=new GridBagConstraints();// Buoc 2 setLayout(gb);// Buoc 3 b1=new Button("Button 1");

gbc.fill=GridBagConstraints.HORIZONTAL;//Buoc 4 gbc.weightx = 0.5;//Buoc 4 gbc.gridx =0;//Buoc 4 gbc.gridy =0;//Buoc 4 gb.setConstraints(b1, gbc);//Buoc 5 add(b1);//Buoc 6 b2=new Button("Button 2"); gbc.fill=GridBagConstraints.HORIZONTAL;//Buoc 4 gbc.gridx =1;//Buoc 4 gbc.gridy =0;//Buoc 4 gb.setConstraints(b2, gbc);//Buoc 5 add(b2);//Buoc 6 b3=new Button("Button 3"); gbc.fill=GridBagConstraints.HORIZONTAL;//Buoc 4 gbc.gridx =2;//Buoc 4 gbc.gridy =0;//Buoc 4 gb.setConstraints(b3, gbc);//Buoc 5 add(b3);//Buoc 6 b4=new Button("Button 4"); add(b4);//Buoc 6 } public static void main(String args[]) { Gbltest2 t=new Gbltest2("GridBag Layout"); t.setSize(300,300); t.setVisible(true); t.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent we){ System.exit(0); } }); } } Gi y nu bn chy th v ko hay thay i chiu ngang ca Frame, bn s thy cc button ko gin theo. Lu ta ch cn khai bo 1 ln thi, n s nh hng n cc component sau.

Hy tip tc vi button 4.

Ta ca button 4 l (0,1) Button 4 chim 3 ct trong Frame.

import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class Gbltest2 extends Frame{ Button b1,b2,b3,b4,b5; GridBagLayout gb; GridBagConstraints gbc; public Gbltest2(String title) { super(title); gb=new GridBagLayout();//Buoc 1 gbc=new GridBagConstraints();// Buoc 2 setLayout(gb);// Buoc 3 b1=new Button("Button 1"); gbc.fill=GridBagConstraints.HORIZONTAL;//Buoc 4 gbc.weightx = 0.5;//Buoc 4 gbc.gridx =0;//Buoc 4 gbc.gridy =0;//Buoc 4 gb.setConstraints(b1, gbc);//Buoc 5 add(b1);//Buoc 6 b2=new Button("Button 2"); gbc.fill=GridBagConstraints.HORIZONTAL;//Buoc 4 gbc.gridx =1;//Buoc 4 gbc.gridy =0;//Buoc 4 gb.setConstraints(b2, gbc);//Buoc 5 add(b2);//Buoc 6 b3=new Button("Button 3"); gbc.fill=GridBagConstraints.HORIZONTAL;//Buoc 4 gbc.gridx =2;//Buoc 4 gbc.gridy =0;//Buoc 4 gb.setConstraints(b3, gbc);//Buoc 5 add(b3);//Buoc 6

b4=new Button("Button 4"); gbc.fill=GridBagConstraints.HORIZONTAL;//Buoc 4 gbc.gridx =0; gbc.gridy =1; gbc.gridwidth = 3; gb.setConstraints(b4, gbc);//Buoc 5 add(b4);//Buoc 6 } public static void main(String args[]) { Gbltest2 t=new Gbltest2("GridBag Layout"); t.setSize(300,300); t.setVisible(true); t.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent we){ System.exit(0); } }); } } Nu chy th bn s thy:

Nu ko Frame theo chiu ngang, bn s thy tt c cc button s gin ra theo. Ti y chng ta ch cn phi "ko" 3 button ln v "ko" button cn li xung na l xong. L do c 4 button "tm tm" li mt ch l do weighty theo mc nh ang bng 0. Ta ch vic cho weighty mt gi tr khc 0. Tuy nhin nu chy th, bn s thy button 4 khng nm "st y". Tham kho bng di y dng cho phng thc anchor: -----------------------------------------------------------------|FIRST_LINE_START | | |LINE_START | | |LAST_LINE_START PAGE_END CENTER LINE_END | | LAST_LINE_END | PAGE_START FIRST_LINE_END| | | |

-----------------------------------------------------------------

Bn thm vo code dong sau: gbc.anchor = GridBagConstraints.PAGE_END; import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class Gbltest2 extends Frame{ Button b1,b2,b3,b4; GridBagLayout gb; GridBagConstraints gbc; public Gbltest2(String title) { super(title); gb=new GridBagLayout();//Buoc 1

gbc=new GridBagConstraints();// Buoc 2 setLayout(gb);// Buoc 3 b1=new Button("Button 1"); gbc.fill=GridBagConstraints.HORIZONTAL;//Buoc 4 gbc.weightx = 0.5;//Buoc 4 gbc.gridx =0;//Buoc 4 gbc.gridy =0;//Buoc 4 gb.setConstraints(b1, gbc);//Buoc 5 add(b1);//Buoc 6 b2=new Button("Button 2"); gbc.fill=GridBagConstraints.HORIZONTAL;//Buoc 4 gbc.gridx =1;//Buoc 4 gbc.gridy =0;//Buoc 4 gb.setConstraints(b2, gbc);//Buoc 5 add(b2);//Buoc 6 b3=new Button("Button 3"); gbc.fill=GridBagConstraints.HORIZONTAL;//Buoc 4 gbc.gridx =2;//Buoc 4 gbc.gridy =0;//Buoc 4 gb.setConstraints(b3, gbc);//Buoc 5 add(b3);//Buoc 6 b4=new Button("Button 4"); gbc.fill=GridBagConstraints.HORIZONTAL;//Buoc 4 gbc.weighty = 0.5; gbc.anchor = GridBagConstraints.PAGE_END; gbc.gridx =0; gbc.gridy =1; gbc.gridwidth = 3; gb.setConstraints(b4, gbc);//Buoc 5 add(b4);//Buoc 6 } public static void main(String args[]) { Gbltest2 t=new Gbltest2("GridBag Layout"); t.setSize(300,300);

t.setVisible(true); t.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent we){ System.exit(0); } }); } } Vy l xong, nh bn thy, mt chng trnh n gin nhng tn ca chng ta rt nhiu cng sc. Tuy nhin, bn c th gp cc cng vic ging nhau, lp i lp li nh add component chng hn vo thnh mt phng thc. Bn vo y tham kho code mt chng trnh khc.

X l cc s kin
Sau khi to ra giao din bao gm cc label, button, textfield...Chng ta lun mun ngi s dng tng tc vi chng trnh. Tng tc ca ngi dng c th l di chuyn chut, nhn phm, nh phm v.vTt c cc thao tc ny thit lp mt s kin ca mt loi no .

Cng vic tip theo ca chng ta l x l cc s kin nh di chuyn chut, nhn phm, nh phm v.v. Thng thng vi nhng chng trnh hon chnh ta cn phi vit hm x l cc s kin . Tuy nhin trong phn ny chng ta ch bn ti cc bc cn bn nht x l s kin.

Ni chung chng ta cn:

Implements ActionListener.y l interface dng lng nghe v nhn cc s kin.

public class MyApp extends Frame implements ActionListener

Gn mt my nghe trm. C th ta cn dng addActionListener() "nghe ngng" cc s kin.

Vic gn "my nghe trm" cn xc nh ai mi "ng nguy".Tc l button hay label, hay textfield...

exitbtn.addActionListener(This);

Xc nh tt c cc s kin c x l. Cc s kin c th l mt ActionEvent nu mt button c click hay mt mouseEvent nu nh chut c ko i.

Thi hnh cc phng thc ca listener v vit hm x l s kin tng ng vi cc phng thc.

Bng sau y ch ra cc s kin khc nhau v m t v chng:

Lp s kin ActionEvent

M t Pht sinh khi mt button c nhn, mt item trong danh sch chn la c nhn p (double-click) hay mt menu c chn.

AdjustmentEvent Pht sinh khi mt thanh scrollbar c s dng. ComponentEvent Pht sinh khi mt thnh phn c thay i kch thc, c di chuyn, b n hay lm cho hot ng c. FocusEvent Pht sinh khi mt thnh phn mt hay nhn focus t bn phm.

ItemEvent

Pht sinh khi mt mc menu c chn hay b chn; hay khi mt checkbox hay mt item trong danh sch c click. Pht sinh khi mt ca s c kch hot, c ng, c m hay thot. Pht sinh khi gi tr trong thnh phn textfield hay textarea b thay i. Pht sinh khi chut di chuyn, c click, c ko hay th ra. Pht sinh khi bn phm n, nh.

WindowEvent TextEvent MouseEvent KeyEvent

Cc giao din cn c ci t x l mt trong s nhng s kin ny l:

ActionListener AdjustmentListener ComponentListener FocusListener ItemListener WindowListener TextListener MouseListener MouseMotionListener KeyListener

Cc giao din nh ngha mt s phng thc x l mi s kin. Nhng phng thc ny s c np chng trong lp m ci t nhng giao din ny.

X l cc s kin phn 2
Trc ht chng ta s xt mt v d n gin. Bn coi li phn ny . V code m rng bao gm cc component . Chng ta x l vic ng Frame khi ngi s dng click vo [x]

Trong v d ca chng ta, cc component hon ton ch hin ln vy thi, cha c tc dng g. By gi chng ta s cho Button b1 thnh Exit button, khi ngi s dng click vo Frame s ng li. Bn thm code sau, nhc li khi bn implements ActionListener th bn cng thm lun method public void actionPerformed(ActionEvent ae), c , ta s x l sau: import java.awt.*; import java.awt.event.*; class FrameDemo extends Frame implements ActionListener { Label label1=new Label("This is just a label"); TextField tf1=new TextField(30); TextArea ta1=new TextArea(); Button b1 = new Button("My Button"); Checkbox c1=new Checkbox("CheckBox",true); CheckboxGroup cb=new CheckboxGroup(); Checkbox c2=new Checkbox("Radio 1",cb,true); Checkbox c3=new Checkbox("Radio 2",cb,false); Checkbox c4=new Checkbox("Radio 3",cb,false); Choice ch =new Choice(); public FrameDemo(String title) { super(title); setLayout(new FlowLayout()); add(label1); add(tf1); add(ta1); add(b1); add(c1); add(c2); add(c3); add(c4); ch.addItem("White"); ch.addItem("Red"); ch.addItem("Orange"); ch.addItem("Green"); add(ch); }

public void actionPerformed(ActionEvent ae) { } public static void main(String args[]) { FrameDemo f=new FrameDemo("I have been Frameed!!!"); f.setSize(600,600); f.setVisible(true); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent we){ System.exit(0); } }); } } Tip theo bn gn "my nghe" cho button b1: import java.awt.*; import java.awt.event.*; class FrameDemo extends Frame implements ActionListener { Label label1=new Label("This is just a label"); TextField tf1=new TextField(30); TextArea ta1=new TextArea(); Button b1 = new Button("My Button"); Checkbox c1=new Checkbox("CheckBox",true); CheckboxGroup cb=new CheckboxGroup(); Checkbox c2=new Checkbox("Radio 1",cb,true); Checkbox c3=new Checkbox("Radio 2",cb,false); Checkbox c4=new Checkbox("Radio 3",cb,false); Choice ch =new Choice(); public FrameDemo(String title) { super(title); setLayout(new FlowLayout()); add(label1); add(tf1); add(ta1); add(b1); add(c1); add(c2);

add(c3); add(c4); ch.addItem("White"); ch.addItem("Red"); ch.addItem("Orange"); ch.addItem("Green"); add(ch); b1.addActionListener(this); } public void actionPerformed(ActionEvent ae) { } public static void main(String args[]) { FrameDemo f=new FrameDemo("I have been Frameed!!!"); f.setSize(600,600); f.setVisible(true); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent we){ System.exit(0); } }); } } Cui cng chng ta s x l s kin khi ngi dng click vo b1: import java.awt.*; import java.awt.event.*; class FrameDemo extends Frame implements ActionListener { Label label1=new Label("This is just a label"); TextField tf1=new TextField(30); TextArea ta1=new TextArea(); Button b1 = new Button("My Button"); Checkbox c1=new Checkbox("CheckBox",true); CheckboxGroup cb=new CheckboxGroup(); Checkbox c2=new Checkbox("Radio 1",cb,true); Checkbox c3=new Checkbox("Radio 2",cb,false); Checkbox c4=new Checkbox("Radio 3",cb,false); Choice ch =new Choice();

public FrameDemo(String title) { super(title); setLayout(new FlowLayout()); add(label1); add(tf1); add(ta1); add(b1); add(c1); add(c2); add(c3); add(c4); ch.addItem("White"); ch.addItem("Red"); ch.addItem("Orange"); ch.addItem("Green"); add(ch); b1.addActionListener(this); } public void actionPerformed(ActionEvent ae) { if (ae.getSource()==b1) { System.exit(0); } } public static void main(String args[]) { FrameDemo f=new FrameDemo("I have been Frameed!!!"); f.setSize(600,600); f.setVisible(true); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent we){ System.exit(0); } }); } } Trong method actionPerformed(ActionEvent ae), chng ta c 1 tham s ActionEvent.

Bn vo y tham kho lp ActionEvent. Lp ny l subclass ca EventObject nn n tha k (Inherited) phng thc getSource() ca EventObject. getSource() tr v Object xy ra s kin, v d khi ngi dng click bo b1 th n s tr v b1. Thc ra hin ti b1 ca chng ta ang "mt mnh mt ch", ch duy nht "hn ta" c gn my nghe nn nu bn b truy vn IF, chng trnh vn hot ng: import java.awt.*; import java.awt.event.*; class FrameDemo extends Frame implements ActionListener { Label label1=new Label("This is just a label"); TextField tf1=new TextField(30); TextArea ta1=new TextArea(); Button b1 = new Button("My Button"); Checkbox c1=new Checkbox("CheckBox",true); CheckboxGroup cb=new CheckboxGroup(); Checkbox c2=new Checkbox("Radio 1",cb,true); Checkbox c3=new Checkbox("Radio 2",cb,false); Checkbox c4=new Checkbox("Radio 3",cb,false); Choice ch =new Choice(); public FrameDemo(String title) { super(title); setLayout(new FlowLayout()); add(label1); add(tf1); add(ta1); add(b1); add(c1); add(c2); add(c3); add(c4); ch.addItem("White"); ch.addItem("Red"); ch.addItem("Orange"); ch.addItem("Green"); add(ch); b1.addActionListener(this);

} public void actionPerformed(ActionEvent ae) { System.exit(0); } public static void main(String args[]) { FrameDemo f=new FrameDemo("I have been Frameed!!!"); f.setSize(600,600); f.setVisible(true); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent we){ System.exit(0); } }); } } Tm li x l s kin, bn cn: 1. 2. 3. implements ActionListener addActionListener() vo component cn x l. X l method actionPerformed(ActionEvent ae)

X l cc s kin phn 3
S kin bao gm rt nhiu hnh ng nh click vo mt button nh phn trc, nhn mt phm trn keyboard, ko th chut, thm hay bt mt ci g trong textfield... Khng phi ch duy nht interface ActionListener qun l tt c cc s kin. Bn cn bit interface no qun l s kin m bn mun x l. Trc ht cn mt ci nhn bao qut, y l mt phn cy phn cp:

Cn y l mt s cc "Listener" m bn c th implements x l mt s kin no .

Rt nhiu. Bn vo y tham kho. C l nhn thi thy hoa mt ri. Tuy nhin khng nn qu lo lng, trong lc ny chng ta cng ch cn quan tm ti mt s Listener m thi. Tt c bn u c th tham kho d dng.

Cc thnh phn m chng ta c th dng ActionListener:

Cc thnh phn m chng ta c th dng ItemListener:

Cc thnh phn m chng ta c th dng WindowListener:

Chng ta thm mt v d v ItemListener. Bn thm code sau vo v d trc: import java.awt.*; import java.awt.event.*; class FrameDemo extends Frame implements ActionListener, ItemListener { Label label1=new Label("This is just a label"); TextField tf1=new TextField(30); TextArea ta1=new TextArea(); Button b1 = new Button("My Button"); Checkbox c1=new Checkbox("CheckBox",true);

CheckboxGroup cb=new CheckboxGroup(); Checkbox c2=new Checkbox("Radio 1",cb,true); Checkbox c3=new Checkbox("Radio 2",cb,false); Checkbox c4=new Checkbox("Radio 3",cb,false); Choice ch =new Choice(); public FrameDemo(String title) { super(title); setLayout(new FlowLayout()); add(label1); add(tf1); add(ta1); add(b1); add(c1); add(c2); add(c3); add(c4); ch.addItem("White"); ch.addItem("Red"); ch.addItem("Orange"); ch.addItem("Green"); add(ch); b1.addActionListener(this); ch.addItemListener(this); } public void actionPerformed(ActionEvent ae) { if (ae.getSource()==b1) { System.exit(0); } } public void itemStateChanged(ItemEvent e) { if (e.getStateChange() == ItemEvent.SELECTED) { System.out.println("Choice has changed!"); } } public static void main(String args[])

{ FrameDemo f=new FrameDemo("I have been Frameed!!!"); f.setSize(600,600); f.setVisible(true); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent we){ System.exit(0); } }); } } Save li v chy th, mi khi bn thay i Choice ch, v d t White qua Red, bn s thy dng ch "Choice has changed". Bn vo y tham kho interface ItemListener. Nh bn thy, cng tng t nh ActionListener, ch c mt methoditemStateChanged(ItemEvent e) trong interface ItemListener. Trong method ny c mt tham s ItemEvent. Bn vo y tham kho lp ItemEvent. bit thnh phn no trong Choice c chn, chng ta dng method getStateChange(). Mi ci cn li cng nh v d trc.

ng dng Calculator
y l ng dng my tnh n gin.

Trc ht chng ta cn thng nht mt s vn sau: To giao din trc. Dng cc Layout Manager qun l giao din. Sau khi c giao din chng ta s x l cc s kin. Chng ta c gng chuyn mi cng vic lin quan vo cc method.

ng dng ny l mt Applet, bn c th vit mt Application tng t nu bn nm r vn .

To giao din: Bn hon ton c th dng bt c kiu Layout manager no m bn thy thch hp to giao din. Code ca chng trnh ch l gi m thi. Trc ht l nhn xt. Bn nn lm iu ny u tin cho bt c ng dng no.

1.

Trong nhng ng dng nhiu loi layout th

ny, chng ta nn chia nh giao din. Theo chng ti, vic u tin bn nn chia ton b ra lm 2 phn.
2.

Tip theo bn nn t mi phn vo mt

hng ca BorderLayout. Ci no "c v" ln hn th cho vo Center.


3.

Bn tip tc phn tch mi phn, nu n

gin v ph hp vi kiu Layout no th p dng Layout . Nu khng, bn tip tc nh bc 1. Ba bc ny c th p dng cho mi ng dng, tuy nhin ch l gi , bn c th t mnh lm mi chuyn. Quay li chng trnh my tnh. Nhn vo giao din bn s thy 4 phn khc nhau. Chng ta s dng Panel cho chng trnh ny. Nn ta s c 4 panel.

Chng ta s chia 2 Panel trn vo North v 2 Panel di vo Center trong BorderLayout ca 1 Panel khc.Tc l lc ny ta c 3 Panel.

Panel North:

Phn 1 ln hn nn bn cho vo Center, phn 2 bn cho vo South ca Panel North.

Panel Center:

Tng t, phn 3 bn cho vo North, phn 4 bn cho vo Center ca Panel Center. Vi Panel North, c hai phn 1 v 2 u n gin, bn ch vic add vo. Vi Panel Center: C hai phn 3 v 4 u c dng GridLayout nn bn c th p dng GridLayout cho phn 3 (1 dng, 3 ct) v phn 4 (4 dng, 5 ct)

Chng ta s tip tc trong phn sau.

ng dng Calculator phn 2


Trong Package AppletPro1 trc, bn hy to mt Class mi v t tn l Calculator. y l mt Applet, bn to mt code c bn cho Applet ny: import java.awt.*; import java.applet.*; public class Calculator extends Applet{ public void init() { } } Bn hon ton c th to giao din ban u trong init() method. Tuy nhin, lm vy khng chuyn nghip. Hn na sau ny s rt kh sa cha nu cn thit. Chng ta s to mt method ring to giao din. Sau trong init() chng ta ch vic gimethod ny m thi. Method to giao din: Bn thm code vo ci khung ban u, chng ta gi method to giao din l makeButtons()n s return mt Panel, v chng ta s thm Panel vo Applet trong init(): import java.awt.*; import java.applet.*; public class Calculator extends Applet{ public void init()

{ setLayout(new BorderLayout(5,5)); add("Center", makeButtons()); } private Panel makeButtons() { Panel p = new Panel(new BorderLayout(5,5)); return p; } } Lu l Layout mc nh ca Applet l FlowLayout. Chng ta phi setLayout() thnh BorderLayout, sau thm Panel vo Center ca Applet. Cng vic tip theo l bn cn c vo phn tch ca phn trc t cc Component vo Layout thch hp. Trc ht l k ra cc component cn thit.
1.

Phn1 chng ta s dng TextArea. L ni hin Phn 2 chng ta s dng Label. L ni hin th Phn 3 v 4 l cc Button.

th kt qu
2.

s chng ta nhp vo.


3.

Cc button chng ta s khai bo trong makeButtons(), iu ny khng bt buc, nhng v c nhiu buttons nn lm vy chng trnh s sng sa hn. import java.awt.*; import java.applet.*; public class Calculator extends Applet{

TextArea total = new TextArea("", 5, 25, TextArea.SCROLLBARS_VERTICAL_ONLY); Label output = new Label(); public void init() { setLayout(new BorderLayout(5,5)); add("Center", makeButtons()); } private Panel makeButtons() { Panel p = new Panel(new BorderLayout(5,5)); return p; } } Trc khi tip tc, chng ti mun bn lu mt chi tit nh. Nh phn tch trong phn trc, chng ta s thm mt panel trn c 2 panel(Mi Panel ny li c 2 Panel khc) vo Applet. Tuy nhin nu chng ta lm vy chng ta s khng thy l, ni cch khc l nhn khng p lm. V vy chng ta s thm mt Panel khc theo kiu BorderLayout lm Layout gc. Ta s t Panel ni trn vo Center ca Panel gc. chnh l Panel p m chng ta tm thi t vo makeButtons() trc . y l cc Layout cn thit. import java.awt.*; import java.applet.*; public class Calculator extends Applet{ TextArea total = new TextArea("", 5, 25, TextArea.SCROLLBARS_VERTICAL_ONLY); Label output = new Label();

public void init() { setLayout(new BorderLayout(5,5)); setBackground(Color.lightGray); add("Center", makeButtons()); } private Panel makeButtons() { Panel p = new Panel(new BorderLayout(5,5)); Panel p1 = new Panel(new BorderLayout(5,5)); Panel p2 = new Panel(new BorderLayout(5,5)); Panel p3 = new Panel(new GridLayout(1,3,5,5)); Panel p4 = new Panel(new GridLayout(4,5,5,5)); Panel p5 = new Panel(new BorderLayout(5,5)); return p; } } Ta thm method setBackground() lm ni bt l m thi. p chnh l Panel gc,"nm di cng" chng ta t cc panel khc ln. p1 l Panel nm trn p, n l ni t 2 panel hng North v Center.
1. 2.

p2 l Panel t Center p5 l Panel t North.

p3 l Panel t cc Button Backspace-CE-C, nm North ca p2. p4 l Panel t cc Button cn li, nm Center ca p2.

TextArea v Label chng ta s t trn p5. y l code: import java.awt.*; import java.applet.*; public class Calculator extends Applet{ TextArea total = new TextArea("", 5, 25, TextArea.SCROLLBARS_VERTICAL_ONLY); Label output = new Label(); public void init() { setLayout(new BorderLayout(5,5)); setBackground(Color.lightGray); add("Center", makeButtons()); } private Panel makeButtons() { Panel p = new Panel(new BorderLayout(5,5)); Panel p1 = new Panel(new BorderLayout(5,5)); Panel p2 = new Panel(new BorderLayout(5,5)); Panel p3 = new Panel(new GridLayout(1,3,5,5)); Panel p4 = new Panel(new GridLayout(4,5,5,5)); Panel p5 = new Panel(new BorderLayout(5,5)); // Add Backspace, CE, and C buttons to p3 p3.setForeground(new Color(232,0,0)); p3.setFont(new Font("Dialog", Font.PLAIN, 12)); p3.add(new Button("Backspace")); p3.add(new Button("CE")); p3.add(new Button("C")); // Add Number buttons to p4 p4.setForeground(new Color(0, 0, 235)); p4.setFont(new Font("Dialog", Font.PLAIN, 14)); p4.add(new Button("7")); p4.add(new Button("8"));

p4.add(new Button("9")); p4.add(new Button("/")); p4.add(new Button("sqrt")); p4.add(new Button("4")); p4.add(new Button("5")); p4.add(new Button("6")); p4.add(new Button("*")); p4.add(new Button("%")); p4.add(new Button("1")); p4.add(new Button("2")); p4.add(new Button("3")); p4.add(new Button("-")); p4.add(new Button("1/x")); p4.add(new Button("0")); p4.add(new Button("+/-")); p4.add(new Button(".")); p4.add(new Button("+")); p4.add(new Button("=")); // Add and initialize output and total // [Label and TextArea for output] output.setBackground(Color.white); output.setForeground(Color.black); output.setFont(new Font("Courier", Font.BOLD, 18)); total.setBackground(new Color(255, 255, 128)); total.setForeground(Color.black); total.setFont(new Font("Courier", Font.BOLD, 14)); p5.add("Center", total); p5.add("South", output); // Hook up the panels p2.add("North", p3); p2.add("Center", p4); // Add some spacing around outside p1.add("North", p5); p1.add("Center", p2); p.setFont(new Font("Helvetica", Font.PLAIN, 6)); p.add("North", new Label(" ")); p.add("East", new Label(" "));

p.add("West", new Label(" ")); p.add("South", new Label(" ")); p.add("Center", p1); return p; } } Khng c g qu kh hiu. Thc s phn kh nht l xc nh ng Layout m thi. Bn Save li v chy th. Bn s thy nh sau:

Chng ta lm xong phn giao din. Phn sau chng ta s tip tc x l s kin.

ng dng Calculator phn 3

Chng ta s x l cc s kin ca chng trnh My tnh. u tin l cc s kin n gin. Chng ta c 3 button dng cho 3 s kin n gin nht:
1.

Backspace: Dng xa tng k t mt theo

chiu t phi qua tri. V d bn nhp vo dy s 234567, bn bm Backspace ln th nht dy s s cn l 23456, bm Backspace ln th hai dy s s l 2345...
2.

CE: Vit tt ca Clear Entry, dng xa

nhng g bn nhp vo sau cng. V d bn mun tnh 88*22=? Bn s nhp ln lt 88, sau l du *, cui cng l 22. Tuy nhin ngay sau bn khng mun tnh 88*22=? m mun tnh 88*24=? chng hn, bn s bm CE, s 22 s mt, bn bm tip 24, cui cng l du =.
3.

C: Vit tt ca Clear All. Dng xa tt c.

Nh v d trn nu bn bm C ch khng phi l CE th bn s khng tnh c kt qu. Mi s kin chng ta dng mt method x l. Bn thm code nh sau: import java.awt.*; import java.applet.*; public class Calculator extends Applet{ TextArea total = new TextArea("", 5, 25, TextArea.SCROLLBARS_VERTICAL_ONLY); Label output = new Label(); public void init() { setLayout(new BorderLayout(5,5)); setBackground(Color.lightGray);

add("Center", makeButtons()); } // Handles the backspace key private void backSpace(String s) { } // Handles the 'C' [Clear All] key private void clearAll() { } // Handles the 'CE' [Clear Entry] key private void clearEntry() { } private Panel makeButtons() { Panel p = new Panel(new BorderLayout(5,5)); Panel p1 = new Panel(new BorderLayout(5,5)); Panel p2 = new Panel(new BorderLayout(5,5)); Panel p3 = new Panel(new GridLayout(1,3,5,5)); Panel p4 = new Panel(new GridLayout(4,5,5,5)); Panel p5 = new Panel(new BorderLayout(5,5)); // Add Backspace, CE, and C buttons to p3 p3.setForeground(new Color(232,0,0)); p3.setFont(new Font("Dialog", Font.PLAIN, 12)); p3.add(new Button("Backspace")); p3.add(new Button("CE")); p3.add(new Button("C")); // Add Number buttons to p4 p4.setForeground(new Color(0, 0, 235)); p4.setFont(new Font("Dialog", Font.PLAIN, 14)); p4.add(new Button("7")); p4.add(new Button("8")); p4.add(new Button("9")); p4.add(new Button("/")); p4.add(new Button("sqrt"));

p4.add(new Button("4")); p4.add(new Button("5")); p4.add(new Button("6")); p4.add(new Button("*")); p4.add(new Button("%")); p4.add(new Button("1")); p4.add(new Button("2")); p4.add(new Button("3")); p4.add(new Button("-")); p4.add(new Button("1/x")); p4.add(new Button("0")); p4.add(new Button("+/-")); p4.add(new Button(".")); p4.add(new Button("+")); p4.add(new Button("=")); // Add and initialize output and total // [Label and TextArea for output] output.setBackground(Color.white); output.setForeground(Color.black); output.setFont(new Font("Courier", Font.BOLD, 18)); total.setBackground(new Color(255, 255, 128)); total.setForeground(Color.black); total.setFont(new Font("Courier", Font.BOLD, 14)); p5.add("Center", total); p5.add("South", output); // Hook up the panels p2.add("North", p3); p2.add("Center", p4); // Add some spacing around outside p1.add("North", p5); p1.add("Center", p2); p.setFont(new Font("Helvetica", Font.PLAIN, 6)); p.add("North", new Label(" ")); p.add("East", new Label(" ")); p.add("West", new Label(" ")); p.add("South", new Label(" ")); p.add("Center", p1); return p; }

} Khoan vit g cho cc method , hy tip tc xem chng ta cn nhng method no na. Gi s bn mun tnh mt php tnh n gin: 9*8=? u tin bn s bm s 9:

Tip theo bn s bm du *

Bn bm tip s 8:

V cui cng l du =

y ch l mt my tnh rt n gin. Nhng n hon ton c th tnh c cn, ly tha...v nu mun, bn c th pht trin tnh sin, cos, tang... Quay li cc method. Trc ht cn thy l ta lun c nhu cu mt con s trung gian. V d khi bn bm s 9, sau bm du *, th chng trnh ca chng ta cn phi lu s 9 li. Sau khi bn bm du = chng hn, chng trnh s "li" s 9 ra nhn vi s 8. ng thi vi vic , chng trnh cng cn hin cc con s v du nhng v tr v thi im thch hp. Cng cn lu l bin trung gian s phi l con s tnh ton.

Tuy nhin, khi ta bm s 9 chng hn, ci m ta nhn c t Label s l mt String. Vy thun tin, ta s dng 2 method, mt ci c tham s l double v mt ci c tham s l String. Code ca chng ta s thm 2 method: import java.awt.*; import java.applet.*; public class Calculator extends Applet{ TextArea total = new TextArea("", 5, 25, TextArea.SCROLLBARS_VERTICAL_ONLY); Label output = new Label(); public void init() { setLayout(new BorderLayout(5,5)); setBackground(Color.lightGray); add("Center", makeButtons()); } // Handles the backspace key private void backSpace(String s) { } // Handles the 'C' [Clear All] key private void clearAll() { } // Handles the 'CE' [Clear Entry] key private void clearEntry() { } // Sets the current value, using a String private void setCurVal(String s) { }

// Sets the current value, using a number private void setCurVal(double newValue) { } private Panel makeButtons() { Panel p = new Panel(new BorderLayout(5,5)); Panel p1 = new Panel(new BorderLayout(5,5)); Panel p2 = new Panel(new BorderLayout(5,5)); Panel p3 = new Panel(new GridLayout(1,3,5,5)); Panel p4 = new Panel(new GridLayout(4,5,5,5)); Panel p5 = new Panel(new BorderLayout(5,5)); // Add Backspace, CE, and C buttons to p3 p3.setForeground(new Color(232,0,0)); p3.setFont(new Font("Dialog", Font.PLAIN, 12)); p3.add(new Button("Backspace")); p3.add(new Button("CE")); p3.add(new Button("C")); // Add Number buttons to p4 p4.setForeground(new Color(0, 0, 235)); p4.setFont(new Font("Dialog", Font.PLAIN, 14)); p4.add(new Button("7")); p4.add(new Button("8")); p4.add(new Button("9")); p4.add(new Button("/")); p4.add(new Button("sqrt")); p4.add(new Button("4")); p4.add(new Button("5")); p4.add(new Button("6")); p4.add(new Button("*")); p4.add(new Button("%")); p4.add(new Button("1")); p4.add(new Button("2")); p4.add(new Button("3")); p4.add(new Button("-")); p4.add(new Button("1/x")); p4.add(new Button("0")); p4.add(new Button("+/-")); p4.add(new Button("."));

p4.add(new Button("+")); p4.add(new Button("=")); // Add and initialize output and total // [Label and TextArea for output] output.setBackground(Color.white); output.setForeground(Color.black); output.setFont(new Font("Courier", Font.BOLD, 18)); total.setBackground(new Color(255, 255, 128)); total.setForeground(Color.black); total.setFont(new Font("Courier", Font.BOLD, 14)); p5.add("Center", total); p5.add("South", output); // Hook up the panels p2.add("North", p3); p2.add("Center", p4); // Add some spacing around outside p1.add("North", p5); p1.add("Center", p2); p.setFont(new Font("Helvetica", Font.PLAIN, 6)); p.add("North", new Label(" ")); p.add("East", new Label(" ")); p.add("West", new Label(" ")); p.add("South", new Label(" ")); p.add("Center", p1); return p; } } Nh v d trn, bn thy l ta s cn mt method dng hin cc s v du trong vngTextArea. Cui cng chng ta phi c mt method quan trng nht l x l cc s kin. C 2 phng thc ny chng ta tm cho return mt gi tr chng trnh khng bo li. import java.awt.*; import java.applet.*; public class Calculator extends Applet{

TextArea total = new TextArea("", 5, 25, TextArea.SCROLLBARS_VERTICAL_ONLY); Label output = new Label(); public void init() { setLayout(new BorderLayout(5,5)); setBackground(Color.lightGray); add("Center", makeButtons()); } // Handles the backspace key private void backSpace(String s) { } // Handles the 'C' [Clear All] key private void clearAll() { } // Handles the 'CE' [Clear Entry] key private void clearEntry() { } // Sets the current value, using a String private void setCurVal(String s) { } // Sets the current value, using a number private void setCurVal(double newValue) { } private String padText(String s, int size) { return ""; } public boolean action(Event ev, Object o)

{ return true; } private Panel makeButtons() { Panel p = new Panel(new BorderLayout(5,5)); Panel p1 = new Panel(new BorderLayout(5,5)); Panel p2 = new Panel(new BorderLayout(5,5)); Panel p3 = new Panel(new GridLayout(1,3,5,5)); Panel p4 = new Panel(new GridLayout(4,5,5,5)); Panel p5 = new Panel(new BorderLayout(5,5)); // Add Backspace, CE, and C buttons to p3 p3.setForeground(new Color(232,0,0)); p3.setFont(new Font("Dialog", Font.PLAIN, 12)); p3.add(new Button("Backspace")); p3.add(new Button("CE")); p3.add(new Button("C")); // Add Number buttons to p4 p4.setForeground(new Color(0, 0, 235)); p4.setFont(new Font("Dialog", Font.PLAIN, 14)); p4.add(new Button("7")); p4.add(new Button("8")); p4.add(new Button("9")); p4.add(new Button("/")); p4.add(new Button("sqrt")); p4.add(new Button("4")); p4.add(new Button("5")); p4.add(new Button("6")); p4.add(new Button("*")); p4.add(new Button("%")); p4.add(new Button("1")); p4.add(new Button("2")); p4.add(new Button("3")); p4.add(new Button("-")); p4.add(new Button("1/x")); p4.add(new Button("0")); p4.add(new Button("+/-")); p4.add(new Button(".")); p4.add(new Button("+")); p4.add(new Button("="));

// Add and initialize output and total // [Label and TextArea for output] output.setBackground(Color.white); output.setForeground(Color.black); output.setFont(new Font("Courier", Font.BOLD, 18)); total.setBackground(new Color(255, 255, 128)); total.setForeground(Color.black); total.setFont(new Font("Courier", Font.BOLD, 14)); p5.add("Center", total); p5.add("South", output); // Hook up the panels p2.add("North", p3); p2.add("Center", p4); // Add some spacing around outside p1.add("North", p5); p1.add("Center", p2); p.setFont(new Font("Helvetica", Font.PLAIN, 6)); p.add("North", new Label(" ")); p.add("East", new Label(" ")); p.add("West", new Label(" ")); p.add("South", new Label(" ")); p.add("Center", p1); return p; } } Trc khi tip tc, bn Save li v chy th, nu khng c li th coi nh chng ta xong c bn. Phn sau chng ta s "thm mm thm mui" cc method.

ng dng Calculator phn 4


Chng ta s tip tc vi phn x l cc s kin. Cc s kin ch yu trong chng trnh ca chng ta l khi ngi dng click vo mt button no .

Bn c thy trong phn trc chng ta khng h cp n vic implementsActionListener nh thng l? Bn cng c thy chng ta "mc nhin" vit method public boolean action(Event ev, Object o)? i khi l chng ta mun ci g cng nm qua. Chng ta ang override phng thc action() Mi khi c mt s kin nh click vo button chng hn xy ra th h thng s gi phng thc action().

public boolean action(Event evt, Object arg) { . . . // respond to the action event return true; // or return false, if action not handled } Tuy nhin cn c nhng s kin v cc phng thc khc xy ra khi dng Mouse hay Keyboard trong AWT. Bng di y tm tt cc s kin cho cc AWT component:

AWT component events

Ni chung y l Java 1.0, v sau ny bn hon ton c

th thay th bng cch m chng ta bn. Quay li chng trnh Calculator. Bn hy coi li mt v d ca chng ta. Chng trnh Gbltest2. By gi bn thm code sau vo chng trnh: import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class Gbltest2 extends Frame{ Button b1,b2,b3,b4; GridBagLayout gb; GridBagConstraints gbc; public Gbltest2(String title) { super(title); gb=new GridBagLayout();//Buoc 1 gbc=new GridBagConstraints();// Buoc 2 setLayout(gb);// Buoc 3 b1=new Button("Button 1"); gbc.fill=GridBagConstraints.HORIZONTAL;//Buoc 4 gbc.weightx = 0.5;//Buoc 4 gbc.gridx =0;//Buoc 4 gbc.gridy =0;//Buoc 4 gb.setConstraints(b1, gbc);//Buoc 5 add(b1);//Buoc 6 b2=new Button("Button 2"); gbc.fill=GridBagConstraints.HORIZONTAL;//Buoc 4 gbc.gridx =1;//Buoc 4 gbc.gridy =0;//Buoc 4 gb.setConstraints(b2, gbc);//Buoc 5

add(b2);//Buoc 6 b3=new Button("Button 3"); gbc.fill=GridBagConstraints.HORIZONTAL;//Buoc 4 gbc.gridx =2;//Buoc 4 gbc.gridy =0;//Buoc 4 gb.setConstraints(b3, gbc);//Buoc 5 add(b3);//Buoc 6 b4=new Button("Button 4"); gbc.fill=GridBagConstraints.HORIZONTAL;//Buoc 4 gbc.weighty = 0.5; gbc.anchor = GridBagConstraints.PAGE_END; gbc.gridx =0; gbc.gridy =1; gbc.gridwidth = 3; gb.setConstraints(b4, gbc);//Buoc 5 add(b4);//Buoc 6 } public boolean action(Event evt, Object arg) { System.out.println("Hello"); return true; } public static void main(String args[]) { Gbltest2 t=new Gbltest2("GridBag Layout"); t.setSize(300,300); t.setVisible(true); t.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent we){ System.exit(0); } });

} } Save li v chy th. Mi khi bn click vo bt c button no, ch "Hello" s xut hin. Nu bn th vi Menu, TextField....th bn cng s nhn c cng mt kt qu. Gi y, nu mun x l s kin no th cng vic "nng nhc" ca chng ta l tm ra ngun gc ca s kin, s kin xut pht t component no? Trc khi vit code cho cc method, chng ta cn xem th chng ta cn nhng bin no. Coi li phn trc vi v d 9*8=? chng hn Th nht l mt bin kt qu tnh ton, kiu d liu lad double: double result Tip theo mt bin lu s u tin, chng ta s 'li' ra dng li sau khi nhp s th hai, kiu d liu lad double: double memVal Mt bin lu s th hai,kiu d liu l double: double curVal Cui cng l mt bin bit ngi dng nhn button no tnh(+,-,*,/), kiu d liu l char:char tempVal Ta c code: import java.awt.*; import java.applet.*; public class Calculator extends Applet{ TextArea total = new TextArea("", 5, 25, TextArea.SCROLLBARS_VERTICAL_ONLY); Label output = new Label(); double memVal = 0; double curVal = 0; char tempVal; double result = 0;

public void init() { setLayout(new BorderLayout(5,5)); setBackground(Color.lightGray); add("Center", makeButtons()); } // Handles the backspace key private void backSpace(String s) { } // Handles the 'C' [Clear All] key private void clearAll() { } // Handles the 'CE' [Clear Entry] key private void clearEntry() { } // Sets the current value, using a String private void setCurVal(String s) { } // Sets the current value, using a number private void setCurVal(double newValue) { } private String padText(String s, int size) { return ""; } public boolean action(Event ev, Object o) { return true; }

private Panel makeButtons() { Panel p = new Panel(new BorderLayout(5,5)); Panel p1 = new Panel(new BorderLayout(5,5)); Panel p2 = new Panel(new BorderLayout(5,5)); Panel p3 = new Panel(new GridLayout(1,3,5,5)); Panel p4 = new Panel(new GridLayout(4,5,5,5)); Panel p5 = new Panel(new BorderLayout(5,5)); // Add Backspace, CE, and C buttons to p3 p3.setForeground(new Color(232,0,0)); p3.setFont(new Font("Dialog", Font.PLAIN, 12)); p3.add(new Button("Backspace")); p3.add(new Button("CE")); p3.add(new Button("C")); // Add Number buttons to p4 p4.setForeground(new Color(0, 0, 235)); p4.setFont(new Font("Dialog", Font.PLAIN, 14)); p4.add(new Button("7")); p4.add(new Button("8")); p4.add(new Button("9")); p4.add(new Button("/")); p4.add(new Button("sqrt")); p4.add(new Button("4")); p4.add(new Button("5")); p4.add(new Button("6")); p4.add(new Button("*")); p4.add(new Button("%")); p4.add(new Button("1")); p4.add(new Button("2")); p4.add(new Button("3")); p4.add(new Button("-")); p4.add(new Button("1/x")); p4.add(new Button("0")); p4.add(new Button("+/-")); p4.add(new Button(".")); p4.add(new Button("+")); p4.add(new Button("=")); // Add and initialize output and total // [Label and TextArea for output] output.setBackground(Color.white);

output.setForeground(Color.black); output.setFont(new Font("Courier", Font.BOLD, 18)); total.setBackground(new Color(255, 255, 128)); total.setForeground(Color.black); total.setFont(new Font("Courier", Font.BOLD, 14)); p5.add("Center", total); p5.add("South", output); // Hook up the panels p2.add("North", p3); p2.add("Center", p4); // Add some spacing around outside p1.add("North", p5); p1.add("Center", p2); p.setFont(new Font("Helvetica", Font.PLAIN, 6)); p.add("North", new Label(" ")); p.add("East", new Label(" ")); p.add("West", new Label(" ")); p.add("South", new Label(" ")); p.add("Center", p1); return p; } } Chng ta bt u x l s kin vi 3 button pha trn (Backspace-CE-C) clearEntry(): Bn ch vic lm cho gi tr ca Label output thnh rng v bin lu s th hai tr v gi tr bng khng l xong. clearAll(): Cng tng t, nhng bn cn phi cho gi tr ca TextArea Total thnh rng v chai gi tr bin s th nht v th hai bng khng. backSpace(): Khng qu phc tp. Bn xt xem chiu di ca chui nhp vo Label output bng bao nhiu k t, sau bt i mt k t.

y l code: import java.awt.*; import java.applet.*; public class Calculator extends Applet{ TextArea total = new TextArea("", 5, 25, TextArea.SCROLLBARS_VERTICAL_ONLY); Label output = new Label(); double memVal = 0; double curVal = 0; char tempVal; double result = 0; public void init() { setLayout(new BorderLayout(5,5)); setBackground(Color.lightGray); add("Center", makeButtons()); } // Handles the backspace key private void backSpace(String s) { if(s.length()>0) { s = s.substring(0, s.length()-1); setCurVal(s); } } // Handles the 'C' [Clear All] key private void clearAll() { total.setText(""); output.setText(""); curVal = memVal = 0; } // Handles the 'CE' [Clear Entry] key private void clearEntry() { output.setText(""); curVal = 0;

} // Sets the current value, using a String private void setCurVal(String s) { } // Sets the current value, using a number private void setCurVal(double newValue) { } private String padText(String s, int size) { return ""; } public boolean action(Event ev, Object o) { return true; } private Panel makeButtons() { Panel p = new Panel(new BorderLayout(5,5)); Panel p1 = new Panel(new BorderLayout(5,5)); Panel p2 = new Panel(new BorderLayout(5,5)); Panel p3 = new Panel(new GridLayout(1,3,5,5)); Panel p4 = new Panel(new GridLayout(4,5,5,5)); Panel p5 = new Panel(new BorderLayout(5,5)); // Add Backspace, CE, and C buttons to p3 p3.setForeground(new Color(232,0,0)); p3.setFont(new Font("Dialog", Font.PLAIN, 12)); p3.add(new Button("Backspace")); p3.add(new Button("CE")); p3.add(new Button("C")); // Add Number buttons to p4 p4.setForeground(new Color(0, 0, 235)); p4.setFont(new Font("Dialog", Font.PLAIN, 14)); p4.add(new Button("7")); p4.add(new Button("8")); p4.add(new Button("9")); p4.add(new Button("/"));

p4.add(new Button("sqrt")); p4.add(new Button("4")); p4.add(new Button("5")); p4.add(new Button("6")); p4.add(new Button("*")); p4.add(new Button("%")); p4.add(new Button("1")); p4.add(new Button("2")); p4.add(new Button("3")); p4.add(new Button("-")); p4.add(new Button("1/x")); p4.add(new Button("0")); p4.add(new Button("+/-")); p4.add(new Button(".")); p4.add(new Button("+")); p4.add(new Button("=")); // Add and initialize output and total // [Label and TextArea for output] output.setBackground(Color.white); output.setForeground(Color.black); output.setFont(new Font("Courier", Font.BOLD, 18)); total.setBackground(new Color(255, 255, 128)); total.setForeground(Color.black); total.setFont(new Font("Courier", Font.BOLD, 14)); p5.add("Center", total); p5.add("South", output); // Hook up the panels p2.add("North", p3); p2.add("Center", p4); // Add some spacing around outside p1.add("North", p5); p1.add("Center", p2); p.setFont(new Font("Helvetica", Font.PLAIN, 6)); p.add("North", new Label(" ")); p.add("East", new Label(" ")); p.add("West", new Label(" ")); p.add("South", new Label(" ")); p.add("Center", p1); return p;

} } Tm thi cha c g hot ng. Chng ta s cho n hot ng trong phn sau.

ng dng Calculator phn 5


Chng ta tip tc vi method setCurVal() C hai phng thc c np chng (Method overloading) :
1. 2.

Mt c tham s l String Mt ci khc c tham s l double

Method th nht l method chnh thit lp gi tr cho s th hai nhp vo Label output. Tuy nhin khi tnh ton, i khi ta c nhu cu tnh cn chng hn. Bn ch c mt s, bn s bm s , sau bm [sqrt] button. Lc ny ta s dng method th hai. C hai u s dng setText() thit lp gi tr cho Label output. Tuy nhin method th hai bn cn lu thm 1 chui rng cng vo gi tr double, mc ch l tham s tr thnh String m thi. y l code, phng thc u c phn try-catch, chng ta s tm hiu sau. import java.awt.*; import java.applet.*; public class Calculator extends Applet{ TextArea total = new TextArea("", 5, 25, TextArea.SCROLLBARS_VERTICAL_ONLY); Label output = new Label(); double memVal = 0; double curVal = 0;

char tempVal; double result = 0; public void init() { setLayout(new BorderLayout(5,5)); setBackground(Color.lightGray); add("Center", makeButtons()); } // Handles the backspace key private void backSpace(String s) { if(s.length()>0) { s = s.substring(0, s.length()-1); setCurVal(s); } } // Handles the 'C' [Clear All] key private void clearAll() { total.setText(""); output.setText(""); curVal = memVal = 0; } // Handles the 'CE' [Clear Entry] key private void clearEntry() { output.setText(""); curVal = 0; } // Sets the current value, using a String private void setCurVal(String s) { output.setText(s); try{ curVal = (new Double(s)).doubleValue(); }catch(NumberFormatException ex) {

} } // Sets the current value, using a number private void setCurVal(double newValue) { curVal = newValue; output.setText(""+newValue); } private String padText(String s, int size) { return ""; } public boolean action(Event ev, Object o) { return true; } private Panel makeButtons() { Panel p = new Panel(new BorderLayout(5,5)); Panel p1 = new Panel(new BorderLayout(5,5)); Panel p2 = new Panel(new BorderLayout(5,5)); Panel p3 = new Panel(new GridLayout(1,3,5,5)); Panel p4 = new Panel(new GridLayout(4,5,5,5)); Panel p5 = new Panel(new BorderLayout(5,5)); // Add Backspace, CE, and C buttons to p3 p3.setForeground(new Color(232,0,0)); p3.setFont(new Font("Dialog", Font.PLAIN, 12)); p3.add(new Button("Backspace")); p3.add(new Button("CE")); p3.add(new Button("C")); // Add Number buttons to p4 p4.setForeground(new Color(0, 0, 235)); p4.setFont(new Font("Dialog", Font.PLAIN, 14)); p4.add(new Button("7")); p4.add(new Button("8")); p4.add(new Button("9")); p4.add(new Button("/")); p4.add(new Button("sqrt")); p4.add(new Button("4")); p4.add(new Button("5"));

p4.add(new Button("6")); p4.add(new Button("*")); p4.add(new Button("%")); p4.add(new Button("1")); p4.add(new Button("2")); p4.add(new Button("3")); p4.add(new Button("-")); p4.add(new Button("1/x")); p4.add(new Button("0")); p4.add(new Button("+/-")); p4.add(new Button(".")); p4.add(new Button("+")); p4.add(new Button("=")); // Add and initialize output and total // [Label and TextArea for output] output.setBackground(Color.white); output.setForeground(Color.black); output.setFont(new Font("Courier", Font.BOLD, 18)); total.setBackground(new Color(255, 255, 128)); total.setForeground(Color.black); total.setFont(new Font("Courier", Font.BOLD, 14)); p5.add("Center", total); p5.add("South", output); // Hook up the panels p2.add("North", p3); p2.add("Center", p4); // Add some spacing around outside p1.add("North", p5); p1.add("Center", p2); p.setFont(new Font("Helvetica", Font.PLAIN, 6)); p.add("North", new Label(" ")); p.add("East", new Label(" ")); p.add("West", new Label(" ")); p.add("South", new Label(" ")); p.add("Center", p1); return p; } }

(new Double(s)).doubleValue(); nhm chuyn mt gi tr kiu chui thnh gi tr kiu double m thi. Tip theo l method padText(String s, int size) Method ny ch c mt nhim v l to ra mt chui chng ta cho hin ln trong TextArea. y l code: import java.awt.*; import java.applet.*; public class Calculator extends Applet{ TextArea total = new TextArea("", 5, 25, TextArea.SCROLLBARS_VERTICAL_ONLY); Label output = new Label(); double memVal = 0; double curVal = 0; char tempVal; double result = 0; public void init() { setLayout(new BorderLayout(5,5)); setBackground(Color.lightGray); add("Center", makeButtons()); } // Handles the backspace key private void backSpace(String s) { if(s.length()>0) { s = s.substring(0, s.length()-1); setCurVal(s); } } // Handles the 'C' [Clear All] key private void clearAll() {

total.setText(""); output.setText(""); curVal = memVal = 0; } // Handles the 'CE' [Clear Entry] key private void clearEntry() { output.setText(""); curVal = 0; } // Sets the current value, using a String private void setCurVal(String s) { output.setText(s); try{ curVal = (new Double(s)).doubleValue(); }catch(NumberFormatException ex) { } } // Sets the current value, using a number private void setCurVal(double newValue) { curVal = newValue; output.setText(""+newValue); } private String padText(String s, int size) { String temp = " " + s; return temp.substring(temp.length() - size); } public boolean action(Event ev, Object o) { return true; } private Panel makeButtons() { Panel p = new Panel(new BorderLayout(5,5)); Panel p1 = new Panel(new BorderLayout(5,5));

Panel p2 = new Panel(new BorderLayout(5,5)); Panel p3 = new Panel(new GridLayout(1,3,5,5)); Panel p4 = new Panel(new GridLayout(4,5,5,5)); Panel p5 = new Panel(new BorderLayout(5,5)); // Add Backspace, CE, and C buttons to p3 p3.setForeground(new Color(232,0,0)); p3.setFont(new Font("Dialog", Font.PLAIN, 12)); p3.add(new Button("Backspace")); p3.add(new Button("CE")); p3.add(new Button("C")); // Add Number buttons to p4 p4.setForeground(new Color(0, 0, 235)); p4.setFont(new Font("Dialog", Font.PLAIN, 14)); p4.add(new Button("7")); p4.add(new Button("8")); p4.add(new Button("9")); p4.add(new Button("/")); p4.add(new Button("sqrt")); p4.add(new Button("4")); p4.add(new Button("5")); p4.add(new Button("6")); p4.add(new Button("*")); p4.add(new Button("%")); p4.add(new Button("1")); p4.add(new Button("2")); p4.add(new Button("3")); p4.add(new Button("-")); p4.add(new Button("1/x")); p4.add(new Button("0")); p4.add(new Button("+/-")); p4.add(new Button(".")); p4.add(new Button("+")); p4.add(new Button("=")); // Add and initialize output and total // [Label and TextArea for output] output.setBackground(Color.white); output.setForeground(Color.black); output.setFont(new Font("Courier", Font.BOLD, 18)); total.setBackground(new Color(255, 255, 128)); total.setForeground(Color.black);

total.setFont(new Font("Courier", Font.BOLD, 14)); p5.add("Center", total); p5.add("South", output); // Hook up the panels p2.add("North", p3); p2.add("Center", p4); // Add some spacing around outside p1.add("North", p5); p1.add("Center", p2); p.setFont(new Font("Helvetica", Font.PLAIN, 6)); p.add("North", new Label(" ")); p.add("East", new Label(" ")); p.add("West", new Label(" ")); p.add("South", new Label(" ")); p.add("Center", p1); return p; } } n luc ny chng trnh vn cha hot ng v ta cha vit g trong method action() Phn sau chng ta s hon thnh chng trnh.

ng dng Calculator phn 6


Chng ta bt u vit code cho action() method y l phn quan trng nht ca c chng trnh. Hy coi li dng cn bn ca action() method

public boolean action(Event evt, Object arg) { . . . // respond to the action event return true; // or return false, if action not handled }

Tham s th hai l mt Object, nu button 1 chng hn c click th arg l button 1 object. Chng ta s i ra mt String bit button no c click. Bn cng co th s dng c php: evt.target == button1 bit l button1 va c bm. Tuy nhin chng ta s s dng cch th nht. y l code cho nhng bin ca action() method: import java.awt.*; import java.applet.*; public class Calculator extends Applet{ TextArea total = new TextArea("", 5, 25, TextArea.SCROLLBARS_VERTICAL_ONLY); Label output = new Label(); double memVal = 0; double curVal = 0; char tempVal; double result = 0; public void init() { setLayout(new BorderLayout(5,5)); setBackground(Color.lightGray); add("Center", makeButtons()); } // Handles the backspace key private void backSpace(String s) { if(s.length()>0) { s = s.substring(0, s.length()-1); setCurVal(s); } } // Handles the 'C' [Clear All] key private void clearAll() { total.setText(""); output.setText("");

curVal = memVal = 0; } // Handles the 'CE' [Clear Entry] key private void clearEntry() { output.setText(""); curVal = 0; } // Sets the current value, using a String private void setCurVal(String s) { output.setText(s); try{ curVal = (new Double(s)).doubleValue(); }catch(NumberFormatException ex) { } } // Sets the current value, using a number private void setCurVal(double newValue) { curVal = newValue; output.setText(""+newValue); } private String padText(String s, int size) { String temp = " " + s; return temp.substring(temp.length() - size); } public boolean action(Event ev, Object o) { // Local variables String arg = (String) o; // Key that was pressed char c = arg.charAt(0); // First char of key caption String s = output.getText(); return true; } private Panel makeButtons()

{ Panel p = new Panel(new BorderLayout(5,5)); Panel p1 = new Panel(new BorderLayout(5,5)); Panel p2 = new Panel(new BorderLayout(5,5)); Panel p3 = new Panel(new GridLayout(1,3,5,5)); Panel p4 = new Panel(new GridLayout(4,5,5,5)); Panel p5 = new Panel(new BorderLayout(5,5)); // Add Backspace, CE, and C buttons to p3 p3.setForeground(new Color(232,0,0)); p3.setFont(new Font("Dialog", Font.PLAIN, 12)); p3.add(new Button("Backspace")); p3.add(new Button("CE")); p3.add(new Button("C")); // Add Number buttons to p4 p4.setForeground(new Color(0, 0, 235)); p4.setFont(new Font("Dialog", Font.PLAIN, 14)); p4.add(new Button("7")); p4.add(new Button("8")); p4.add(new Button("9")); p4.add(new Button("/")); p4.add(new Button("sqrt")); p4.add(new Button("4")); p4.add(new Button("5")); p4.add(new Button("6")); p4.add(new Button("*")); p4.add(new Button("%")); p4.add(new Button("1")); p4.add(new Button("2")); p4.add(new Button("3")); p4.add(new Button("-")); p4.add(new Button("1/x")); p4.add(new Button("0")); p4.add(new Button("+/-")); p4.add(new Button(".")); p4.add(new Button("+")); p4.add(new Button("=")); // Add and initialize output and total // [Label and TextArea for output] output.setBackground(Color.white); output.setForeground(Color.black);

output.setFont(new Font("Courier", Font.BOLD, 18)); total.setBackground(new Color(255, 255, 128)); total.setForeground(Color.black); total.setFont(new Font("Courier", Font.BOLD, 14)); p5.add("Center", total); p5.add("South", output); // Hook up the panels p2.add("North", p3); p2.add("Center", p4); // Add some spacing around outside p1.add("North", p5); p1.add("Center", p2); p.setFont(new Font("Helvetica", Font.PLAIN, 6)); p.add("North", new Label(" ")); p.add("East", new Label(" ")); p.add("West", new Label(" ")); p.add("South", new Label(" ")); p.add("Center", p1); return p; } } String arg = (String) o; i object ra chui, nhm xc nh xem button no c click char c = arg.charAt(0); cng nhm xc nh xem button no c click. Tuy nhin y l char v chng ta ch cn xc nh cc button s 0-9, du (+,-,*,/,=,.) m thi. String s = output.getText(); dng nhn gi tr nhp vo Label output. Chng ta c cc bin cn thit. Gi y ch cn mt vic l x l s kin m thi. Hy coi li "dung nhan" chic my tnh ca chng ta, lu [%] khng phi tnh phn trm m l ton t mod, dng tnh s d trong php chia, v d 7%2 bng 1:

C cc nhm button sau: 1. 2. 3. 4. 5. Button s: 0-9 Button du: [+],[-],[*],[/] v [%] Button du chm thp phn [.] Button [=] V cc button cn li.

T bn s to mt thut ton n gin sau: import java.awt.*; import java.applet.*; public class Calculator extends Applet{ TextArea total = new TextArea("", 5, 25, TextArea.SCROLLBARS_VERTICAL_ONLY); Label output = new Label(); double memVal = 0; double curVal = 0;

char tempVal; double result = 0; public void init() { setLayout(new BorderLayout(5,5)); setBackground(Color.lightGray); add("Center", makeButtons()); } // Handles the backspace key private void backSpace(String s) { if(s.length()>0) { s = s.substring(0, s.length()-1); setCurVal(s); } } // Handles the 'C' [Clear All] key private void clearAll() { total.setText(""); output.setText(""); curVal = memVal = 0; } // Handles the 'CE' [Clear Entry] key private void clearEntry() { output.setText(""); curVal = 0; } // Sets the current value, using a String private void setCurVal(String s) { output.setText(s); try{ curVal = (new Double(s)).doubleValue(); }catch(NumberFormatException ex) {

} } // Sets the current value, using a number private void setCurVal(double newValue) { curVal = newValue; output.setText(""+newValue); } private String padText(String s, int size) { String temp = " " + s; return temp.substring(temp.length() - size); } public boolean action(Event ev, Object o) { // Local variables String arg = (String) o; // Key that was pressed char c = arg.charAt(0); // First char of key caption String s = output.getText(); // Current value of output // "Special" keys operate on current value if (arg.equals("Backspace")) ; else if (arg.equals("C")) ; else if (arg.equals("CE")) ; else if (arg.equals("sqrt")) ; else if (arg.equals("1/x")) ; else if (arg.equals("+/-")) ; //---------------------------------------------------------------------------------else{ // Digit keys are always added to current value if (c >= '0' && c <= '9') ; // Decimal point added only if not already in output else if (c == '.') ; else if (c == '=') ;

// Handle all of the operator keys else { } //----------------------------------------------------------------------------------} return true; } private Panel makeButtons() { Panel p = new Panel(new BorderLayout(5,5)); Panel p1 = new Panel(new BorderLayout(5,5)); Panel p2 = new Panel(new BorderLayout(5,5)); Panel p3 = new Panel(new GridLayout(1,3,5,5)); Panel p4 = new Panel(new GridLayout(4,5,5,5)); Panel p5 = new Panel(new BorderLayout(5,5)); // Add Backspace, CE, and C buttons to p3 p3.setForeground(new Color(232,0,0)); p3.setFont(new Font("Dialog", Font.PLAIN, 12)); p3.add(new Button("Backspace")); p3.add(new Button("CE")); p3.add(new Button("C")); // Add Number buttons to p4 p4.setForeground(new Color(0, 0, 235)); p4.setFont(new Font("Dialog", Font.PLAIN, 14)); p4.add(new Button("7")); p4.add(new Button("8")); p4.add(new Button("9")); p4.add(new Button("/")); p4.add(new Button("sqrt")); p4.add(new Button("4")); p4.add(new Button("5")); p4.add(new Button("6")); p4.add(new Button("*")); p4.add(new Button("%")); p4.add(new Button("1"));

p4.add(new Button("2")); p4.add(new Button("3")); p4.add(new Button("-")); p4.add(new Button("1/x")); p4.add(new Button("0")); p4.add(new Button("+/-")); p4.add(new Button(".")); p4.add(new Button("+")); p4.add(new Button("=")); // Add and initialize output and total // [Label and TextArea for output] output.setBackground(Color.white); output.setForeground(Color.black); output.setFont(new Font("Courier", Font.BOLD, 18)); total.setBackground(new Color(255, 255, 128)); total.setForeground(Color.black); total.setFont(new Font("Courier", Font.BOLD, 14)); p5.add("Center", total); p5.add("South", output); // Hook up the panels p2.add("North", p3); p2.add("Center", p4); // Add some spacing around outside p1.add("North", p5); p1.add("Center", p2); p.setFont(new Font("Helvetica", Font.PLAIN, 6)); p.add("North", new Label(" ")); p.add("East", new Label(" ")); p.add("West", new Label(" ")); p.add("South", new Label(" ")); p.add("Center", p1); return p; } } Bn c th thy chng ta chia ra thnh 2 trng hp chnh:

1. 2.

Khi ngi s dng click cc button nh Khi ngi s dng click cc button cn li.

Backapace-CE-C,sqrt....

Chng ta hon thnh 90% cng vic. Mc d hin ti Calculator ca chng ta cha hot ng, nhng cng vic cn li tht s ch l nm vng cc method cn thit v x l tng trng hp c th. y l code hon chnh import java.awt.*; import java.applet.*; public class Calculator extends Applet{ TextArea total = new TextArea("", 5, 25, TextArea.SCROLLBARS_VERTICAL_ONLY); Label output = new Label(); double memVal = 0; double curVal = 0; char tempVal; double result = 0; public void init() { setLayout(new BorderLayout(5,5)); setBackground(Color.lightGray); add("Center", makeButtons()); } // Handles the backspace key private void backSpace(String s) { if(s.length()>0) { s = s.substring(0, s.length()-1); setCurVal(s); } } // Handles the 'C' [Clear All] key

private void clearAll() { total.setText(""); output.setText(""); curVal = memVal = 0; } // Handles the 'CE' [Clear Entry] key private void clearEntry() { output.setText(""); curVal = 0; } // Sets the current value, using a String private void setCurVal(String s) { output.setText(s); try{ curVal = (new Double(s)).doubleValue(); }catch(NumberFormatException ex) { } } // Sets the current value, using a number private void setCurVal(double newValue) { curVal = newValue; output.setText(""+newValue); } private String padText(String s, int size) { String temp = " " + s; return temp.substring(temp.length() - size); } public boolean action(Event ev, Object o) { // Local variables String arg = (String) o; // Key that was pressed char c = arg.charAt(0); // First char of key caption

String s = output.getText(); // Current value of output // "Special" keys operate on current value if (arg.equals("Backspace")) backSpace(s); else if (arg.equals("C")) clearAll(); else if (arg.equals("CE")) clearEntry(); else if (arg.equals("sqrt")) setCurVal(Math.sqrt(curVal)); else if (arg.equals("1/x")) setCurVal(1.0/curVal); else if (arg.equals("+/-")) setCurVal(-curVal); //---------------------------------------------------------------------------------else{ // Digit keys are always added to current value if (c >= '0' && c <= '9') setCurVal(s + c); // Decimal point added only if not already in output else if (c == '.') { if (s.indexOf(c) < 0) setCurVal(s + c); } else if (c == '=') { switch (tempVal) { case '/': result = memVal/curVal;break; case '*': result = memVal*curVal;break; case '-': result = memVal-curVal;break; case '+': result = memVal+curVal;break; case '%': result = memVal%curVal;break; } String memstr = "" + result + " \n"; total.appendText(""+curVal+"\n"); total.appendText("=============\n"); total.appendText(""+memstr); //total.enable(); curVal = 0; output.setText(""); }

// Handle all of the operator keys else { switch (c) { case '/': memVal = curVal; tempVal = '/';break; case '*': memVal = curVal; tempVal = '*';break; case '-': memVal = curVal; tempVal = '-';break; case '+': memVal = curVal; tempVal = '+';break; case '%': memVal = curVal; tempVal = '%';break; } // Display results on the TextArea named total String memstr = "" + curVal + " " + c + " \n"; total.appendText(padText(memstr,memstr.length())); // Clear the output curVal = 0; output.setText(""); } //----------------------------------------------------------------------------------} return true; } private Panel makeButtons() { Panel p = new Panel(new BorderLayout(5,5)); Panel p1 = new Panel(new BorderLayout(5,5)); Panel p2 = new Panel(new BorderLayout(5,5)); Panel p3 = new Panel(new GridLayout(1,3,5,5)); Panel p4 = new Panel(new GridLayout(4,5,5,5)); Panel p5 = new Panel(new BorderLayout(5,5)); // Add Backspace, CE, and C buttons to p3

p3.setForeground(new Color(232,0,0)); p3.setFont(new Font("Dialog", Font.PLAIN, 12)); p3.add(new Button("Backspace")); p3.add(new Button("CE")); p3.add(new Button("C")); // Add Number buttons to p4 p4.setForeground(new Color(0, 0, 235)); p4.setFont(new Font("Dialog", Font.PLAIN, 14)); p4.add(new Button("7")); p4.add(new Button("8")); p4.add(new Button("9")); p4.add(new Button("/")); p4.add(new Button("sqrt")); p4.add(new Button("4")); p4.add(new Button("5")); p4.add(new Button("6")); p4.add(new Button("*")); p4.add(new Button("%")); p4.add(new Button("1")); p4.add(new Button("2")); p4.add(new Button("3")); p4.add(new Button("-")); p4.add(new Button("1/x")); p4.add(new Button("0")); p4.add(new Button("+/-")); p4.add(new Button(".")); p4.add(new Button("+")); p4.add(new Button("=")); // Add and initialize output and total // [Label and TextArea for output] output.setBackground(Color.white); output.setForeground(Color.black); output.setFont(new Font("Courier", Font.BOLD, 18)); total.setBackground(new Color(255, 255, 128)); total.setForeground(Color.black); total.setFont(new Font("Courier", Font.BOLD, 14)); p5.add("Center", total); p5.add("South", output); // Hook up the panels p2.add("North", p3);

p2.add("Center", p4); // Add some spacing around outside p1.add("North", p5); p1.add("Center", p2); p.setFont(new Font("Helvetica", Font.PLAIN, 6)); p.add("North", new Label(" ")); p.add("East", new Label(" ")); p.add("West", new Label(" ")); p.add("South", new Label(" ")); p.add("Center", p1); return p; } } C l khng c g qu kh hiu. V d vi nhng button n gin nh [C] chng hn, bn ch vic gi method clearAll() thi. Bn cng thy method appendText() c gch ngang trong Eclipse code, l do vi Java 1.1 tr i appendText() c thay bng append(). Phn code cn li ch c nhim v: Nu ngi s dng click button [=] th ty thuc vo trc ngi s dng click button no(+,-,*,/,%) m chng trnh s "li" bin memVal ra v cng-tr-nhn hay chia cho bincurVal. Chng ta hon tt chng trnh Calculator. Ci m chng ti mun bn lu khng phi l bn thn chng trnh. Khi chng ta lp trnh, bn c gng: 1. cui. 2. Hy to mt b khung ca chng trnh trc. ng bao gi cm ci vit mt mch t u n

3. 4. 5. 6. 7. 8.

To mt giao din u tin. Tip theo thm nhng phng thc rng. Chy th vi b khung . Sau mi vit code cho cc method. Mi khi xong mt phng thc hy chy th, Hy lu b khung bn to sau khi xong bc 4

khng c li mi vit tip. li. Bn s c ci nhn ton cnh v chng trnh. Bn cng s d dng nng cp hay b sung thm cc phng thc khc.

Nhc li v Applet
Tt c cc applet u l cc lp con ca lp Applet.

Lp Applet thuc package java.applet. Lp Applet bao gm nhiu phng thc ca applet. to applet, bn cn import hai gi sau:

java.applet java.awt

Mt Applet thng thng tri qua 4 giai on: init()-start()-stop()-destroy() iu quan trng l khng phi lc no applet cng bt u t ban u. M n bt qu trnh thc thi trc .

Ngoi ra cn c nhng phng thc paint() v repaint(). Phng thc paint() dn thng (line), text, hoc mt hnh nh trn nn applet. i s ca phng thc ny l Lp ny thuc gi java.awt. Cu lnh sau c dng import lp Graphics: import java.awt.Graphics;

Tm tt cc phng thc ca Applet


Phng Chc nng thc init() c gi trong qu trnh khi to applet. Trong qu trnh khi

to, n s to i tng cung cp cho applet. Phng thc ny c dng ti cc hnh nh ho, khi to cc bin v to cc i tng. start() c gi gi khi mt applet bt u thc thi. Mt khi qu trnh khi to hon tt, th applet c khi ng. Phng thc ny c dng khi ng li applet sau khi n ngng trc c gi khi ngng thc thi mt applet. Mt applet b ngng trc khi n b hu.

stop()

destroy() c dng hu mt applet. Khi mt applet b hu, th b nh, thi gian thc thi ca vi x l, khng gian a c tr v cho h thng.

Cc phng thc ca applet init(), start(), stop(), destroy(), v paint() c th Nhng mc nh nhng phng thc ny khng thc thi mt thao tc no c trong cc v d trc, nu ta khng khai bo cc phng thc th cng khng c

Phng thc repaint() c dng khi ca s cn cp nht li. Phng thc ny ch ny l i tng ca lp Graphics. Bn dc mt Applet cng nh bn dich mt Applic javac Applet1.java Trong Eclipse th bn ch cn Save li l xong.

thc thi mt applet, ta cn to mt file HTML. File HTML ny s dng th applet. u tin l ng dn ca file applet. Th applet c hai thuc tnh sau:

Width Height

truyn tham s vo applet, s dng param t bn trong th APPLET, sau

Th d sau minh ha truyn tham s t Applet2.htm sang Applet2.class C php ca th applet:

Lc ny, ta c th thc thi applet ny bng cch dng trnh xem applet. y l cng HTML trong trnh xem applet, ta g cu lnh sau: appletviewer abc.html // abc.html l tn ca file HTML

Mt tu chn khc ca applet l ta thm th applet nh l mt dng ch thch trong c dch, v thc thi bng cch s dng lnh sau: appletviewer Applet1.java

Nhc li v Applet phn 2


S khc nhau gia Application v Applet

Sau y l s khc nhau gia application v applet:

thc thi cc application chng ta dng trnh thng dch java, trong khi applet c th chy c trn cc trnh duyt (c h tr Java) hay s dng cng c appletViewer, cng c ny i km vi JDK. Qu trnh thc thi ca application bt u t phng thc main(). Tuy nhin applet th khng lm nh vy. Trong applet co method init(), tuy nhin nh ta tho lun, nu ta khng khai bao g th v theo mc nh init() khng lm g c nn cng "khng nh hng g n ha bnh th gii" c. Cc application s dng System.out.println() hin th kt qu ra mn hnh trong khi applet s dng phng thc drawString() xut ra mn hnh.

Chu trnh sng ca mt Applet

Destroy Stop Creation Initalization Starting

Trc tin, applet c to. Bc k tip l khi to. iu ny xy ra khi mt applet c np. Qu trnh ny bao gm vic to cc i tng m applet cn. Phng thc init() c nh ngha cung cp cc hnh vi khi to. Mt khi applet c khi to, applet s c khi ng. Applet c th khi ng ngay c khi n c ngng trc . V d, nu trnh duyt nhy n mt lin kt no trang khc, lc applet s b ngng, v c khi ng tr li khi ngi s dng quay v trang .

S khc nhau gia qu trnh khi to v qu trnh khi ng l mt applet c th khi ng nhiu ln, nhng qa trnh khi to th ch xy ra mt ln.

Phng thc start() c override cung cp cc thao tc khi ng cho applet.

Phng thc stop() ch c gi khi user khng cn trang na, hoc trang c thu nh li di thanh taskbar.

K tip l phng thc destroy(). Phng thc ny gip applet dn dp trc khi n c gii phng khi vng nh, hoc trc khi truyt duyt kt thc. Phng thc ny c dng hu nhng lung (thread) hay qu trnh ang chy.

Phng thc destroy() khc vi phng thc finalize() l phng thc destroy() ch dng cho applet, trong khi finalize() l cch tng qut dn dp applet.

Phng thc paint() cng l mt phng thc quan trng khc. Phng thc ny cho php ta hin th mt ci g trn mn hnh. C th l text, ng thng, mu nn, hoc hnh nh. Phng thc ny xy ra nhiu ln trong sut qu trnh applet tn ti. Phng thc ny thc thi mt ln sau khi applet c khi to. N s lp i lp li khi di chuyn t ca s trnh duyt sang ca s khc. N cng xy ra khi ca s trnh duyt thay i v tr ca n trn mn hnh.

Phng thc paint() c mt tham s. Tham s ny l i tng ca lp Graphics. Lp Graphics thuc lp java.awt, chng ta phi import trong on code ca applet. Chng ta c th s dng on m sau:

import java.awt.Graphics;

V hnh
Lp Graphics c l c s dng nhiu nht trong Applet.
Java cung cp gi AWT cho php ta v cc hnh ho. Lp Graphics bao gm tp hp rt nhiu phng thc. Nhng phng thc ny c s dng v bt c hnh no trong cc hnh sau:

Oval Rectangle Square Circle Lines Text

Bn c th v nhng hnh ny bng bt c mu no. Frame, Applet v Canvas l cc mi trng hin th ho.

v bt c hnh nh no chng ta cn phi c nn ho (Graphical Background). c c mt nn ho, chng ta goi phng thc getGraphics() hay bt c phng thc no trong cc phng thc sau y:

repaint()

c gi khi cn v li nhng i tng v.

update(Graphics g)

c gi mt cch t ng bi phng thc repaint(). Phng thc ny s xo nhng i tng v, v truyn n cho i tng ca lp Graphics gi phng thc paint();

paint(Graphics g)

c gi bi phng thc update().

i tng c truyn cho phng thc ny c dng v. Phng thc ny dng v cc hnh nh ho khc nhau.

Vic gi phng thc paint() lp i lp li thng qua phng thc repaint() s xo i cc hnh v trc . v cc hnh mi m vn gi li nhng hnh v trc , chng ta cn override li phng thc update().

public void update (Graphics g) { paint (g); }

y, phng thc update() s khng xo nhng i tng v, nhng ch gi phng thc paint(). lm c iu ny, n truyn i tng ca lp Graphics hoc GraphicsContext cho phng thc paint(). y, i tng ca lp Graphics l g.

V cc chui, cc k t v cc byte

y l cc chng trnh mu: V chui V PolyLine


V a gic

Phn ny thc s khng c g kh c, bn ch cn p dng ng method m thi. V d phng thc v chui, nm na l vit mt dng ch ln mn hnh drawChars() Bn cn ch :

Mng cc k t. V tr bt u, ni cc k t c v. S cc k t cn c v. To X, ni cc k t cn c v. To Y, ni cc k t cn c v.

y l c php chung ca drawChars() drawChars (char array[], int offset, int length, int xCoor, int yCoor); a phn cc method khc c dng tng t, ngha l c tham s v ta v, di rng... V ng thng (Line) v Oval

Sau y l c php ca cc phng thc c s dng v ng thng v hnh oval:

drawLine (int x1, int y1, int x2, int y2); drawOval (int xCoor, int yCoor, int width, int height); setColor (Color c); fillOval (int xCoor, int yCoor, int width, int height);

Phng thc drawLine() nhn cc tham s sau:

To To To To

X, ni bt u v (x1). Y, ni bt u v (y1). X, ni kt thc v (x2). Y, ni kt thc v (y2).

Phng thc ny bt u v ti to x1 v y1, v kt thc ti to x2 v y2. v nhng ng thng c mu, chng ta thit lp mt mu no . Phng thc setColor dng thit lp mu cho hnh nh ho. Trong chng trnh ny, chng ta s dng cu lnh sau chn mu xanh:

g.setColor (Color.blue);

Phng thc drawOval() nhn 4 thng s sau:

To X. To Y. Chiu rng ca hnh Oval. Chiu cao ca hnh Oval.

i vi hnh oval rng, th gi tr ca chiu rng ln hn chiu cao, v ngc li i vi hnh oval cao.

Phng thc fillOval() nhn 4 thng s, nhng n s t hnh oval. S dng phng thc setColor t mu t.

g.setColor(Color.cyan);

y, hnh oval s c t vi mu cyan. Lp Color cung cp cc mu khc nhau m h thng c h tr. V hnh ch nht (Rectangle) v hnh ch nht bo gc (Rounded Rectangle)

Sau y l c php ca cc phng thc c dng v hnh ch nht v hnh ch nht bo gc:

drawRect (int xCoor, int yCoor, int width, int height); fillRect (int xCoor, int yCoor, int width, int height); drawRoundRect (int xCoor, int yCoor, int width, int height, int arcwidth, int archeight); fillRoundRect (int xCoor, int yCoor, int width, int height, int arcwidth, int archeight);

Phng thc drawRect() c dng v hnh ch nht n gin. Phng thc ny nhn 4 tham s sau:

To X ca gc trn bn tri To Y ca gc trn bn tri Chiu rng ca hnh ch nht Chiu cao ca hnh ch nht

Phng thc ny v hnh ch nht c chiu rng v chiu cao cho trc, bt u ti to X, Y. Chng ta c th thit lp mu ca hnh ch nht. y, chng ta chn mu . Cu lnh s nh sau:

g.setColor (Color.red);

Phng thc drawRoundRect() v hnh ch nht c cc gc trn. Phng thc ny nhn 6 tham s, trong 4 tham s u th ging vi phng thc drawRect. Hai tham s khc l:

arcwidth ca hnh ch nht archeight ca hnh ch nht

y, arcwidth lm trn gc tri v gc phi ca hnh ch nht. archeight lm trn gc trn nh v gc y ca hnh ch nht. V d, arcwidth = 20 c ngha l hnh ch nht c lm trn cnh tri v cnh phi mi cnh 10 pixel. Tng t, archeight = 40 s to ra hnh ch nht c lm trn t nh n y 20 pixel.

Pxel l n v o. N l n v nh nht trong vng v.

t hay v hnh ch nht v hnh ch nht bo gc, chng ta s dng phng thc fillRect() v fillRoundRect(). Nhng phng thc ny nhn cc tham s ging vi phng thc drawRect() v drawRoundRect(). Nhng phng thc ny v cc hnh nh vi mt mu cho trc hoc mi mu hin hnh. Lnh sau dng v hnh vi mu xanh:

g.setColor(Color.green); V hnh ch nht 3D v v hnh cung (Arc)

Sau y l c php ca cc phng thc dng v hnh ch nht 3D v hnh cung:

draw3Drect (int xCoord, int yCoord, int width, int height, boolean raised); drawArc(int xCoord, int yCoord, int width, int height, int arcwidth, int archeight); fillArc(int xCoord, int yCoord, int width, int height, int arcwidth, int archeight);

Phng thc draw3Drect() nhn 5 tham s. 4 tham s u th tng t vi phng thc v hnh ch nht. Tuy nhin, gi tr ca tham s th 5 quyt nh l hnh ch ny ny c 3 chiu hay khng. Tham s th 5 c kiu d liu l boolean. Gi tr ny True c ngha l hnh ch nht l 3D.

Phng thc drawArc() nhn 6 tham s sau:

To x To y Chiu rng ca cung c v. Chiu cao ca cung c v. Gc bt u. rng ca cung (gc ca cung) so vi gc ban u.

Phng thc fillArc() cng nhn 6 tham s ging nh phng thc drawArc(), nhng n v cung v t cung vi mu hin thi.

V hnh PolyLine Chng trnh sau ly cc im t hai mng v mt lot cc ng thng.

C php ca phng thc ny nh sau:

drawPolyline (int xArray[], int yArray[], int totalPoints); g.setFont (new Font(Times Roman, Font.BOLD, 15));

Phng thc drawPolyline() nhn 3 tham s sau:

Mng lu tr to x ca cc im. Mng lu tr to y ca cc im. Tng s im cn v.

v cc ng thng ta ly cc im t hai mng nh sau:

(array1[0], array2[0]) (array1[1], array2[1]) (array1[2], array2[2]) .

S ng thng v c lun nh hn s truyn vo thng s th 3 ca phng thc drawPolyline(). V d nh: totalPoints - 1 V v t a gic (Polygon) Lp Graphics cung cp hai phng thc v a gic. Phng thc u tin nhn mt i tng ca lp Polygon. Phng thc thc 2 ly hai mng im, v tng s im cn v. Chng ta s s dng phng thc 2 v a gic.

C php ca drawPolygon() nh sau: drawPolygon(int x[], int y[], int numPoints);

C php ca fillPolygon() nh sau: fillPolygon (int x[], int y[], int numPoints);

iu khin mu
Trong lp trnh ni chung cng nh trong Java, chng ta iu khin mu bng cch dng 3 mu chnh l (red), xanh l cy (green), xanh dng (blue). Java s dng m hnh muRGB. i tng ca lp Color cha 3 s nguyn cho cc tham s red, green, blue. Bng sau trnh by gi tr c th c ca cc mu :

Thnh phn Red Green Blue

Phmvi 0-255 0-255 0-255

S dng cc gi tr trn to ra mt mu tu thch. C php ca hm dng to ra mt mu nh sau: color (int red, int green, int blue);

Bng sau hin th cc gi tr ca cc mu thng gp:

Mu White

Red Green Blue 255 255 255 192 128 64 0 175 0 0 255

Light Gray 192 192 Gray Dark Gray Black Pink Orange Yellow Magenta 128 128 64 0 64 0

255 175 255 200 255 255 255 0

Cc i tng mu khc nhau c th c to bng nhng gi tr ny. Nhng i ny c th c dng v hoc t cc i tng ho. V d, to mu hng, ta dng lnh sau:

color c = new Color (255, 175, 175);

Ta c th thit lp mu bng cch dng lnh sau:

g.setColor (c); //g l i tng ca lp Graphics

S dng kt hp cc gi tr RGB to ra mt mu tu . cho d hn, lp Color cung cp sn mt s mu.

color.white color.orange

color.black color.gray

color.lightgray color.darkgray color.red color.blue color.cyan color.yellow color.green color.pink color.magenta

on m sau minh ho cch to mt mu tu :

Color color1 = new Color (230, 140, 60); Color color4 = new Color (90, 210, 130); g.setColor (color1); int myred = color1.getRed (); int mygreen = color1.getGreen (); int myblue = color1.getBlue();

color1 = color1.darker(); color4 = color4.brighter();

iu khin Font
Java cung cp lp Font trong gi java.awt cho php s dng cc loi font khc nhau. Lp ny bao gm mt s phng thc. s dng font, chng ta nn kim tra xem h thng c h tr hay khng. Phng thcgetAllFont() tr v tt c cc font m h thng h tr. Trc tin, khai bo mt i tng ca lp GraphicsEnvironment nh sau: GraphicsEnvironment ge; ge = GraphicsEnvironment.getLocalGraphicsEnvironment (); i tng ny s dng c php sau ly tt c cc font c trong mng Font: Font f[] = ge.getAllFonts(); Phng thc getAllFont() c s dng y. Phng thc getAllFonts() thuc lp GraphicsEnvironment. y l lp tru tng, do ta khng th khi to lp ny. truy cp phng thc getAllFont(), chng ta s dng phng thc getLoacalGraphicsEnvironment() ca lp GraphicsEnvironment. ge = GraphicsEnvironment.getLocalGraphicsEnvironment (); Tham chiu n lp ny c gn cho bin ge. Bin ny gi phng thc getAllFont(). Chng ta s dng cc font khc nhau hin th cc chui khc nhau. Phng thc getFont() tr v font mc nh dng hin th chui, khi khng c chn font no c. Font defaultFont = g.getFont (); //g l i tng Graphics

g.drawString (Default Font is , 30, 50); Dialog l font mc nh ca h thng. thay i font mc nh ca h thng thnh font khc, chng ta to i tng ca lp Font. Phng thc khi to ca Font c 3 tham s sau:

Tn ca font. Ta c th ly tn thng qua phng thc getFontList(). Kiu ca font. V d: Font.BOLD, Font.PLAIN, Font.ITALIC. Kch thc font.

C php sau minh ho nhng thng s trn: Font f1 = new Font (SansSerif, Font.ITALIC, 16); g.setFont (f1); Ba tham s c truyn y l: SanSerif tn ca font, Font.BOLD kiu font, 14 l kch thc ca font. Nhng thng s ny to ra i tng f1. Chng ta c th kt hp 2 kiu font li vi nhau. Hy xt v d sau: Font f3 = new Font (Monospaced, Font.ITALIC+Font.BOLD, 20); y kiu font ca f3 va m, va nghing.

Chn ch (mode) v
Cc i tng c v bng cch s dng mode v. Khi mt i tng mi c v, n s ln cc hnh v trc y. Tng t, khi cc i tng c v i v li nhiu ln th chng s xo cc i tng v trc . Ch hin th ni dung ca i tng mi. lm cho ni dung c v ni dung mi u hin th trn cng nn, lp Graphics cung cp phng thc setXORMode (Color c); Bn vo y tham kho code.

y, chng ta s dng phng thc setXORMode() t cc hnh ho khc nhau, m khng ln cc hnh khc. Kt qu l, khi s dng mode XOR th hin nhin l tt c cc hnh u hin th y . iu ny c ngha l cc hnh mi khng ln cc hnh c. Thay vo , phn chung gia cc hnh s c hin th thnh mt mu khc. Nhng khi khng s dng mode XOR, hnh mi hon ton che khut nhng hnh trc .

Canvas trong Java


Cng nh khi bn v mt bc hnh, bn cn phi c giy v. Chuyn nghip hn th bn phi c vi v. Giy hay vi chnh l Canvas. Ni chnh xc th Canvas l mt Component c hnh dng hnh ch nht v "trng tinh" bn c th v vi ln . Bn c th v ln Frame, Applet hay Canvas. ng dng ca bn mun v "ci g " ln Canvas th phi l subclass ca lp Canvas. Bn cn nh phi lm sao c mt subclass khng? Ch cn dng t kha extends thi. Bn cng lu n method paint(Graphics graphics). Chng ta dng phng thc ny, ni chnh xc hn l overriden phng thc ny trong cc ng dng v bt c ci g ln

ccComponent. Ni tm li, mun v vi ci g, bn overriden phng thc paint(Graphics graphics). Cn v ln ci g th ty thuc yu cu ca ng dng. Nh di y l v ln Canvas th ta s extends Canvas to mt subclass ca Canvas ri "ch bin" paint() v. Trong cc v d trc khi bn extends Applet th bn dng paint() v ln Applet. y l b khung bn to mt ng dng Canvas

import java.awt.*; public class MyCanvas extends Canvas { public MyCanvas() { //... } public void paint(Graphics g) { /* We override the method here. The graphics * code comes here within the method body. */ } } Khng c g qu kh hiu. Chng ta th v vi mt cht. Bn vo Eclipse to mt class mi tn l MyCanvas. Sau bn copy v paste on code trn vo lm b khung. V vi thm my ch nh sau:

import java.awt.*; public class MyCanvas extends Canvas { public MyCanvas() { //...

setBackground (Color.yellow); } public void paint(Graphics g) { /* We override the method here. The graphics * code comes here within the method body. */ g.drawString ("Good Morning", 50, 50); g.drawString ("Good Afternoon", 50, 75); g.drawString ("Good Night", 50, 100); } } Save li v chy th. Khng c g xy ra c, khng thy ch ngha no c?? L do l v MyCanvas ca chng ta khng phi ng cng khng phi khoai. N cha l mt Application, cng khng phi l Applet. Bn cn to mt Applet hay mt Application, sau to mt Object t MyCanvas. Cui cng dng c php add t Canvas Object vo Applet hay Application. Bn c th vit chung trong mt File. Tuy nhin d hiu chng ta tch ring ra. Bn to mt class mi tn l CanvasApplet (Nh l chng ta vn ang s dng Packet AppletPro1 t u n gi) Sau cc bc sau l rt n gin.

import java.applet.*; import java.awt.*; public class CanvasApplet extends Applet{ MyCanvas canvas; public void init() { setLayout(new BorderLayout()); canvas = new MyCanvas(); add("Center", canvas); } } Ch xin bn lu l bin canvas phi ngoi. Nu bn sa li nh sau th bn s khng thy g c: import java.applet.*; import java.awt.*; public class CanvasApplet extends Applet{ public void init() { setLayout(new BorderLayout()); MyCanvas canvas = new MyCanvas(); add("Center", canvas); } } Tm li bn dng Canvas cng nh Button hay Label...m thi. Mun v g bn c v ln Canvas.

Sau t n vo Applet.

Hnh chuyn ng trong Java


Ni chung chng ta s s dng khi nim Thread to cc chuyn ng trong ng dng Java. Chng ta s bn k v Thread trong phn sau. Phn ny chng ta s ch xt mt v d n gin. Bn tham kho code y. Trong v d ny kt qu s l mt ci tng t nh mt Digital Clock. Ni cho oai vy thi, n gin l ci "ng h" ca chng ta s chy "v v": 1-2-3-4-5....... Bn m Eclipse, to mt class mi v t tn l ThreadApplet. Copy v paste code trn vo, save li v chy th. Bn c th va ang dng IE lt web, ng thi cng ang lng nghe mt giai iu no t chng trnh Windows Media Player Mi vic c th coi nh mt Task. V v d a ti khi nim Multitasking, cng mt lc chy nhiu chng trnh. C l bn tng nghe "Windows l h iu hnh a nhim" Ngoi ra khi bn dng Microsoft Word chng hn, bn va nhp vn bn, ng thi bn thn chng trnh cng ang kim tra li chnh t. V d ny a n khi nim Multithreading. Mt chng trnh cng mt lc chy nhiu tc v, mi tc v l mt Thread. Mt chng trnh Java c th c nhiu Thread. Ngha l trong mt chng trnh, c th c nhiu tc v cng xy

ra mt lc. Chng ta s bn tip trong phn sau.

Hnh chuyn ng trong Java phn 2


V sao dng Thread th chng ta c th v c nhng hnh chuyn ng trong Java? Tht ra bn thn Thread l mt tc v, mt lung thc thi m thi. V d chy t A n B, hay m t 1 n 1000...V l mt tc v ca my tnh tnh nn n thc hin "ci v". Ch nhy mt l xong. V d ta bt "n" v cc s t 1 n 1000 chng hn, n s v "rt rt" nhanh n mc ta cha kp hon hn th thy s 1000 ri. Mu cht ta c th thy "chuyn ng" l ta phi bt n chy chm li. Ni c th trong vic v mt ci xe chy t A n B. Bn s lm nh sau: 1. 2. 3. 4. Qui nh cho thread v ci xe ti mt s im t Ti mi im cho ci xe tm ngng mt ng thi vi buc 2, ta cng xa hnh v Tip tc cho ti im B.

A n B. thng c th thy kp. bc 1.

Thc s Thread khng v c. Mun v vi g ta s phi qui nh trong phng thc run() ca Thread. Quay li v d ca chng ta. Chng ta mun v cc s t 1 n 1000, c ht s 1 ta s xa v v s 2, tip theo xa s 2 v v s 3...

v-xa-v-xa....ta dng vng lp while v phng thc repaint().

while bit ci g s v tip theo repaint() xa v v li.

kp nhn thnh qu, ta phi cho Thread tm ngh mi ln repaint(). Ta s x dng phng thc sleep() v qui nh thi gian cho Thread "ng" Bn th thay con s trong sleep(). Nu bn thay bng 1000 th n s l ci ng h ang m tng giy mt. S cng ln th Thread "ng" cng lu. Trong v d, chng ta thy hai ci mi: 1. 2. Thread Try-Catch

Chng ta s bn trong phn sau.

Exception Handling
Exception l mt loi li c bit. Li ny xut hin vo lc thc thi chng trnh. Cc trng thi khng bnh thng xy ra trong khi thi hnh chng trnh to ra cc exception. Nhng trng thi ny khng c bit trc trong khi ta ang xy dng chng trnh. Nu bn khng x l cc trng thi ny th chng trnh c th b kt thc t ngt. V d, vic chia cho 0 s to mt li trong chng trnh. Ngn ng Java cung cp c ch dng x l ngoi l rt hiu qu. Vic x l ny lm hn ch ti a trng hp h thng b hng (crash) hay h thng b ngt t ngt. Tnh nng ny lm cho Java tr thnh mt ngn ng lp trnh mnh. Mc ch ca vic x l ngoi l

Mt chng trnh nn c c ch x l ngoi l thch hp. Nu khng, chng trnh s b ngt khi mt ngoi l xy ra. Trong trng hp , tt c cc ngun ti nguyn m h thng cp khng c gii phng. iu ny gy lng ph ti nguyn. trnh trng hp ny, tt c cc ngun ti nguyn m h thng cp nn c thu hi li. Tin trnh ny i hi c ch x l ngoi l thch hp. V d, xt thao tc vo ra (I/O) trong mt tp tin. Nu vic chuyn i kiu d liu khng thc hin ng, mt ngoi l s xy ra v chng trnh b hy m khng ng tp tin li. Lc tp tin d b h hi v cc ngun ti nguyn c cp pht cho tp tin khng c tr li cho h thng. X l ngoi l Khi mt ngoi l xy ra, i tng (object) tng ng vi ngoi l c to ra. i tng ny sau c truyn cho phng thc l ni m ngoi l xy ra. i tng ny cha thng tin chi tit v ngoi l. Thng tin ny c th c nhn v v c x l. Cc mi trng runtime nh 'IllegalAccessException', 'EmptyStackException' v.v c th to ra ngoi l. Chng trnh i khi c th t to ra ngoi l. Lp 'Throwable' c Java cung cp l lp trn cng ca lp Exception (lp u tin trong cy tha k), lp ny l lp cha ca tt c cc ngoi l khc. M hnh x l ngoi l Trong Java, m hnh x l ngoi l gim st vic thc thi m pht hin ngoi l. M hnh x l ngoi l ca Java c gi l 'catch and throw'. Trong m hnh ny, khi mt ngoi l xy ra, ngoi l s b chn v chng trnh

chuyn n mt khi x l ngoi l. Ngi lp trnh phi x l cc ngoi l khc nhau c th pht sinh trong chng trnh. Cc ngoi l phi c x l, hoc thot khi chng trnh khi n xy ra. Ngn ng Java cung cp 5 t kho sau x l cc ngoi l: 1. 2. 3. 4. 5. try catch throw throws finally

Di y l cu trc ca m hnh x l ngoi l: try { // on m c kh nng gy ra ngoi l } catch(Exception e1) { // Nu cc lnh trong khi 'try' to ra ngoi l c loi e1, th thc hin //x l ngoi l nu khng chuyn xung khi 'catch' tip theo } catch(Exception e2)

{ // Nu cc lnh trong khi 'try' to ra ngoi l c loi e2, th thc hin //x l ngoi l nu khng chuyn xung khi 'catch' tip theo

} catch(Exception eN) { // Nu cc lnh trong khi 'try' to ra ngoi l c loi eN, th thc hin //x l ngoi l nu khng chuyn xung khi 'catch' tip theo

} finally { // khi lnh nay lun c thc hin cho d ngoi l c xy ra hay khng. } Cc u im ca m hnh 'catch v throw' M hnh 'catch v throw' c hai u im: * Ngi lp trnh ch phi x l ngoi l khi cn thit. Khng cn phi thc hin ti mi mc. * Thng bo li c th c hin ra khi tin hnh x l

ngoi l.

Cc khi 'try' v 'catch' Khi 'try-catch' c s dng thi hnh m hnh 'catch v throw' ca vic x l ngoi l. Khi 'try' cha mt tp lnh c th thi hnh c. Cc ngoi l c th b chn khi thi hnh tp lnh ny. Phng thc c kh nng to ra ngoi l c th c khai bo trong khi 'try'. Mt hay nhiu khi 'catch' c th theo sau mt khi 'try'. Cc khi 'catch' ny bt cc ngoi l c kh nng to ra trong trong khi 'try'. Hy xem khi 'try' di y: try { doFileProcessing(); // phng thc do ngi s dng nh ngha displayResults(); } catch (Exeption e) // th hin ca ngoi l { System.err.println(Error : + e.toString()); e.printStackTrace(); } y, 'e' l i tng ca lp 'Exception'. Chng ta c th s dng i tng ny in cc chi tit v ngoi l. Cc

phng thc 'toString' v 'printStackTrace' c s dng m t cc ngoi l xy ra. x l c ngoi l no, ta phi ch ra kiu ngoi l tng ng. catch(Exception e) Khi ngoi l khng bit thuc kiu no, chng ta c th s dng lp 'Exception' bt ngoi l . Khi 'catch()' bt gi bt c cc li xy ra trong khi thi hnh phng thc 'doFileProcessing' hay 'display'. Nu mt li xy ra trong khi thi hnh phng thc 'doFileProcessing()', lc phng thc 'displayResults()' s khng bao gi c gi. Chng trnh s chuyn n thc hin khi 'catch'. c nhiu lp x l li hn, nh l 'LookupException' thay v mt i tng ngoi l chung (Exception e), li thc t c th l mt i tng thuc lp 'LookupException' hay mt trong s nhng lp con ca n. Li s c truyn qua khi 'try catch' cho ti khi gp 'catch' ca n, nu khng tm thy chng trnh phi dng thc hin v thot. Cc khi cha nhiu Catch Nhiu khi 'catch' x l cc loi ngoi l khc nhau mt cch c lp. Chng c lit k trong on m sau: try { doFileProcessing();

displayResults(); } catch(LookupException e) // e LookupException object { handleLookupException(e); // phng thc x l li do ngi s dng //nh ngha } catch(Exception e) { System.err.println(Error: + e.printStackTrace()); } } Trong trng hp ny, khi 'catch' u tin s bt gi mt 'LockupException'. Khi 'catch' th hai s x l kiu ngoi l khc vi khi 'catch' th nht. Mt chng trnh cng c th cha cc khi 'try' lng nhau. V d on m di y: try { statement 1; statement 2;

try { statement1; statement2; } catch(Exception e) // ca khi try trong { } } catch(Exception e) // ca khi try ngoi { } Khi s dng cc 'try' lng nhau, khi 'try' bn trong c thi hnh u tin. Bt k ngoi l no b chn trong khi 'try' s b bt gi trong cc khi 'catch' theo sau. Nu khi 'catch' thch hp khng c tm thy th cc khi 'catch' ca cc khi 'try' bn ngoi s c xem xt. Nu khng, Java Runtime Environment x l cc ngoi l. Khi 'finally' Khi mt ngoi l xut hin, phng thc ang c thc thi c th b dng m khng c hon thnh. Nu iu ny xy ra, th cc on m pha sau (v d nh on m

c chc nng thu hi ti nguyn, nh cc lnh ng tp vit cui phng thc) s khng bao gi c gi. Java cung cp khi 'finally' gii quyt vic ny. Khi 'finally' thc hin tt c cc vic thu dn khi mt ngoi l xy ra. Khi ny c th c s dng kt hp vi khi 'try'. Khi 'finally' cha cc cu lnh thu hi ti nguyn v cho h thng hay lnh in ra cc cu thng bo. Cc lnh ny bao gm:

ng tp tin. ng ResultSet (c s dng trong chng trnh c s d liu). ng li cc kt ni c to trong c s d liu.

try { doSomethingThatMightThrowAnException(); } finally { cleanup(); } Phng thc 'cleanup()' c gi nu phng thc 'doSomethingThatMightThrowAnException()' gy ra ngoi l. Mt khc 'cleanup()' cng c gi ngay khi khng c ngoi l no xy ra v thc hin tip phn sau khi lnh

'finally'. Khi 'finally' l tu , khng bt buc. Khi ny c t sau khi 'catch' cui cng. Chng trnh s thc thi cu lnh u tin ca khi 'finally' ngay sau khi gp cu lnh 'return' hay lnh 'break' trong khi 'try'. Khi 'finally' bo m lc no cng c thc thi, bt chp c ngoi l xy ra hay khng.

Exception Handling phn 2


Cc ngoi l c nh ngha vi lnh 'throw' v 'throws' Cc ngoi l c th c to ra bng cch s dng t kho 'throw'. T kha 'throw' ch ra mt ngoi l va xy ra. Ton hng ca throw l mt i tng thuc lp c tha k t 'Throwable'. on lnh sau ch ra cch s dng ca lnh 'throw': try { if (flag<0) { throw new MyException(); // user-defined } }

Mt phng thc c th to ra nhiu ngoi l. lm c iu ny ny, ta ch cn lit k danh sch cc ngoi l m phng thc c th to ra trong phn nh ngha phng thc. Gi s rng phng thc 'x()' gi phng thc 'y()'. Phng thc 'y()' to ra mt ngoi l nhng khng c x l. Trong trng hp ny, phng thc gi 'x()' nn khai bo rng n c kh nng to ra ngoi l nh ngoi l ca phng thc c gi 'y()'. Ta nn khai bo khi 'try catch' trong phng thc x() m bo rng ngoi l khng c truyn cho cc phng thc m gi phng thc ny (phng thc gi x()). on m sau minh ha cch s dng ca t kho 'throws' to nhiu ngoi l: public class Example { // Cc ngoi l cch nhau bi du phy public void exceptionExample() throws ExException, LookupException { try { // cc lnh } catch(ExException exmp) {

} catch(LookupException lkpex) { } } } Trong v d trn, phng thc 'exceptionExample' c t kho 'throws'. T kho ny c theo sau bi danh sch cc ngoi l m phng thc ny c th to ra Trong trng hp ny l 'ExException' v 'LookupException'. Hm x l ngoi l cho cc phng thc ny nn khai bo cc khi 'catch' c th x l tt c cc ngoi l m cc phng c th gy ra. Lp 'Exception' thc thi giao din 'Throwable' v cung cp cc tnh nng lm vic vi ngoi l. N c ngha trong trng hp cc lp ngoi l c nh ngha bi ngi dng. lm iu ny, mt lp con ca lp Exception c to ra. u im ca vic tha k lp Exception l loi ngoi l mi ny c th c 'catch' c lp vi cc loi Throwable khc.
Bng sau y lit k mt s ngoi l:

Ngoi l RuntimeException ArthmeticException IllegalAccessException

Lp cha ca th t phn cp ngoi l Lp c s cho nhiu ngoi l java.lang Li v s hc, v d nh chia cho 0. Lp khng th truy cp.

IllegalArgumentException

i s khng hp l.

ArrayIndexOutOfBoundsExeption Li trn mng. NullPointerException SecurityException ClassNotFoundException NumberFormatException AWTException IOException FileNotFoundException EOFException NoSuchMethodException InterruptedException Khi truy cp i tng null. C ch bo mt khng cho php thc hin. Khng th np lp yu cu. Vic chuyn i t chui sang s thc khng thnh cng. Ngoi l v AWT Lp cha ca cc lp ngoi l I/O Khng th nh v tp tin Kt thc mt tp tin. Phng thc yu cu khng tn ti. Khi mt lung b ngt.

Multithreading v Multitasking
Trong phn trc chng ta dng Thread to s chuyn ng. Chng ta cng ni qua v Multithreading v Multitasking.Cn phn bit hai khi nim ny v rt hay ln ln

Multithreading cho php hai phn ca cng mt chng trnh chy ng thi. Multitasking thc thi hai hay nhiu tc nhim cng mt lc.

Ni tm li Multitasking lin quan n nhiu chng trnh, cn Multithreading lin quan n duy nht mt chng trnh.

Chng ta hin ti ch quan tm n Multithreading.Tc l nhiu tc v xy ra ng thi trongmt chng trnh. Thread Mt thread l mt phn hay mt tc v ca chng trnh ang chy. Hy tr v v d trnh x l vn bn xem cc thread c s dng nh th no. Hai phn ca trnh x l vn bn c quan tm: u tin l phn nhn cc k t nhp t bn phm, lu chng vo b nh, v hin th chng trn mn hnh. Phn th hai l phn cn li ca chng trnh nhm kim tra chnh t. Mi phn l mt thread thc thi c lp vi phn khc. Thm ch d chng l cng mt chng trnh. Trong khi mt thread nhn v x l cc k t c nhp t bn phm, thread khc ng. l, thread khc dng cho n khi CPU ngh. CPU thng ngh gia cc ln g phm. Vo khong thi gian ny, thread b kim tra chnh t ang ng thc dy tip tc kim tra chnh t ca ti liu. Thread b kim tra chnh t dng mt ln na khi k t k tip c nhp t bn phm. Ni ngn gn l mc d ni l trong Multithreading nhiu tc v xy ra ng thi nhng thc t l ln lt thay phin nhau. Mt thread c th l mt trong bn trng thi sau:

1. 2.

Running: mt thread ang c thc thi. Suspended: vic thc thi b tm dng v c

th phc hi ti thi im dng

3.

Blocked: mt ti nguyn khng th c

truy cp bi v n ang c s dng bi mt thread khc.


4.

Terminated: vic thc thi b ngng hn v

khng th phc hi.

S ng b ho Multithreading xy ra khng ng b, c ngha l mt thread thc thi c lp vi cc thread khc. Theo , mi thread khng ph thuc vo s thc thi ca cc thread khc. Thnh thong, vic thc thi ca mt thread c th ph thuc vo vic thc thi ca mt thread khc. Gi s bn c hai thread mt tp hp cc thng tin ng nhp v mt ci khc kim tra mt khu v ID ca ngi dng. Thread login phi ch thread validation hon tt x l trc khi n c th ni cho ngi dng vic ng nhp c thnh cng hay khng. V th c hai thread phi c thc thi ng b, khng c khng ng b. Java cho php cc thread ng b ha c nh ngha bi mt method ng b ho. Mt thread nm trong mt method ng b ha ngn bt k thread no khc t mt phng thc ng b ho khc gi trong cng mt i tng. Bn s hc chng trong phn sau ca chng ny. Interface (giao tip) Runnable v cc lp Thread C hai cch to Thread trong Java
1.

Implement Runnable V Extending Thread class(java.lang.Thread)

interface (java.lang.Runnable)
2.

Main thread Mi chng trnh Java lun c mt thread, thm ch nu bn khng to ra bt k thread no. Thread ny c gi l main thread bi v n l thread thc thi khi bn bt u chng trnh ca bn. Main thread sinh ra cc thread m bn to ra. Nhng thread gi l child thread. Main thread lun lun l thread cui cng kt thc vic thc thi bi v thng thng main thread cn gii phng ti nguyn c s dng bi chng trnh chng hn nh cc kt ni mng. Chng ta s tip tc trong phn sau.

Multithreading v Multitasking phn 2


Chng ta s tm hiu hai cch to Thread Implement Runnable interface (java.lang.Runnable) Bn vo y tham kho Runnable interface Nh bn thy ch c duy nht mt method m thi, l method run() y l dng c bn Class Mydemo implements Runnable { //Class definition public void run() { //process } } Cc cng on c th tm tt nh sau, bn hon ton c th dng cch khc khi quen thuc, y ch l tham kho:

1. 2. 3.

To mt lp implements Runnable interface. To mt lp khc, sau trong lp th hai ny Dng method start() bt u Object Thread

bn to mt Object ca lp th nht. mi to. Bn vo y tham kho code Bn m Eclipse ra. To mt class mi v t tn l RunnableExample N s rt n gin, nh tt c mi class khc, ch gm duy nht mt method main() m thi: public class RunnableExample { public static void main(String[] args) { } } Bn c th dng System.out.printl() in th mt dng ch ging nh trong chng trnh Hello World Tuy nhin chng ta mun to thread v chy th thread trong main(). Thread ca chng ta cng cc k n gin, khng lm g ngoi vic in ra mn hnh mt dng ch "tn ti l..." Chng ta dng dng cn bn trn to Thread. C hai cch: Bn to mt class mi bng cch click vo File-->New trong Eclipse Bn to mt class mi ngay trong RunnableExample.java nh th ny

public class RunnableExample { public static void main(String[] args) { } } class RunnableThread implements Runnable { public void run() { //Display info about this particular thread System.out.println(Thread.currentThread()); } } By gi ta s to hai Object t RunnableExample. Chng ta to 2 Object v mun theo di s khc nhau m thi. public class RunnableExample { public static void main(String[] args) { Thread thread1 = new Thread(new RunnableThread(), "thread1"); Thread thread2 = new Thread(new RunnableThread(), "thread2"); } } class RunnableThread implements Runnable { public void run() { //Display info about this particular thread System.out.println(Thread.currentThread()); } } By gi ta s cho Thread (tc l hai object ta va to) "chy" bng method start(). Method start() s gi method run()

public class RunnableExample { public static void main(String[] args) { Thread thread1 = new Thread(new RunnableThread(), "thread1"); Thread thread2 = new Thread(new RunnableThread(), "thread2"); //Start the threads thread1.start(); thread2.start(); } } class RunnableThread implements Runnable { public void run() { //Display info about this particular thread System.out.println(Thread.currentThread()); } } Bn s thy hai dng ch sau: Thread[thread2,5,main] Thread[thread1,5,main] Chng c g hay ho c! Mun to hai dng ch th cn g phi rc ri vy ch! Tuy nhin y l hai Thread. Bn c th cho mt ci "ng" mt ci "thc", hay mt ci chy nhanh mt ci chy chm. V d public class RunnableExample { public static void main(String[] args) {

Thread thread1 = new Thread(new RunnableThread(), "thread1"); Thread thread2 = new Thread(new RunnableThread(), "thread2"); //Start the threads thread1.start(); try { //delay for one second Thread.currentThread().sleep(1000); } catch (InterruptedException e) { } thread2.start(); } } class RunnableThread implements Runnable { public void run() { //Display info about this particular thread System.out.println(Thread.currentThread()); } } Khi chy th bn s thy s khc bit. Bn khng th lm c nh vy theo cch thng thng.

Multithreading v Multitasking phn 3


Chng ta tip tc vi cch th hai to mt Thread Extending lp Thread (java.lang.Thread) Bn vo y tham kho code Cc bc cng tng t nh khi bn implements Runnable interface, y ch bn tham kho, khi thnh tho bn s c th dng nhiu cch khc

u tin bn to mt subclass t Thread class Sau bn to mt class th hai. Trong class ny bn to ra cc object t class th nht. Cui cng dng method start() "chy" cc thread.

M Eclipse v to mt class mi, t tn l ThreadExample. Class ny cng nh class RunnableExample trong v d trc ngha l cng ch c method main() public class ThreadExample { public static void main(String[] args) { } } Tip theo bn to mt lp mi tn l XThread theo mt trong hai cch nh phn trc. Cng nh phn trc, bn lu l lp ny ch l class XThread....ch khng c public class... class XThread extends Thread { public void run() { //Display info about this particular thread System.out.println(Thread.currentThread().getNam e()); } } public class ThreadExample { public static void main(String[] args) { } } Tip tc to bn Object t XThread. Sau cho c bn

Thread "chy" bng method start() class XThread extends Thread { public void run() { //Display info about this particular thread System.out.println(Thread.currentThread().getName()); } } public class ThreadExample { public static void main(String[] args) { Thread thread1 = new Thread(new XThread(), "thread1"); Thread thread2 = new Thread(new XThread(), "thread2"); Thread thread3 = new XThread(); Thread thread4 = new XThread(); //Start the threads thread1.start(); thread2.start(); thread3.start(); thread4.start(); } } Bn s thy 4 dng nh sau: thread2 thread1 Thread-3 Thread-2 Khng c g c bit c? Tht ra hai Thread 3 v 4 c

gn tn mc nh (Default) Bn c th dng try-catch th ging nh phn trc. Bn nn k tha class Thread nu nh bn cn override nhng method khc c nh ngha trong class Thread.

Multithreading v Multitasking phn 4


Nh trong cc phn trc tho lun, nu mun Thread no i chm li th ta cho n tm "ng" bng method sleep(). Tuy nhin i lc ta c nhng nhu cu khc m sleep() khng th p ng c. S dng isAlive() v join() Thng thng, main thread l thread cui cng kt thc trong mt chng trnh. Tuy nhin, khng phi l bo m khng c nhng trng hp, main thread s kt thc trc khi mt child thread kt thc. Chng ta dng sleep() iu khin "tc " ca cc Thread. Tuy nhin nu khong thi gian c lng qu ngn, mt child thread c th kt thc sau khi main thread kt thc. V th, k thut sleep khng phi l cch tt nht bo m rng main thread kt thc cui cng. Cc lp trnh vin s dng hai cch khc xc nh rng main thread l thread cui cng kt thc. Nhng k thut ny bao gm vic gi method isAlive() v method join(). C hai method ny u c nh ngha trong class Thread. Method isAlive() xc nh cn method no ang chy hay khng. Nu cn, isAlive() tr v gi tr Boolean true. Ngc li, Boolean false c tr v. Bn s dng method isAlive() xc nh cn child method no tip tc chy hay khng. Method join() ch cho n khi child thread kt thc v "kt ni" main thread. Ngoi ra, bn c th s dng method join() xc nh lng thi gian m bn mun ch mt child thread kt thc.

y l hnh nh minh ha vng i ca mt Thread

Thc cht vic ng dng Thread trong vic to chuyn ng trong cc Applet chng hn ch l mt ng dng nh. Multithreading rt hu dng trong cc ng dng loi Application. Tuy nhin thi im hin ti chng ta tm thi ch tho lun mt vi nt chnh nh vy thi.

Hnh chuyn ng- AnimatorApplet


Chng ta s tip tc vi mt v d na v Animator. Bn vo y tham kho code. Trc ht bn m Eclipse v to mt lp mi, t tn l AnimatorApplet. Xin nhc li l chng ta vn ang to nhng lp mi trong Package AppletPro1 c trc y. Vic ny ch v chng ta khng mun mi ln li phi to mt Package mi m thi. Bn cng s d qun l hn. Tuy nhin nu thch bn vn c th to mt Package mi, sau to lp AnimatorApplet trong Package . Chng ta s to mt Applet nn bn s lm mt ng tc quen thuc l extends Applet.

Chng ta cng implements Runnable to mt Thread. Thm na trong Applet ny chng ta s x l s kin nn bn cn import java.awt.event.*; Khi implements Runnable bn s phi khai bo method run(). Chng ta cng s cn thm mm mui cho cc method ca Applet l init()-start()-stop(), nn chng ta cng s vit trc nhng method . Vy l chng ta s c mt ci khung cn bn nh sau import java.awt.*; import java.awt.event.*; import java.applet.Applet; public class AnimatorApplet extends Applet implements Runnable { public void init() { } public void start() { } public void stop() { } public void run() { } }

Chng ta s phi to mt Thread v Thread ny s v cc s tng t nh ThreadApplet trong phn trc.

Chng ta cng s cho Thread tm ng mt thng kp thy s thay i. Cui cng chng ta s x l khi click chut vo Applet th dng ch ang chy s dng li.

Bt u vi Thread. Ta s khai bo mt Thread mi, t tn l Thread animatorThread; Sau cho n "chy" trong method start() Tuy nhin, trc khi vit code tng t nh phn trc, hy ch l ng dng ca chng ta khng chy lin tc t u n cui m s dng li khi ai click chut ln Applet. Nu mun Thread "chy" li th cn phi click li ln Applet. Chnh v vy ta s c code nh sau. import java.awt.*; import java.awt.event.*; import java.applet.Applet; public class AnimatorApplet extends Applet implements Runnable { Thread animatorThread; public void init() { } public void start() { if (animatorThread == null) {

animatorThread = new Thread(this); } animatorThread.start(); } public void stop() { } public void run() { } } Tip theo, cng tng t nh ThreadApplet, chng ta s dng vng lp while to ra cc s v dng sleep() tm ngng. Tuy nhin trong ng dng ny chng ta khng dng String m dng bin int. Bn hon ton c th "ch bin" li ThreadApplet c kt qu tng t, chng ta ch c gng th dng nhiu cch m thi. Quay li vic to s, chng ta s dng mt bin int: int frameNumber Chng ta cng s vit thm phng thc paint() th chy Applet Code ca chng ta s nh sau import java.awt.*; import java.awt.event.*; import java.applet.Applet; public class AnimatorApplet extends Applet implements

Runnable { Thread animatorThread; int frameNumber = -1; public void init() { } public void start() { if (animatorThread == null) { animatorThread = new Thread(this); } animatorThread.start(); } public void stop() { } public void run() { Thread currentThread = Thread.currentThread(); while (currentThread == animatorThread) { frameNumber++; repaint(); try { animatorThread.sleep(100); } catch (InterruptedException e) { } } } public void paint(Graphics g) { g.drawString("Frame " + frameNumber, 0, 30);

} } Save li v chy th, bn s thy "ng h" hot ng

Hnh chuyn ng- AnimatorApplet phn 2


Chng ta tip tc vi AnimatorApplet. Trc ht l method stop(). ngng Thread, chng ta s dng animatorThread = null; Tip theo l x l s kin click chut. Chng ta cn mt bin bit Applet ang trong trng thi no: Thread ang chy hay ang ngng? Ta s khai bo bin theo kiu boolean: boolean frozen = false; frozen == false: Thread ang ngng frozen == true: Thread ang chy Ta s x l theo nguyn tc: Nu khi click chut m frozen == false th gi stop() dng Thread li, ng thi cho frozen=true. Nu khi click chut m frozen == true th gi start() cho Thread chy, ng thi cho frozen=false. Gi y code ca chng ta s nh sau import java.awt.*; import java.awt.event.*; import java.applet.Applet; public class AnimatorApplet extends Applet implements Runnable { Thread animatorThread;

int frameNumber = -1; boolean frozen = false; public void init() { addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { if (frozen) { frozen = false; start(); } else { frozen = true; stop(); } } }); } public void start() { if (animatorThread == null) { animatorThread = new Thread(this); } animatorThread.start(); } public void stop() { animatorThread = null; } public void run() { Thread currentThread = Thread.currentThread(); while (currentThread == animatorThread) { frameNumber++; repaint(); try { animatorThread.sleep(100); }

catch (InterruptedException e) { } } } public void paint(Graphics g) { g.drawString("Frame " + frameNumber, 0, 30); } } Gi y nu Save li v chy th, bn s thy kt qu hon ton ging vi v d tham kho. Cc phn khc c l khng qu kh hiu.

I/O Streams phn 1


Lung l mt "dng chy" ca d liu c gn vi cc thit b vo ra. C hai loi lung:
1.

Lung nhp: Gn vi cc thit b nhp nh bn Lung xut: Gn vi cc thit b xut nh mn

phm, my scan, file...


2.

hnh, my in, file... Nu c mt li xy ra khi c hay ghi lung, mt IOexception c kch hot. Do vy, cc cu lnh lung phi bao gm khi try-catch. Lp 'java.lang.System' nh ngha cc lung nhp v xut chun. chng l cc lp chnh ca cc lung byte m java cung cp. Chng ta cng s dng cc lung xut xut d liu v hin th kt qu trn mn hnh.

Lung I/O bao gm: Lp System.out: Lung xut chun dng hin th kt qu trn mn hnh. Lp System.in: Lung nhp chun thng n t bn phm v c dng c cc k t d liu. Lp System.err: y l lung li chun. Chng trnh c trn lung nhp ly d liu t thit b nhp, ghi vo lung xut a d liu ra thit b xut

Cc lung c bn Lung byte: L dng chy cc byte


InputStream: Lung nhp byte c bn OutputStream: Lung xut byte c bn

Lung k t: L dng chy cc k t (char)


Reader: Lung nhp k t c bn Writer: Lung xut k t c bn

Cc lp 'InputStream' v 'OutputStream' cung cp nhiu kh nng I/O khc nhau. C hai lp ny c cc lp con thc hin I/O thng qua cc vng m b nh, cc tp tin v ng dn. Cc lp con ca lp InputStream thc hin u vo, trong khi cc lp con ca lp OutputStream thc hin kt xut.

I/O Streams phn 2


Lp InputStream

Lp InputStream l mt lp tru tng. N nh ngha cch nhn d liu. im quan trng khng nm ch d liu t u, m l n c th truy cp. Lp InputStream cung cp mt s phng php c v dng cc lung d liu lm u vo. Cc phng thc ny gip ta to, c v x l cc lung u vo. Mt s phng thc ca InputStream abstract int read() throws IOException c mt byte t lung. Nu cui lung s tr v -1 int read(byte[] b) throws IOException c mt dy byte t lung voidclose() throws IOException ng lung nhp intavailable() throws IOException Tr v s byte c th c tip longskip(longn) throws IOException B qua n byte

Lp OutputStream Lp OutputStream cng l lp tru tng. N nh ngha cch ghi cc kt xut n lung. N cung cp tp cc phng thc tr gip to ra, ghi v x l kt xut cc lung. Mt s phng thc ca OutputStream abstractvoid write(intb) throws IOException Ghi mt byte ra lung voidwrite(byte[]b) throws IOException Ghi mt dy byte ra lung

voidclose() throws IOException ng lung voidflush() throws IOException Dn xut lung

I/O Streams phn 3


Cc lung File c s dng xut nhp vifile. Lung nhp t file:FileInputStream FileInputStream(Stringname) FileInputStream(Filef) Lung xut ra file:FileOutputStream FileOutputStream(Stringname) FileOutputStream(Filef) FileOutputStream(String name, boolean append) Phng thc nhp/xut ca cc lung file ging nh ca cc lung nhp xut c bn Java h tr cc tc v nhp v xut tp tin vi s tr gip cc lp sau y:

File FileDescriptor FileInputStream FileOutputStream

Java cng h tr truy cp nhp v xut ngu nhin hoc trc tip bng cc lp 'File','FileDescriptior', v 'RandomAccesFile'. Lp File Lp ny c s dng truy cp cc i tng tp tin v th mc. Cc tp tin t tn theo qui c t tn tp tin ca h iu hnh ch. Cc qui c ny c gi ring bng cc hng lp File. Lp ny cung cp cc thit lp cc tp tin v cc th mc. Cc thit lp chp nhn cc ng dn tp tin tuyt i ln tng i cng cc tp tin v th mc. Tt c cc tc v th mc v tp tin chung c thc hin thng qua cc phng thc truy cp ca lp File. Cc phng thc: Cho php bn to, xo, i tn cc file. Cung cp kh nng truy cp tn ng dn tp tin. Xc nh i tng c phi tp tin hay th mc khng. Kim tra s cho php truy cp c v ghi. Lp FileDescriptor Lp ny cung cp kh nng truy cp cc m t tp tin m h iu hnh duy tr khi cc tp tin v th mc ang c truy cp. Lp ny khng cung cp tm nhn i vi thng tin c th do h iu hnh duy tr. N cung cp ch

mt phng thc c tn 'valid()', gip xc nh mt i tng m t tp tin hin c hp l hay khng. Lp FileInputStream Lp ny cho php c u vo t mt tp tin di dng mt lung. Cc i tng ca lp ny c to ra nh dng mt tp tin String, File, hoc mt i tng FileDescriptor lm mt i s. Lp ny chng ln cc phng thc ca lp InputStream. N cng cung cp cc phng thc 'finalize()' v 'getFD()'. Phng thc 'finalize()' c dng ng lung khi ang c b gm rc Java x l. Phng thc 'getFD()' tr v i tng FileDescriptor biu th s kt ni n tp tin thc t trong h tp tin ang c 'FileInputStream' s dng. Lp FileOutputStream Lp ny cho php ghi kt xut ra mt lung tp tin. Cc i tng ca lp ny cng to ra s dng cc i tng chui tn tp tin, tp tin, FileDesciptor lm tham s. Lp ny chng ln phng thc ca lp OutputStream v cung cp phng thc 'finalize()' v getFD().

I/O Streams phn 4


Lung lc(Filter stream) Lung lc c kh nng kt ni vi cc lung khc v x l d liu "theo cch ring" ca n. FilterInputStream v FilterOutputStream l 2 lp lung lc c bn.

Mt 'Filter' l mt kiu lung sa i cch iu qun mt lung hin tn ti. Cc lp,cc lung nhp xut lc ca java s gip ta lc I/O theo mt s cch. V c bn, cc b lc ny dng thch ng cc lung theo cc nhu cu ca chng trnh c th. B lc nm gia mt lung nhp v mt lung xut. N thc hin x l mt tin trnh c bit trn cc byte c truyn t u vo n kt xut. Cc b lc c th phi hp thc hin dy tun t cc tu chn lc mi b lc tc ng nh kt xut ca mt b lc khc. Lp FilterInputStream y l lp tru tng. N l cha ca tt c cc lp lung nhp lc. Lp ny cung cp kh nng to ra mt lung t lung khc. Mt lung c th c c v cung cp di dng kt xut cho lung khc. Bin 'in' c s dng lm iu ny. Bin ny c dng duy tr mt i tng tch bit ca lp InputStream. Lp FilterInputStream c thit k sao cho c th to nhiu b lc kt xch [chained filters]. thc hin iu ny chng ta dng vi tng lng ghp. n lt mi lp s truy cp kt xut ca lp trc vi s tr gip ca bin 'in'. Lp FilterOutputStream Lp ny l mt dng b tr cho lp FilterInputStream. N

l lp cha ca tt c cc lp lung xut lc. Lp ny tng t nh lp FilterInputStream ch n duy tr i tng ca lp OutputStream lm mt bin 'out'. D liu ghi vo lp ny c th sa i theo nhu cu thc hin tc v lc v sau c chuyn gi ti i tng OutputStream.

I/O Streams phn 5


Lungnhp/xut d liu s cp DataInputStream v DataOutputStream l 2 lp lc cho php nhp xut d liu thuc cc kiu scp. Mt s phng thc ca DataInputStream float readFloat() throws IOException int readInt() throws IOException long readLong() throws IOException String readUTF() throws IOException Mt s phng thc ca DataOutputStream void writeFloat(float v) throws IOException void writeInt(int b) throws IOException void writeLong(long v) throws IOException void writeUTF(String s) throws IOException

I/O Streams phn 6


Lungm(Buffered stream) Vng m l kho lu tr d liu. Chng ta c th ly d liu t vng m thay v quay tr li ngun ban u ca d liu. Java s dng c ch nhp/xut c lp vng m tm thi lp cache d liu c c hoc ghi vo/ra mt lung. N gip cc chng trnh c/ghi cc lng d liu nh m

khng tc ng ngc ln kh nng thc hin ca h thng. Trong khi thc hin nhp c lp vng m, s lng byte ln c c ti thi im ny, v lu tr trong mt vng m nhp. khi chng trnh c lung nhp, cc byte d liu c c t vng m nhp. Tin trnh lp vng m kt xut cng thc hin tng t. khi d liu c mt chng trnh ghi ra mt lung, d liu kt xut c lu tr trong mt vng m xut. D liu c lu tr n khi vng m tr nn y hoc cc lung kt xut c x trng. Cui cng kt xut c lp vng m c chuyn gi n ch ca lung xut. Cc b lc hot ng trn vng m. Vng m c phn b nm gia chng trnh v ch ca lung c lp vng m. Cc lp lung m BufferedInputStream (m nhp) BufferedOutputStream (m xut) Lp Reader v Writer y l cc lp tr tng. Chng nm ti nh ca h phn cch lp, h tr vic c v ghi cc lung k t unicode. Lp Reader Lp ny h tr cc phng thc: 1. 2. 3. 4. 5. 6. read( ) reset( ) skip( ) mark( ) markSupported( ) close( )

Lp ny cng h tr phng thc gi 'ready()'. Phng thc ny tr v gi tr kiu boolean nu r tc v c k tip c tip tc m khng phong to hay khng. Lp Writer Lp ny h tr cc phng thc: 1. 2. 3. write( ) flush( ) close( )

Nhp/ xut chui v xu k t Cc lp 'CharArrayReader' v 'CharArrayWriter' cng tng t nh cc lp ByteArrayInputStream v ByteArrayOutputStream ch chng h tr nhp/xut t cc vng m nh. Cc lp CharArrayReader v CharArrayWriter h tr nhp/ xut k t 8 bit. CharArrayReader khng h tr b sung cc phng php sau y vo cc phng thc ca lp Reader cung cp. Lp CharArrayWriter b sung cc phng thc sau y vo cc phng thc ca lp Writer.

reset( ): thit lp li vng m size( ): tr v kch c hin hnh ca vng m toCharArray( ): Tr v bn sao mng k t ca vng m xut toString( ): Chuyn i vng m xut thnh mt i tng String writeTo( ): Ghi vng m ra mt lung xut khc.

Lp StringReader tr gip lung nhp k t t mt chui. N khng b sung phng thc no vo lp Reader. Lp StringWriter tr gip ghi lung kt xut k t ra mt i tng StringBuffer. Lp ny b sung hai phng thc c tn l 'getBuffer( )' v 'toString()' . Phng thc 'getBuffer( )' tr v i tng StringBuffer tng ng vi vng m xut, trong khi phng thc toString( ) tr v mt bng sao chui ca vng m xut.

System.in v System.out
System.in i tng nhp chun, gn vi bn phm. Thuc lp InputStream. System.out i tng xut chun, gn vi mn hnh. Thuc lp PrintStream. Lp PrintStream Cho php hin th biu din ca d liu. PrintStream k tha t FilterOutputStream

Lp PrinterWriter
Lp 'PrintStream' thc hin vic kt xut d liu. Lp ny c cc phng thc b sung, tr gip cho vic in n d liu c bn. Lp PrinterWriter l mt thay th ca lp PrinterStream. N thc t ci thin lp PrinterStream bng cch dng du tch dng ph thuc nn tng in cc dng thay v k t '\n'. Lp ny cng cp h tr cc k t Unicode so vi PrinterStream. Phng thc

'checkError( )' c s dng kim tra kt xut c x sch v v c kim ra cc li. Phng thc setError( ) c s dng thit lp li iu kin. Lp PrintWriter cung cp vic h tr in n cc kiu d liu nguyn thu, cc mng k t, cc su chui v cc i tng.

Giao din DataInput


Giao din DataInput c s dng c cc byte t lung nh phn v xy dng li cc kiu d liu dng nguyn thu trong Java. DataInput cng cho php chng ta chuyn i d liu t nh dng sa i UTF-8 ti dng su chui. Chun UTF cho nh dng chuyn i Unicode. N l kiu nh dng c bit gii m cc gi tr Unicode 16 bit . UTF lc quan mc thp gi lp trong hu ht cc trng hp, mc cao 8 bt Unicode s l 0. Giao din DataInput c nh ngha l s cc phng thc, cc phng thc bao gm vic c cc kiu d liu nguyn thu trong java. y l cc phng thc ca DataInput

Giao din DataOutput


Giao din DataOutput c s dng xy dng li cc kiu d liu nguyn thu trong java vo trong dy cc byte. n ghi cc byte ny ln trn lung nh phn.

Giao din DataOutput cng cho php chng ta chuyn i mt su chui vo trong java c sa i theo nh dng UTF-8 v ghi n vo lung. y l cc phng thc ca DataOutput. Tt c cc phng thc s kch hot IOException trong trng hp li.

Lp RandomAccessFile
Lp RandomAccessFile cung cp kh nng thc hin I/O theo mt v tr c th bn trong mt tp tin. Trong lp ny, d liu c th c hoc ghi v tr ngu nhin bn trong mt tp tin thay v mt kho lu tr thng tin lin tc. hn th na lp ny c tn RandomAccess. Phng thc 'seek( )' h tr truy cp ngu nhin. Kt qu l, bin tr tng ng vi tp tin hin hnh c th n nh theo v tr bt k trong tp tin. Lp RandomAccessFile thc hin c hai vic nhp v xut. Do vy, c th thc hin I/O bng cc kiu d liu nguyn thu. Lp ny cng h tr cho php c hoc ghi tp tin c bn, iu ny cho php c tp tin theo ch ch c hoc c-ghi. tham s 'r' hoc 'rw' c gn cho lp RandomAccessFile ch nh truy cp 'ch c' v 'c-ghi'. Lp ny gii thiu vi phng thc mi khc vi phng php tha k t cc lpDataInput v DataOutput. Cc phng thc bao gm

1.

seek( ): Thit lp con tr tp tin ti v tr c th getFilePointer( ): Tr v v tr hin hnh ca length( ): Tr v chiu di ca tp tin tnh theo

bn trong tp tin.
2.

con tr tp tin.
3.

byte.

Lp File
Lp File cho php ly thng tin v file v th mc. Mt s phng thc ca File boolean exists(); // kim tra s tn ti ca file boolean isDirectory(); // kim tra xem file c phi l th mc String getParent(); // ly th mc cha long length(); // ly c file (byte) long lastModified(); // ly ngy sa file gn nht String[] list(); // ly ni dung ca th mc

Tm tt v x l file
Nn dng DataInputStream v DataOutputStream nhp/xut cc d liu kiu s cp (int, float...) 2. Nn dng ObjectInputStream v ObjectOutputStream nhp/xut cc i tng(object). 3. Nn kt hp lung file v lung c/ghi k t nhp xut cc file k t Unicode. 4. Nn dng RandomAccessFile nu mun c/ghi t do trn file. 5. Dng lp File ly thng tin v file
1.

ng dng ng h java

Bn vo y tham kho code. Trc ht bn hy m Eclipse, to mt class mi, t tn l Clock. Tip theo hy copy ton b code v paste vo Clock.java Bn hy Save li v chy th. Bn s khng thy ng h m ch l mt vng trn mu en. L do l v mun chy c Applet ny bn cn truyn tham s cho Applet. Nhc li: -Truyn tham s cho applet bng th param t bn trong th Applet -Mt tham s c tn gi v gi tr ca tham s . Th d sau minh ha truyn tham s t Applet2.htm sang Applet2.class xut file nh abc.jpg C php ca th applet:

Tuy nhin bn hon ton c th chy Applet nh mt Application. Trong Eclipse, bn click vo menu Run, sau trong phn Run As, bn chn JavaApplication. Bn s thy ng h chy

theo ng gi ca chic computer ca bn. Chng ta s tip tc trong phn sau. Chng ta tip tc vi Clock.java Trc ht bn nn xa ht code bt u li t u. Chng ta th hnh dung vic v ng h s ra sao? Gi s vi kim giy. Cng s nh nhng v d trc, sau mi giy sleep(), ta s xa kim giy c v v li v tr mi. Vn l lm sao bit c v tr no? Ta s dng mt method c sn bit thi gan hin ti, t s bit v tr ca cc kim ng h. Gi s ta bit thi gian hin ti. Chng ta s v cc kim ng h th no? Ci ny lin quan n lng gic. Nu bn thng tho lng gic th khng c vn g. Nu bn cha bit lng gic th....cng khng sao. y l hnh nh mt tam gic vung vi gc cn tnh cc hm lng gic sin, cos, tang, cotang.

ng dng ng h java phn 2

Bn ch cn nh cu sau: Sin-i; Cos-k;Tang-i k; Cotang-k i Nu mun tnh sin ca mt gc, bn ly cnh i chia cho cnh huyn. Nu mun tnh cos ca mt gc, bn ly cnh k chia cho cnh huyn. Nu mun tnh tang ca mt gc, bn ly cnh i chia cho cnh k. Nu mun tnh cotang ca mt gc, bn ly cnh k chia cho cnh i.

Mt v d d nht l gc 45 . l tam gic vung cn v hai cnh i-k bng nhau. T suy ra tang=cotang=1. Cc bn vo y tham kho method drawLine() C 4 tham s xc nh ta im u v im cui ca mt on thng. Hy hnh dung on thng i din cho kim giy chng hn.

C mt im s lun c nh. Chng ta s ch cn phi xc nh ta ca im cn li.

Ta x ca im s tng ng cnh k, cng vi ta x ca tm Ta y ca im s tng ng cnh i, cng vi ta y ca tm

Ta bit cnh huyn, gn bng bn knh vng trn v l chiu di ca kim. Vy chiu di cnh k(ta x) s l sin * cnh huyn. V chiu di cnh i(ta y) s l cos * cnh huyn. Vy l xong, tt c nhng code cn li ch nhm mc ch hon thin. Bn hon ton c th vit code theo cch khng cn truyn tham s cho Applet. Cc bn vo y tham kho Color code.

Chc cc bn mt ngy vui v.

ng dng ng h java phn 3


n gin chng ta s khng dng cch truyn tham s cho Applet. Chng ta cng khng dng method readColor() Tuy nhin chng ta s ni qua. i khi th ny. Ta c cc mu sc: en, trng, , xanh, hng, tm...Ni chung l rt nhiu mu sc. Tuy nhin, tt c cc mu u da v 3 mu c bn: -XANH DONGXANH L CY. Ni cch khc t 3 mu Red-Blue-Green, ta c th to ra tt c cc mu khc. Nu ta mun dng theo cch biu din tt c cc mu da trn 3 mu c bn th ta s biu din mt mu no bng t hp 3 phn, mi phn l mt s nguyn t 0-255 nh sauxxx-xxx-xxx. Mi phn s biu din cho t l hay cng cc mu -xanh dng-xanh l cy. V d 255-000-000 l mu , 000-255-000 l mu xanh dng, 000-000-255 l mu xanh l cy. Ta cng c th chuyn qua h thp lc phn(Hexadecimal). V d red l FF0000, pink l FF00FF... Trong code tham kho, ty vo tn ca tham s m method getParameter() s tr v gi tr mu di dng xxx,xxx,xxx Method readColor() ch c nhim v tch chui trn ra

thnh 3 s i din cho 3 mu c bn. StringTokenizer() c mt chui v tch ra da vo tham s th 2 (trong v d ca chng ta l du phy ",") V trong method init() ta s khi to cc mu ty thuc vo tham s c tryun cho Applet. Quay li vi Clock.java, n gin chng ta s b ht mi th "rm r". Code cui cng s nh sau import java.applet.Applet; import java.awt.*; import java.util.*; import java.awt.event.*; // public class Clock extends Applet implements Runnable{ Thread thisThread; Color faceColor, borderColor, minuteColor, hourColor, secondColor; public void init(){ //read in the colors for each of the hands and for the face/border faceColor = Color.GRAY; borderColor = Color.BLACK; minuteColor = Color.BLUE; hourColor = Color.GREEN; secondColor = Color.RED; } public void start(){ thisThread = new Thread(this); thisThread.start(); } public void run(){

while(true){ repaint(); try{ thisThread.sleep(1000); }catch (Exception e){} } } public void update(Graphics g){ paint(g); } public void paint(Graphics g){ //fill clock face g.setColor(faceColor); g.fillOval(0,0,100,100); g.setColor(borderColor); g.drawOval(0,0,100,100); //get the current time Calendar d = Calendar.getInstance(); //draw the minute hand g.setColor(minuteColor); double angle = (((double)(90 d.get(Calendar.MINUTE)))/60)*2 * Math.PI; g.drawLine(50,50,50+(int)(Math.sin(angle)*50),50 + (int)(Math.cos(angle)*50)); //draw the hour hand g.setColor(hourColor); angle = ((((double)18 d.get(Calendar.HOUR_OF_DAY)+ (double)d.get(Calendar.MINUTE)/60))/12)*2* Math.PI; g.drawLine(50,50,50+(int)(Math.sin(angle)*40),50 +(int)(Math.cos(angle)*40)); //draw the second hand g.setColor(secondColor); angle = (((double)(90 d.get(Calendar.SECOND)))/60)*2 * Math.PI; g.drawLine(50,50,50+(int)(Math.sin(angle)*50),50 +(int)(Math.cos(angle)*50)); }

static boolean inApplet =true; public static void main(String args[]){ /*set a boolean flag to show if you are in an applet or not */ inApplet=false; /*Create a Frame to place our application in. */ /*You can change the string value to show your desired label*/ /*for the frame */ Frame myFrame = new Frame ("Clock as an Application"); myFrame.addWindowListener (new WindowAdapter(){ public void windowClosing (WindowEvent event){ System.exit(0); } }); /*Create a clock instance. */ Clock myApp = new Clock(); /*Add the current application to the Frame */ myFrame.add ("Center",myApp); /*Resize the Frame to the desired size, and make it visible */ /*Resize the Frame to the desired size, and make it visible */ if (args.length>=2) /*resize the Frame based on command line inputs */ myFrame.setSize(Integer.parseInt(args[0]),Integer.parse Int(args[1])); else myFrame.setSize(100,130); myFrame.show(); /*Run the methods the browser normally would */ myApp.init(); myApp.start(); }

} Gi y bn c th Save li v chy th nh Applet cng c m nh Application cng c. Chc bn mt ngy vui v

Giao thc TCP v UDP


Chng ta cn tm hiu qua v IP, TCP v UDP trc khi bn v lp trnh mng. Xin nhc li l chng ta c gng n gin ha mi vic v vy xin ng so snh v mt t ng, mc ch cui cng l hiu m thi. a ch IP: Mi cn nh u c s nh, my tnh cng vy, trn mng Internet, mi my tnh c mt a ch ring. C th coi IP l a ch ca cc my tnh trn mng. Tm thi vi s mng, s my trn th gii hin ti th c tam coi nh cu trc a ch IP nh hin ti (IPv4) l tm n. Sau ny s phi m rng (IPv6) kiu nh thm s vo s phone chng hn. IP l ch vit tt ca Internet Protocol. a ch IP ang c s dng hin ti (IPv4) c 32 bit chia thnh 4 Octet ( mi Octet c 8 bit, tng ng 1 byte ) cch m u t tri qua phi bt 1 cho n bt 32, cc Octet tch bit nhau bng du chm (.), bao gm c 3 thnh phn chnh. Bn vo y coi li khi nim v bit v byte. T bn s hiu IPv4 vi 32 bit (khong 4 t a ch) s khc IPv6 vi 128 bit nh th no.IPv6 trong tng lai s h tr qun l 2128 a ch khc nhau. Tng ng khong 3.41038 a ch. y l 3 phn chnh ca mt a ch IP

Class bit

Net ID

Host ID

Bit nhn dng lp ( Class bit ) a ch ca mng ( Net ID ) a ch ca my ch ( Host ID ). C th a ch IP biu din di dng bit nh phn s nh sau: 0 bit nhn dng 01011 011110011011111000 0 0. 1 1. 1 0. 00 Octet 1 Octet 2 Octet 3 Octet 4

a ch IP chia ra 5 lp A,B,C, D, E. Do bn thy c Class bit. Class bit phn bit a ch IP thuc lp no v l nhng bit u tin trong a ch IP. Trong v d trn class bit l 0. 31 bit cn li biu din Net Id v Host ID v y l a ch lp A. Lp B s c 2 bit u l class bit, 30 bit cn li biu din Net Id v Host ID nh hnh di.

Thng thng bn s thy a ch IP biu din di dng thp phn. Mi Octet c 3 con s. V d 123.123.000.000 bit mt a ch thuc lp no ta c th da vo bng sau
a ch lp A B C D E Vng a ch l thuyt T 0.0.0.0 n 127.0.0.0 T 128.0.0.0 n 191.255.0.0 T 192.0.0.0 n 223.255.255.0 T 224.0.0.0 n 240.0.0.0 T 241.0.0.0 n 255.0.0.0 S mng ti a s dng 126 16382 2097150 Khng phn Khng phn S my ch ti a trn tng mng 16777214 65534 254

Nh vy nu chng ta thy nhm s th nht nh hn 126 bit a ch ny lp A, nm trong khong 128 n 191 bit a ch ny lp B v t 192 n 223 bit a ch ny lp C. TCP v UDP Mun truyn d liu hay thng tin qua li trn mng th c mt s my tnh phi pht tn hiu, cc my khc nhn tn hiu. Trong qu trnh c th s xy ra li. Cng ging nh vic gi v pht th t, bu kin chng hn. Vic truyn thng tin trn mng cng c nhiu qui cch "bu kin" hay biu din d liu khc nhau. Tp hp cc quy tc chun dnh cho vic biu din d liu, pht tn hiu, chng thc v pht hin li d liu - nhng vic cn thit gi thng tin qua cc knh truyn thng, nh m

cc my tnh (v cc thit b) c th kt ni v trao i thng tin vi nhau gi l giao thc (Protocol) Khi bn gi mt bu kin th bu kin ca bn s phi qua nhiu giai on: bu cc, xe vn chuyn, sn bay, my bay, bu in ni n, ngi a th.... Thng tin truyn trn mng cng vy. C rt nhiu giao thc khc nhau. y l mt s giao thc thng dng. * IP (Internet Protocol) * UDP (User Datagram Protocol) * TCP (Transmission Control Protocol) * DHCP (Dynamic Host Configuration Protocol) * HTTP (Hypertext Transfer Protocol) * FTP (File Transfer Protocol) * Telnet (Telnet Remote Protocol) * SSH (Secure Shell Remote Protocol) * POP3 (Post Office Protocol 3) * SMTP (Simple Mail Transfer Protocol) * IMAP (Internet Message Access Protocol) Chng ta cng s khng bn v cc tng mng hay m hnh OSI. Ch n gin tm tt th ny: -Mun gi hay nhn thng tin trn mng ta cn theo mt qui nh no gi l giao thc (Protocol). Nhiu giao thc hnh thnh b giao thc. -TCP v UCP l hai giao thc trong b giao thc TCP/IP -TCP l mt giao thc cn "kt ni" gia my gi v my nhn. Chnh v vy n c gi lconnection-oriented. V d khi bn mun ni chuyn vi mt ngi bn sng ti tnh khc hoc nc khc, bn nhc in thoi ln v quay

s ca ngi bn ny, lc mt kt ni s c to ra gia in thoi ca bn v ca ngi bn, sau bn gi v nhn d liu ( di dng m thanh) bng cch ni v nghe qua in thoi ca bn. -UDP l giao thc khng cn "kt ni" gia my gi v my nhn. Chnh v vy c gi lconnectionless. Trong giao thc UDP khi hai ng dng mun giao tip vi nhau chng khng to ra kt ni m ch n thun gi cc gi tin mt cch c lp t my ny ti my khc. Cc gi tin nh vy gi l cc datagram. Vic gi cc gi tin nh vy tng t nh vic chng ta gi th qua ng bu in: Cc bc th bn gi c lp vi nhau, th t cc l th l khng quan trng v khng c g m bo l th s n c ch. -TCP m bo chuyn giao d liu ti ni nhn mt cch ng tin cy v ng th t. -UDP khng cung cp s tin cy v th t truyn nhn

Socket

Socket cng nh cm in v phch cm. Mt my thng bo v tr cm, my kia cn c vo cm phch cm vo, to kt ni v truyn d liu. V tr cm chnh l a ch v cng ca my c Socket. Java cung cp mt s lp chng ta c th vit cc ng dng mng thng qua c ch Socket. Nu quyt nh dng giao thc TCP trong ng dng th bn s s dng lp Socket. Nu quyt nh dng giao thc UDP trong ng dng th bn s s dng lp DatagramSocket. Ngoi ra cn rt nhiu lp khc dng trong lp trnh Socket trong gi java.net

Lp InetAddress
Lp InetAddress biu th cho a ch ca mt my no . y l mt s Method ca lp InetAddress

Lp InetAddress khng c hm khi to. to ra i tng thuc lp ny, s dng cc phng thc: getLocalHost(), getByName(String), getAllByN ame(String). V d InetAddress add1= InetAddress.getLocalHost(); InetAddress add2= InetAddress.getByName("localhost");

Chng ta cn thm import java.net.InetAddress s dng lp InetAddress Bn th mt v d nh sau: Bn m Eclipse v to mt lp mi, t tn l InetAddress1. Nhp code sau vo: import java.net.*; class InetAddress1 { public static void main(String[] args) { try { InetAddress address = InetAddress.getByName("java.sun.com"); System.out.println(address); } catch (UnknownHostException ex) { System.out.println("Could not find java.sun.com"); } } } Bn s nhn c kt qu java.sun.com/72.5.124.55 Bn c th thm code sau dng getLocalHost() bit a ch local ca chnh my bn ang s dng: import java.net.*; class InetAddress1 { public static void main(String[] args) { try { InetAddress address = InetAddress.getByName("java.sun.com"); System.out.println(address); InetAddress address2 = InetAddress.getLocalHost(); System.out.println(address2); } catch (UnknownHostException ex) {

System.out.println("Could not find java.sun.com"); } } } Bn c th th cc method khc theo cch tng t. Bn c th vo y tham kho mt v d c v thc t hn l so snh hai website c cng mt a ch IP hay khng.

You might also like