You are on page 1of 15

Web Programcl

<<

Kayan yazlar
Sitenizin en deerli alan iin dndnz ierik fazla m uzun? Dar alanlara uzun ama nemli ieriklerinizi kayan yazlar olarak sdrn ve arpc ekilde sunun.
<style type="text/css"> #konteyner { position: absolute; top:10px; left:200px; width:250px; clip:rect(0,250,200,0); } #metin { position: absolute; top:0px; left:0px; width:250px; color:#1DFF2D; font-family: Arial; font-size:12px;

itelerin ana sayfalarnda logoya yakn olan blmler genelde ziyaretiler tarafndan ilk baklan ve grlen alanlardr. Bu bakmdan buralardaki her bir piksellik alan siteleriniz iin paha biilmez olup iyi deerlendirilmesi gerekir. Sitenizin sunduu nemli ierikleri buralara yerletirmeyi dnebilirsiniz, ama bazen ierikler onlar iin ayrdnz alana gre fazla gelebilir. Bu durumda farkl ierik bilgileri ayn alan zamana bal olarak paylamak durumundadrlar. erikleri st ste katmanlar halinde zamana ya da etkileime bal olarak dizmek ya da bir konteyner iinde kayan ekilde sunmak ska bavurulan iki yntemdir. Bu ay sayfalarmzda kayan yazlar ya da ierikler oluturmay greceiz. Kayan yazlar yaparken DHTML metodunu kullanmak dier alternatiflere gre daha kolaydr. stelik hazr bir scripti kullanma ansnz her zaman vardr. DHTML scriptleri daha abuk yklenir, daha gvenilir alr ve alabilmek iin eklenti (plug-in) dosyalarna ihtiyalar yoktur. En nemlisi ise gncellenmesi ve dolays ile sunucu-taraf uygulamalar yardmyla oluturulan dinamik ierik ile beraber kullanlmalar ok daha kolaydr. Kayan yazlar olutururken gz nnde bulundurmamz gereken iki nemli unsur vardr: Bunlardan birincisi yazlarmzn iinde bulunaca ve sadece snrlar iinde grnecei pencere ki bunu konteyner diye isimlendirebiliriz; ikincisi ise kayan yazlarmzdaki metin ya da ieriin sonu geldiinde kendiliinden durmas. Bu unsurlardan ilki olan konteyneri kayan yazlarmz ierisine alan yeni bir katman olarak tanmlarken, ikinci unsurumuz olan yaz ieriimizin uzunluunu lmek iin zel bir fonksiyondan faydalanacaz. nce scriptimizi grelim dilerseniz:
ky.html <html> <head> <title>Kayanyaz_lar</title>

} </style> <script language="JavaScript"> var baslangicX=0; var baslangicY=0; var kademe=0; var saatDurumu=0; function git(katman,x,y) { if (document.all) { document.all[katman].style.pixelLeft = x; document.all[katman].style.pixelTop = y; } else if (document.layers) { document.layers.konteyner.document. layers[katman].moveTo(x,y); } else { document.getElementById(katman).style.left = x +"px"; document.getElementById (katman).style.top = y +"px"; } } function kay(hiz){ baslangicY=baslangicY+kademe; git('metin',baslangicX,baslangicY) }

172 CHIP Workshop > >

>>
}

Web Programcl

function basla(hiz){ if (baslangicY>0){ dur(); baslangicY=0;// baslangic if (baslangicY<-katmanYuksekligi('metin')+180){ dur(); baslangicY=-katmanYuksekligi('metin')+180; } else{ kademe=hiz; saat = setTimeout("basla(kademe)", 20); saatDurumu=1; kay(); } } function dur() { if (saatDurumu==1){ clearTimeout(saat) } } function basaDon() { baslangicY=0; git('metin',0,0); } var yukseklik; function katmanYuksekligi(katman){ if (document.all) { yukseklik=document.all[katman].offsetHeight; } else if (document.layers) { yukseklik=document.layers.konteyner. layers[katman].document.height; } else if (document.getElementById) { yukseklik=document.getElementById(katman).offsetHeight; } return yukseklik; } </script> <meta http-equiv="Content-Type" content="text/html; charset=windows-1254"> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-9"> </head> <body bgcolor="Black">

height="150" border="0" alt=""><br> <a href="javascript:basla(-3)" onmouseover="basla(-2)" onmouseout="dur()"><img src="images/ok_down_gri.gif" alt="" width="13" height="13" border="0"></a><br> <img src="images/transparent.gif" width="1" height="4" border="0" alt=""><br> <a href="javascript:basaDon()"><img src="images/ok_top_gri.gif" alt="" width="13" height="13" border="0"></a><br> </div> <div id="konteyner"> <div id="metin"> <b>stanbul en pahal kentler arasnda</b> DNYA genelinde satn alma gcnn karlatrmal olarak incelendii bir aratrmada, svire'nin en pahal lke olduu ortaya karken, stanbul da hayat pahallnda Madrid, Los Angeles, Barcelona ve Miami gibi byk kentleri geride brakt. <br><br> svire bankas Union Banques Suisse (UBS) tarafndan, 5 ktaya dalm 71 kentte yaplan aratrmann sonucunda hazrlanan listede, en pahal 10 kent sralamasnda svire'den 4 ehir yer ald. Listede ilk sray Oslo (Norve) alrken, Kopenhag (Danimarka) 2'nci, Tokyo (Japonya) 3'nc oldu. Bu kentleri srasyla Zrih (svire), Londra (ngiltere), Stockholm (sve), Basel (svire), Paris (Fransa), Cenevre (svire) ve Lugano (svire) izledi. <br><br> Ev kiras hari, 115 deiik mal ve hizmet bedelinden oluan temel yaam giderleri gz nne alnarak hazrlanan bu listede stanbul 71 lke arasnda 28'inci srada yer ald. Ayn listede Madrid 29'uncu, Los Angeles 30'uncu, Barcelona 35'inci, Miami 37'nci, Moskova ise 42'nci sralara yerleerek stanbul'un gerisinde kald. <br><br> STANBUL'DA 1 KLO PRN N 32 DAKKA Aratrmann ilgin bulgularndan biri de 71 kentte belirli gda rnleri iin ka dakika allmas gerektiini gsteren sralamayd. 13 meslek dal temel alnarak yaplan hesaplamaya gre dnya genelinde artk insanlar pirin ve ekmek gibi temel gdalar iin, 2003 ylna oranla 1-2 dakika daha az almak zorunda. Yeni aratrmada, dnya genelinde 1 kilogram ekmek satn alabilmek iin 24 dakika allmas gerektii anlald. stanbul halknn ise 1 kilogram ekmek iin 18, 1 kilogram pirin iinse 32 dakika almas gerekiyor. Sralamaya gre, bu rnleri satn almak iin en az Lugonalular ( 1 kg ekmek iin 7, pirin iin 5 dakika) alyor. <br><br> En yksek brt maa denen lke ve ehirler sralamasnda svire ile skandinav lkeleri ilk sraya yerleti. Kopenhag bu listede birinci olurken, Zrih ve Basel de onu takip etti. stanbul ise ayn listede 37'nci srada kendisine yer buldu. `Fiyatlar ve Kazanlar' bal altnda sunulan ve 2003 yl verilerinin gncelletirilmi hali niteliinde olan anketin sonularna gre, en yksek satn alma gc de srasyla Zrih, Basel ve Lksemburg'da bulunuyor. stanbul ise bu listede 45'inci sraya oturdu. <br><br> <div align="center">__</div>

<div style="position:absolute; top:20; left:480; width:0; height:0; visibility:visible; z-index:0;"> <a href="javascript:basla(3)" onmouseover="basla(2)" onmouseout="dur()"><img src="images/ok_up_gri.gif" alt="" width="13" height="13" border="0"></a><br> <img src="images/transparent.gif" width="1" </html> </body> </div>

</div>

< CHIP Workshop 173 <

Web Programcl

<<

olmas sanrm sizler iin de mantkl olsa gerek.


function git(katman,x,y) { if (document.all) { document.all[katman].style.pixelLeft = x; document.all[katman].style.pixelTop = y; } else if (document.layers) { document.layers.konteyner.document. layers[katman].moveTo(x,y); } else { document.getElementById(katman).style. left = x +"px"; document.getElementById (katman).style.top = y +"px";

nce konteyner meselesinden balayalm. Konteyner kullanmamzn sebebi, scriptimize estetik katmak amacyla kayacak olan yazmzn sadece bu konteyner penceresi ierisinde grnmesini salamak. Konteyneri oluturan nesnemiz ise kayan yazmzn zerinde bulunduu katman iine alan yeni bir katman. Yani konteyner diye ifade ettiimiz ey aslnda bir katman (kodumuzda da ismi konteyner olarak gemekte) ve kayan yazmzn zerinde bulunduu metin katmanmz bu konteyner katmanmzn ierisinde yer almakta. Yazmzn sayfamzda grnecei koordinatlar ve iinde grnecei penceremizin boyutlarn sayfamzn en banda konteyner katmannn stil tanmnda belirliyoruz.
#konteyner { position: absolute; top:10px; left:200px; width:250px; clip:rect(0,250,200,0); }

} }

Dilerseniz bu noktada konteyner katmannn arka plan rengine bir renk atayarak konteynerin tamamn, nerede balayp nerede bittiini rahatlkla gzlemleyebilirsiniz. Bundan sonraki i ise bu katmann ierisinde yer alacak olan metin katmanmzn CSS yardmyla pozisyonunu tanmlamak.
#metin { position: absolute; top:0px; left:0px; width:250px; color:#1DFF2D; font-family: Arial; font-size:12px; }

Git fonksiyonumuz sayfa iinde bir elementin yer deitirmesini salamakta kullandmz global bir fonksiyon olup farkl tarayc modellerinde alabilecek ekilde hazrlanmtr. Bunu farkl DOM yaplarn kullanan art ifadelerinde grebilirsiniz. lk DOM yaps Internet Explorer iin iken ikincisi Netscape 4 tarayclar iin. Sonuncu yapnn getElementById() zelliinden W3C DOM yapsn kullandn tahmin edebilirsiniz. Bu da scriptimizin tm modern ve standart tarayclarda sorunsuz almasn salyor. Fonkisyonumuzda katman parametresi yer deiecek elementin referans adn, x parametresi yatay olarak yer deitirme miktarn, y parametresi de dikey olarak yer deitirme miktarn belirlememize yaryor. Scriptimizde nemli unsurlardan birinin kayan yaznn sonuna geldiinde kayma ileminin kendiliinden sona ermesi olay olduunu belirtmitik. Bunu yapabilmemiz iin kayacak olan metnin ekrandaki uzunluunu lebilmemiz gerekir. Bunu sayfanz ekranda aarak yaznn ekranda kaplad yerin uzunluunu lerek ya da tahmini bir deer vererek yapmay aklnzdan bile geirmeyin. nk bu deer yaznzn ieriine, kullandnz font byklne ve daha nemlisi ayn font byklklerinin bile farkl tarayclarda farkl gzkmesinden dolay ziyaretinizin kulland taraycya gre deikenlik gsterir. Bu durumda scriptin altrld taraycda metnin uzunluunu lebilecek sihirli ve bir o kadar da gvenilir bir fonksiyona ihtiyacmz olacak. te bu da ktphanemizde de yer alan ancak kendini dier fonksiyonlardan ayran pek de zellii yok gibi gzken katmanYuksekligi() fonksiyonumuz.
function katmanYuksekligi(katman){ if (document.all) { yukseklik=document.all[katman].offsetHeight; } else if (document.layers) { yukseklik=document.layers.konteyner.layers[katman]. document.height; } else if (document.getElementById) { yukseklik=document.getElementById(katman).offsetHeight; }

Burada dikkat etmeniz gereken bir nokta metin katmannn sol st kesine verilen (0,0) koordinatnn sayfa zerindeki (0,0) noktasn deil de konteyner katmannn iindeki (0,0) noktasn ifade ediyor olmas. Zira metin katmanmz sayfamzn deil konteyner katmanmz ierisinde. Her iki katmann da geniliklilerinin ayn (250px)

174 CHIP Workshop > >

>>
} function basla(hiz){

Web Programcl

return yukseklik;

hb.html

Bu fonksiyon yardmyla elde etmi olduumuz yukseklik deikeninin deerini (ki bu deer ou tarayc iin farkl kacaktr. Bunu deneyebilirsiniz) ayn zamanda kaydrma ilemini tetikleyen basla() fonksiyonumuzda kullanyoruz.

<html> <head> <title>Kayanyazilar</title> <style type="text/css"> #konteyner { position: absolute; top:10px;

if (baslangicY>0){ dur(); baslangicY=0;// baslangic } if (baslangicY<-katmanYuksekligi('metin')+180){ dur(); baslangicY=-katmanYuksekligi('metin')+180; } else{ kademe=hiz; saat = setTimeout("basla(kademe)", 20); saatDurumu=1; kay(); } } } a{ } #metin {

left:200px; width:250px; clip:rect(0,250,200,0);

position: absolute; top:0px; left:0px; width:250px; color:#1DFF2D; font-family: Arial; font-size:12px;

color:#1DFF2D; font-family:Verdana, Arial; text-decoration:none; } a:hover { color:#1DFF2D; font-family:Verdana, Arial; text-decoration:underline; } </style> <script language="JavaScript"> var baslangicX=0;

Kaydrma ileminin balamas iin basla() fonksiyonunu uygun hz belirten bir parametre ile armanz yeterli olacaktr. Mesela basla(2) ya da basla(-3) gibi. hiz parametresinin eksi () deerleri kayma ileminin yukarya doru gereklemesini salayacaktr. Size bir ipucu daha: Sayfanzda yer alan ve zerine fare ile gelince kayma ilemini balatan linklerin zerini tklarsanz kayma ileminin daha hzl gerekletiini gzlemlersiniz.
<a href="javascript:basla(-3)" onmouseover="basla(-2)" onmouseout="dur()"> . . . </a>

Baz durumlarda metnimizin ok uzun olabileceini gz nnde bulundurarak, ziyaretilerimizin tekrardan sayfa bana dnebilmelerini salayabilecei ek bir ileve de yer verdim.
function basaDon() { baslangicY=0; git('metin',0,0); }

var baslangicY=0; var kademe=0; var periyot=600;//tekrarlar icin function git(katman,x,y) { if (document.all) { document.all[katman].style.pixelLeft = x; document.all[katman].style.pixelTop = y; } else if (document.layers) { document.layers.konteyner.document. layers[katman].moveTo(x,y); } else { document.getElementById(katman).style. left = x +"px"; document.getElementById (katman).style.top = y +"px"; }

basaDon() fonksiyonu arldnda metninizin tekrardan balang pozisyonuna geldiini greceksiniz.

Sayfalarnzda kayan haber balklar


Yukardaki scriptimizde ok az deiiklik yaparak ok daha farkl ileve sahip olacak ve sitelerinizde kullanabileceiniz harika bir baka scripte sahip olmaya ne dersiniz? Bu script sayesinde sitenizde gncel haber balklarn olduka arpc bir biimde ziyaretilerinizin ilgisine sunabileceksiniz. Ziyaretinizin ilgili haberi okuyabilmesi iin haber linkinin zerine gelip tklamas yetecektir. te haberler scripti!

< CHIP Workshop 175 <

Web Programcl

<<

} function kay(hiz){ baslangicY=baslangicY+kademe; git('metin',baslangicX,baslangicY) } function basla(hiz){ kademe=hiz; saat = setTimeout("basla(kademe)", 40); kay(); if(baslangicY<-periyot){ basaDon(); } } function basaDon() { baslangicY=0; git('metin',0,0); } function dur(){ clearTimeout(saat); } </script> <meta http-equiv="Content-Type" content="text/html; charset=windows-1254"> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-9"> </head> <body bgcolor="#000000" onload="basla(-1)"> <div id="konteyner"> <div id="metin"> <br><br><br><br><br><br><br><br><br><br><br><br><br><br> <a href="haberlinki.html" onmouseover="dur()" onmouseout="basla(-1)"> Ankara ile AB arasnda yeni anlama</a><br> <a href="haberlinki.html" onmouseover="dur()" onmouseout="basla(-1)"> Yeni renci affna veto</a><br> <a href="haberlinki.html" onmouseover="dur()" onmouseout="basla(-1)"> Trkiye kupas finali bu akam</a><br> <a href="haberlinki.html" onmouseover="dur()" onmouseout="basla(-1)"> 2005'in en yeni otomobilleri</a><br> <a href="haberlinki.html" onmouseover="dur()" onmouseout="basla(-1)">Irak'ta iddet</a><br> <a href="haberlinki.html" onmouseover="dur()" onmouseout="basla(-1)">Bush Paris'te</a><br> <a href="haberlinki.html" onmouseover="dur()" onmouseout="basla(-1)">Dolar: 1,44 YTL</a><br> <a href="haberlinki.html" onmouseover="dur()" onmouseout="basla(-1)">Euro: 1,76 YTL</a><br> <a href="haberlinki.html" onmouseover="dur()" onmouseout="basla(-1)"> Altn: 17,86 YTL</a><br><a href="haberlinki.html" onmouseover=

"dur()" onmouseout="basla(-1)"> Ankara ile AB arasnda yeni anlama</a><br> <a href="haberlinki.html" onmouseover="dur()" onmouseout="basla(-1)"> Yeni renci affna veto</a><br> <a href="haberlinki.html" onmouseover="dur()" onmouseout="basla(-1)"> Trkiye kupas finali bu akam</a><br> <a href="haberlinki.html" onmouseover="dur()" onmouseout="basla(-1)"> 2005'in en yeni otomobilleri</a><br> <a href="haberlinki.html" onmouseover="dur()" onmouseout="basla(-1)">Irak'ta iddet</a><br> <a href="haberlinki.html" onmouseover="dur()" onmouseout="basla(-1)">Bush Paris'te</a><br> <a href="haberlinki.html" onmouseover="dur()" onmouseout="basla(-1)">Dolar: 1,44 YTL</a><br> <a href="haberlinki.html" onmouseover="dur()" onmouseout="basla(-1)">Euro: 1,76 YTL</a><br> <a href="haberlinki.html" onmouseover="dur()" onmouseout="basla(-1)">Altn: 17,86 YTL</a><br> <a href="haberlinki.html" onmouseover="dur()" onmouseout="basla(-1)"> Ankara ile AB arasnda yeni anlama</a><br> <a href="haberlinki.html" onmouseover="dur()" onmouseout="basla(-1)"> Yeni renci affna veto</a><br> <a href="haberlinki.html" onmouseover="dur()" onmouseout="basla(-1)"> Trkiye kupas finali bu akam</a><br> <a href="haberlinki.html" onmouseover="dur()" onmouseout="basla(-1)"> 2005'in en yeni otomobilleri</a><br> <a href="haberlinki.html" onmouseover="dur()" onmouseout="basla(-1)">Irak'ta iddet</a><br> <a href="haberlinki.html" onmouseover="dur()" onmouseout="basla(-1)">Bush Paris'te</a><br> <a href="haberlinki.html" onmouseover="dur()" onmouseout="basla(-1)">Dolar: 1,44 YTL</a><br> <a href="haberlinki.html" onmouseover="dur()" onmouseout="basla(-1)">Euro: 1,76 YTL</a><br> <a href="haberlinki.html" onmouseover="dur()" onmouseout="basla(-1)">Altn: 17,86 YTL</a><br> <br><br><br><br><br> </div> </div> </body> </html>

Tamamen fakl grnmesine karn kodlarna baktmz zaman bu scriptimizin bir ncekinden farknn ok az olduunu grrz. Haberler scriptinin farklarna bir gz atarsak: Birincisi, scriptimiz bu sefer kendiliinden kaymaya balyor. Bunu
<body bgcolor="#000000" onload="basla(-1)">

180 CHIP Workshop > >

>>

Web Programcl

Web sitenizin bir kesine yerletirebileceiniz bir script. Gncel haber balklarnz ziyaretilerinize dikkat ekici bir ekilde sunun.

Bu harika etkiyi nasl elde ettiimi sorarsanz sayfanzn arka plan rengini beyaz hale getirmek sorularnza en iyi cevap olacaktr.

satr salyor. kincisi ziyaretinin bir haber ilgisini ekince ilk aklna gelen bir haber baln tklamak olacandan herhangi bir haber bal zerine gelinince kayma ileminin durmas gerekir ki ziyareti rahata diledii linke basabilsin. Bunu ise
<a href="haberlinki.html" onmouseover="dur()" onmouseout=" basla(-1)">Ankara ile AB arasnda yeni anlama</a><br>

kodundaki eventhandlerlar salyor. Ziyareti linkten ayrld anda kayma ilemi kald yerden devam edecektir. Bir dier deiiklik ise haber balklarmz pencereden geerek bir tur yaptktan sonra tekrardan alttan gzkmeye balayacaklardr. Yani sayfa ak kald srece haber balklarnn durmadan turlamalar gerekmektedir. Bunu ise
function basla(hiz){ kademe=hiz; saat = setTimeout("basla(kademe)", 40); kay(); if(baslangicY<-periyot){ basaDon(); } } <div style="position:absolute; top:0; left:190; width:0; height:0; visibility:visible; z-index:0;"> <img src="images/cinemadown.gif" alt="" width="351" height="48" border="0"><br> <img src="images/transparent.gif" width="1" height="120" border="0" alt=""><br> <img src="images/cinema.gif" alt= "" width="351" height="48" border="0"><br> </div>

satrlaryla haber balklarmz turunu tamamladktan sonra kayan katmanmzn pozisyonunu tekrardan aadan gelecek ekilde ayarlamakla yapyoruz. Burada kullanlan periyot deikeninin 300 olan deerinde kullanacanz haber balklarnn says ve font byklne gre ayarlama yapmanz gerekebilir. Scriptinize grsel ynden zenginlik katn Bu atlyede ama size sitelerinizi zenginletirmek iin ihtiyacnz olan teknik yetenei kazandrmak. Bu yetenekleri ilgin grsel zelliklerle ssleyip, daha da etkileyici sonular elde edebilirsiniz. Ben buna rnek olarak haberler scriptimize basit iki effaf GIF resmi ekledim. Scripti deneyin ve sonucuna siz karar verin. Yaptm tek ey scriptin sonuna aadaki blou eklemek.

NOT:
nmzdeki saylarda ayn alana farkl ierikleri ykleyip kaydrabilmeyi ve alanmzn yanna zgn kaydrma ubuklar koymay greceiz. Bu ayki atlyemizde yer alan rneklerin kaynak kodlarn CDdeki StudioWeb+ blmnde bulabilirsiniz. nmzdeki ay tekrar grmek dileiyle.
Numan Pekgz, numanpekgoz@chip.com.tr

< CHIP Workshop 181 <

Java Serisi

<<

Java ile Programlama


M
erhabalar. Geen dersimizde hatrlarsanz dosyalar konusuna ksa bir giri yapmtk. Bu dersimizde konuyu daha detayl ele alacaz. Geen derste detayl olarak akladmz ilk rneimiz aada yer alan Dosyalar.java rneiydi. Bu rnekte yol (path) bilgisi kullancdan alnan bir dosyann baz bilgileri inceleniyordu. Bunun iin de tabi ki ele alnan bu yol bilgisi File isimli snf yardmyla dosya nesnesine dntrlyor ve bu nesnenin metotlar yardmyla bilgiler elde edilebiliyordu. Programclk asndan dosya ilemlerini anlamann en iyi yolu Stream kavramn bilmekle balar. Stream denilen nesne, aslnda bir eyin okunmas ya da yazlmas iin bir soyutlamadr. Bu soyutlama gereklidir nk okunacak ya da yazlacak bilginin tipi her zaman deiebilir. Yani okunan ya da yazlan bilgi bir uygulamada manyetik karttan yaplabilecei gibi baka bir uygulamada da diskten yaplabilir. Burada Stream aslnda kelime anlam olarak ak anlamna gelir ve programclk anlamnda bilgi akn ifade eder. Bu yaklama gre okunacak bilgi streamden okunur ve yazlacak bilgi de streame yazlr. Bylece bilginin tipi ne olursa olsun

Blm 8

Geen ders ayrntl biimde ele almaya baladmz Dosyalarkonusuna bu ay devam ediyor ve stream ile okuyup yazmay gryoruz.
okunma ve yazlma aamasnda stream zerinde ortak bir bilgi ak salanacaktr. Bu ifadeyi kullandmz rneklerle daha iyi pekitireceimizi dnyorum. Stream kullanm ile bilgi ne olursa olsun okuma ya da yazma ekli hep ayndr:
stream a daha fazla bilgi olduka bilgi oku (yaz) stream kapat

Standart giri ve k
Java'da yukarda bahsettiimiz bu stream kavram ile standart giri ve standart ka yazma ve okuma yapmak mmkn olacaktr. Aslnda standart giri-k komut satr ortam olarak dnebilirsiniz. Fazla detaya inmeden sylemek gerekirse standart ka yazma yapma ilemi aslnda daha nceden bildiimiz Sytem.out.print(yazi) metodu ile yaplmaktadr. Arka planda aslnda System isimli snfn ierisinde tanml PrintStream trnden yaratlm ve ad out olan static bir deikeni kullanmaktayz. Ayn ekilde standart giriten program ierisine okuma yapmak da mmkndr. Aadaki rnei inceleyelim: rneimizde 7. satrda BufferedReader nesnesi yaratlmtr. Bu nesnenin balan53 CHIP Workshop > >

Stream kavram:

Dosyalar2

>>
Dosyalar2_2

Java Serisi

g fonksiyonuna parametre olarak bir InputStream nesnesi hemen orada yaratlmakta ve gnderilmektedir. InputStream nesnesi okuma yapmak amacyla kullanlr. Bu nesnenin de balang fonksiyonuna, okumann yaplaca yer olan standart giri parametre olarak verildiinden bu stream standart girie ynlendirilmi, yani standart giriten okuma yapacak ekilde hazrlanmtr. Program altrlrken aadaki resimde grld gibi komut satr ortamnda bizden bir eyler girmemizi isteyecek ve bu bilgileri daha sonra ekrana yazacaktr. Bilginin standart giriten alnmasn salayan komut da 14. satrda grlmektedir. Aslnda bu komut soyutlanm BufferedReader nesnesinin readLine metodudur ve bu nesne yukarda da anlatm olduum gibi standart girie ynlendirilmitir.

Program standart girii okumaktadr.


Metin dosyalarnn okunmas ve yazlmas: Yukarda bahsettiimiz stream kavram sayesinde standart giriten yaplan okuma ayn ekilde bir metin (text) dosyasna ynlendirilirse, o zaman dosyadan okuma yapmak da mmkn olacaktr. Ayn ekilde standart ka gnderilen bir bilgi metin dosyasna ynlendirilmi bir streame gnderilirse o zaman da metin dosyasna yazma ilemi yapm oluruz. te burada da stream soyutlamasnn kolayln grmekteyiz. Aadaki rnekte, bahsettiimiz bu dosyadan okuma ilemini grmekteyiz. Bu rneimizde de ilk nce metin dosya-

sna uygun yazma ilemi yaplabilmesi iin PrintWriter stream nesnesi yaratlmaktadr. Bu nesne de yaratlrken balang fonksiyonunda bir BufferedWriter nesnesi alr. Bu nesne de yazma akn bir dosyaya ynlendirebilmek iin balang fonksiyonunda FileWriter nesnesi almaktadr. 12. satrda yazlm olan bu komut zet olarak bir dosya ierisine yazabilecek bir stream yaratm olur. 13. ve 14. satrlarda bu akn print isimli metodu yardmyla dosyaya yazma ilemi gerekleir. Yazlan dosya ise FileWriter nesnesi yaratlrken verilmi olan CikisDosyasi.txt isimli dosyadr. Bu dosya o anda almakta olduunuz dizin ierisinde yaratlmtr. 18. satrda ise bu sefer dosyadan okuma yapabilecek bir stream yaratlmaktadr. Bu sakn readLine metodu, akn ynlendirildii yerden (bu rnek iin, dosyadan) okuma yapar ve eer okunacak bilgi kalmazsa null deerini geri dndrr. Bu nedenle 19. satrdaki while dngs sayesinde stream ierisindeki tm bilgiler okunur ve result isimli string deikenin ierisine atlr. Daha sonra aadaki resimde grld gibi bu bilgiler mesaj panosuna atlr ve kullancya gnderilir.

Dosyalar3_2

Dosyadan okunan bilgiler ekrana gnderiliyor.


Veri dosyalarnm okunmas ve yazlmas: Veri dosyalar nceki rnekte kullanm olduumuz metin dosyalarndan biraz daha farkldr. Bildiimiz gibi program yazarken deikenlerin yaratlmas srasnda onlarn

Dosyalar3 < CHIP Workshop 54 <

trlerini de belirtmek zorundayz. Daha sonra da bu deikenlere verilen deerleri de ayn trden vermek zorundayz. te veri dosyalarnda saklanan bilgiler de bu ekilde tr bilgisi ile birlikte saklanmaktadr. Yani metin dosyalarnda olduu gibi verilerin tamam string eklinde saklanmaz. Bu nedenle de veri dosyalarn bir metin editr ile ap okumaya kalktnzda bilgilerin anlalr olmadn grrz. Aadaki rnekte bir veri dosyasna birtakm bilgiler yazlmakta ve daha sonra da ayn dosyadan bu bilgiler okunmaktadr. Aadakidaki rneimizde bu sefer veri yazma ilemi yapmaktayz. Bu nedenle stream nesnemizi 9. satrda olduu gibi veri yazabilecek ve 16. satrda olduu gibi veri okuyabilecek ekilde hazrlamaktayz. 12. ve 13. satrlarda srayla yazlan double ve int veriler okunurken de yazldklar sra ile okunurlar. Veri yazma ilemini program ierisindeki bir deikenin hafzada deil de dosyada saklanmas gibi dnebiliriz. nk bazen verileri bu ekilde tr bilgileriyle saklamak ve daha sonra da ele almak gerekmektedir. Bu ilemi bir metin dosyasyla yapmaya kalkarsak verilerin sadece grntlerini saklam oluruz. Bu durumda verilerin daha sonra tekrar okunmas srasnda tr bilgileri kaybolacandan rneimizdeki 19. ve 20. satrdakilere benzer atamalar mmkn olmayacaktr. Ayrca dikkat edersek bu rneimizde try ve catch bloklarn kullanmak yerine retilecek Exception bilgisini daha farkl ele aldk. Eer bir metodun ierisinde Exception retilme ihtimali varsa rneimizde olduu gibi metodun prototipine throws anahtar szcnden sonra retilecek Exception yazlrsa, metot ierisinde bu Exception' retebilecek satrlar try bloklarnda ele almaya gerek kalmaz. Buna ilikin detayl bilgileri bir nceki dersimizde bulabilirsiniz. Dersimizin buraya kadar olan ksmnda stream yaratarak dosyalara yazma ve okuma ilemlerini grdk. Ancak bu yazmaokuma ilemlerini hep srayla yaptk. Yani bir veriyi okumadan, ondan daha sonra ge-

Java Serisi

<<

Dosyalar4

len veriyi okumak mmkn deildi. Yine ayn ekilde ilk veriyi yazmadan ikinci veriyi yazmak yukarda gsterdiimiz streamler ile olanakszd. Byle bir ilem yapmak iin daha farkl bir stream kullanmamz gerekmektedir. Dosyalara bu ekilde eriim isteine teknik olarak rastgele eriim denilir. imdi bunu inceleyelim.

Dosyalara rastgele eriim ilemi


Bir dosyaya rastgele eriim yaplabilmesi iin ncelikle RandomAccessFile snf trnden bir deiken yaratmak gerekir. Bu deiken yaratlrken 1. parametre olarak eriimin yaplaca dosya ve ikinci parametre olarak da eriim hangi modda yaplaca bilgisi verilmelidir. rnein CikisDosyasi.dat dosyamza okunabilir ve yazlabilir modda erimek istiyorsak nesneyi u ekilde yaratmamz gerekir: RandomAccessFile myFile = new RandomAccessFile(CikisDosyasi.dat, "rw"); Dosyaya rasgele eriim iin kullanlabilecek en genel modlar u ekilde zetlene-

bilir: r: Dosya sadece okuma iin alr. Herhangi bir yazma ilemi yaplrsa IOException retilir. rw: Dosya yazma-okuma iin alr. Eer dosya hali hazrda mevcut deilse yeni bir tane yaratlr. Aadaki rnekte bir dosya ierisine veriler yazldktan sonra rastgele eriilerek okunmaktadr. Burada okuma ilemi srayla yaplmamaktadr. rneimizde 8. satrda okuma-yazma modunda alan dosyamza baz double deerler ekliyoruz. Bu ekleme ilemini bir dng ile yapyoruz. Kullanc 13. satrdaki sorgu gerei -1 girmedii srece girilen bilgiler nce double trne dntrlyor ve daha sonra da dosyaya yazlyor. Bu dntrmenin nedeninin, girilen bilginin hep string olmasndan dolay olduunu nceden hatrlaynz. Daha sonra 21. satrda kullanlan seek() metodu sayesinde dosya ierisinde rastgele bir pozisyona gidiyoruz. Bu pozisyon, seek metoduna asl pozisyon * 8 olarak gnderiliyor. lk pozisyon 0 olduu iin

kullancnn istedii pozisyondan 1 kartarak seek() metoduna gnderiyoruz. Bylece kullanc gerekten istedii sayy elde edebiliyor.

File Snfnn ncelenmesi:


Java'da dosya ilemlerini ele alabileceimiz File isimli bir snf nesnesi daha vardr. Bu nesne yardmyla aslnda yine bir soyutlama yaplmakta ve bylece disk zerindeki dosya ya da dizinler platform bamsz olarak kullanlabilmektedir. nceki rneklerimizde dosyalar hep birer String ile ifade etmitik. Burada bir dosyann File nesnesi haline getirildikten sonra da baz metotlar yardmyla nasl kullanlabileceine dair bir rnek yapacaz. rneimizi incelemeden nce bir File nesnesine ait baz metotlar inceleyelim: boolean canRead(): Nesnenin ifade ettii dosyann okunabilirliini kontrol eder. boolean canWrite(): Nesnenin ifade ettii dosyann yazlabilirliini kontrol eder. boolean createNewFile(): Nesneye verilen path ierisinde bo bir dosya yaratr. Ancak bu dosyann mevcut dizin ierisinde nce55 CHIP Workshop > >

>>

Java Serisi

Dosyalar5

den yaratlmam olmas gerekir. boolean delete(): Nesnenin iaret ettii path ierisindeki dosyay siler. boolean exists(): Verilen path ierisinde yer alan dosya ya da dizinin var olup olmadna bakar. String getAbsolutePath(): Nesnenin ifade ettii dosya ya da dizinin tam yol bilgisini string olarak verir. String [] list(): Nesnenin iaret ettii dizin ierisindeki dosya ya da dizinlerin bir listesini verir. Bu liste de String trnden bir dizi olarak oluturulur. boolean mkdir(): Verilen path ierisinde yeni bir dizin yaratr. boolean renameTo(File hedef): Nesnenin iaret ettii dizin ya da dosyann ismini parametre ile verilen yeni isme dntrr.
< CHIP Workshop 56 <

Tabi ki aslnda File nesnesi yukarda zetlenenden daha fazla hazr metoda sahiptir. Ancak burada genel bilgi vermek amacyla bu kadarndan bahsetmeyi yeterli gryorum. Daha nce de sylediim gibi herhangi bir java snfnn ierdii deiken ya da metotlar bulabileceiniz dokmantasyon sayfasna (1.4.2 iin) http://java.sun.com/j2se/1.4.2/docs/a pi/index.html adresinden eriebilirsiniz. imdi File snfn kullanarak yazacamz bir rnekle konuyu daha iyi pekitirelim: rneimizde kullancdan 10. satrda alnan bir dizin bilgisi File nesnesi halinde yaratlmaktadr. Bylece program ierisinde File snfnn sunaca hazr metotlardan yararlanlabilir. Zaten 11. satrda bu metotlardan birisi olan list metodu yardmyla ve-

rilen dizin ierisindeki dosyalar String dizisi halinde elde edilir. Bu noktaya kadar dosya ilemlerini ieren balklarn ounu basit ve anlalr rneklerle incelemi olduk. Bunu tesinde daha byk uygulamalarda bu kk paralar kullanlarak konu daha iyi pekitirilecektir. Dersimizin bundan sonraki ksmnda Java programlama dilinin en gl yanlarndan birisi olan grafik arayz gelitirmeyi reneceiz. Bugn sadece kavramsal olarak giri yapmak yeterli olacaktr.

Java ile grafik arayz gelitirme:


Grafik arayz denilen ey aslnda arka planda alan programlarn daha anlalr olabilmesi amacyla, n tarafta kullancya sunulan ortamdr. Aslnda bu tr ortamlarla

Java Serisi

<<

Dosyalar6

zaten gnlk bilgisayar kullanmnda sklkla karlarsnz. rnein internette gezinebilmek amacyla kullandmz Netscape ya da Mozilla gibi web tarayclar birer grafik arayzdr. Gerekte bilgisayarmz web siteleriyle, arka tarafta eitli protokoller ve zel komutlar yardmyla iletiim kurar ve sayfalar alr ya da gnderir. Ancak n planda eitli metin alanlar, dmeler ve menler yardmyla bu ilemleri daha anlalr ekilde yapabiliriz. Artk masast kullanlan iletim sistemlerinin tamam grafik arayzleri ile donatlmtr. Bir programn giri k bilgilerine ilikin teknik detaylarn kullancdan soyutlanmas ve ona daha anlalr bir etki-

leim ortamnn sunulmas gerekir. Bu nedenle, yazlan programlar en son aamada bir grafik arayz ile desteklenir ve bylece daha kullanl hale gelir. Java'da grafik arayz gelitirmek nceden yazlm birtakm snflarn kullanlmas ile salanr. Bu snflar en genel anlamda javax.swing ve java.awt paketleri ierisinde toplanmtr. ncelikli olarak bilinmesi gereken birtakm temel kavramlar incelendikten sonra saysz grafik arayz nesnesine ilikin rnekler greceiz. Bu rneklerin tamamnda temel kavramlar kullanacaz.

avantajlarndan birisi olarak karmza kmaktadr. Aadaki rnekte ok basit bir JFrame nesnesi ile grafik uygulamalarna balayabiliriz.

Basit bir Jframe grnts


Yukardaki rnekte olduka basit bir GUI uygulamas grmekteyiz. Daha nce de sylediimiz gibi bu uygulama nceden hazr olan JFrame snfnn tretilmesi ile elde edilmektedir. imdi bu uygulamay detayl olarak ele alalm ve rnek zerinde temel kavramlara deinelim. Tretilen snfmzn balang fonksiyonu ierisinde kullandmz super metodu nceden hatrlayacamz gibi temel snfn balang metodunu armaktadr. Bu metot kendisine gnderilen bir string ifadeyi ekranda alan framein bal haline getirmektedir.

JFrame kavram:
Gelitireceimiz tm grafik arayz uygulamalar (GUI) aslnda JFrame snfndan tretilmi uygulamalar olacaktr. JFrame snf aslnda iletim sisteminden en temel pencere fonksiyonlarn alacak ekilde oluturulmutur. Kullandnz iletim sistemine gre bu fonksiyonlar ve bunlarn ekrana getirilmesi ilemleri farkllk gstereceinden siz sadece JFrame snfn treterek kendinizi bu farkllktan soyutlarsnz. Zaten ilk derslerimizde de bahsettiimiz bu teknik nesne ynelimli program gelitirmenin

JFrame Metodlar:
JFrame nesnesinden treyen bir snf JFrame'e ait olan hazr metotlar kullanabilir. Yine uygulamamzn balang metodunda kullandmz setSize, setResizable ve show metotlar bu tr metotlardandr. setSize metodu ekrana gelecek olan ara57 CHIP Workshop > >

JavaGui_2

>>

Java Serisi

JavaGui

yzn satr ve stn uzunluunu oluturur. Bu bilgiler piksel olarak metoda verilmektedir. setResizable metodu ekrana gelen arayzn fare yardmyla geniletilip geniletilemeyeceini belirlemek iin kullanlr. Parametre olarak verilen false deeri arayzn snrlarn sabit hale getirmektedir. En son satrda kullanlan show metodu arayzmzn altktan sonra ekranda grnr olmasn salar. 32 satrda uygulamamz trnden bir nesne yarattmzda balang fonksiyonu otomatik olarak arlacak ve gerekli boyut, listener ve dier ayarlar yapldktan sonra show metodu sayesinde erevemiz ekranda grnr halde olacaktr.

Listener Kavram:
11. satrda kullanlan addWindowListener komutu daha sonra detayl olarak inceleyeceimiz bir komuttur. Ancak genel olarak sylemek gerekirse bu komut uygulamamzn pencere hareketlerinin srekli
< CHIP Workshop 58 <

olarak takip edilmesini salar. Bylece arayzmz ekrana geldikten sonra pencere zerindeki arp iaretine baslmas program tarafndan yakalanacak ve otomatik olarak 13. satrdaki windowClosing metodu arlacaktr. Bu metodun ierisine de System.exit(0) komutu yazdmza gre, arayzmz ekrandayken penceresi zerindeki arp tuuna baslmas programn sonlanmas anlamna gelecektir. Program zerindeki bu tr hareketleri inceleyen nesnelere Listener denir. Bu kavram daha sonra detayl olarak ele alnacaktr. 24. satrda tantlm olan paint metodu erevemiz oluturulurken otomatik olarak arlan bir metottur. Bu metot her zaman bir Graphics nesnesini parametre olarak alr. Graphics nesnesine ait olan metotlar sayesinde uygulamamz zerine birtakm izimler ve yazlar yerletirebiliriz. 26. satrdaki metot sayesinde izilecek ya da yazlacak bilgilerin hangi renkte olaca belirlenir. Bu renk belirleme ilemi aslnda setCo-

lor isimli metoda gnderilen bir Color nesnesi ile belirlenir. Hemen o anda yarattmz Color nesnesinin balang metodunda da 3 tane tamsay girilmektedir. Bu saylar srasyla krmz yeil ve mavi bileenlerini temsil eder. Her bileen 0-255 arasnda bir deer alr ve isted,imiz renk bu 3 bileenin karmndan elde edilir. 27. satrdaki drawString metodu ile uygulamamz zerine istenilen bir yazy yazabiliriz. drawString metoduna verilen dier 2 parametre ise bu yaznn hangi piksellerden balayarak yazlacan belirler. Hzl bir ekilde giri yaptmz grafik uygulamas ile bugnk dersimizi sonlandryoruz. Bundan sonraki dersimizde bahsedilen bu genel kavramlar derinlemesine inceleyecek ve java ile grafik arayz gelitirme yolunda ilerleyeceiz. Bir sonraki derste grene dek esenlikle kalnz. Sevgi ve sayglarmla,
Erman Ayka, ermana@bilgi.edu.tr

Photoshop Serisi

<<

Herkes in Photoshop
Photoshopun farkl alanlardaki kullanm ekillerini daha iyi anlayabilmek iin bu sayfalarda yer alan Photoshop derslerinde her ay; fotoraf dzenleme, izim ve efektler eklinde 3 ayr blm altnda eitli rnekler yer alacak.

Gereki kaya dokusu


lk olarak File mens altndan New seenei ile istediiniz boyutta beyaz arka planl yeni bir belge oluturun. Ardndan Filter mens altndan Render/Clouds seeneini kullann. Bu filtreyi kullanrken n ve arka plan renginin siyah ve beyaz olarak ayarl olduundan da emin olun. imdi yine Filter mens altndan bu sefer de Sketch/Bas Relief seeneini Detail: 15, Smoothness: 1, Light: Bottom Right ayarlarn kullanarak uygulayn. Yava yava ortaya kan ta dokumuzu renklendirmek iin CTRL-U klavye ksayolunu kullanarak ulaabileceiniz Hue/Saturation aracn kullanabilirsiniz. Biz burada rnek olarak Colorize: iaretli, Hue: 25, Saturation: 25, Lightness: 0 deerlerini kullandk. Ta dokumuza son eklini vermek iin ise yeni bir katman daha oluturup Filter/Render/Clouds bir kez daha uyguladktan sonra blending modunu Overlay olarak deitirmek yeterli.

Gnbatm manzaras
Adobe Photoshop CSnin yeni zellikleri ile bunu gerekletirebilmek olduka kolay. nce istediiniz bir manzara fotorafn an. Ardndan Ctrl-J ksayollar ile 3 kere oaltn. Ortadaki katman sein ve Image/Adjustment/Photo Filter seeneini Warming Filter:85 ve Density: 100% ayarlar ile uygulayn. Yine bu katmanda iken Image/Adjustment/Brightness/Contrast seeneini Brightness: -25 ve Contrast: 50 ayarlar ile uygulayn. En stteki iki katman gizleyin. En alttaki katman sein ve Image/Adjustment/Match Color seeneini uygulayn. Luminance ve Color Intensitiy deerini 100 sein. Source: dosya ismi, Layer: Layer 1 olarak ayarladktan sonra Neutralizen yanndaki iareti kaldrn ve Fade deerini fotoraftaki koyu detaylar ancak grnecek parlakla gelecek ekilde ayarlayn. Ortadaki katman sein ve Layer/Add Layer Mask/Reveal All seeneini kullann. Layer mask (katman maskesi) seili iken seime degrade uygulayn. Bunun iin "Reflected Gradient"i sein, manzaradaki ufuk izgisi zerine tklayn ve Shift tuuna basl iken fotorafn altna doru srkleyip brakn ve bu katmann blending modunu Screen olarak deitirin. En st katman tekrar grnr yapn. Opacity deerini drerek efekti azaltabilirsiniz. Image/Adjustment/Brightness/Contrast seeneini tekrar kullanarak etkiyi artrabilirsiniz.

41 CHIP Workshop > >

>>

Photoshop Serisi

Parazitli televizyon
lk olarak zerine parazit eklemek istediiniz grntnz an. Filter mens altnda yer alan Texture/Grain seeneini Intensity: 55, Contrasts: 40 ve Grain Type: Stippled ayarlar ile kullann. Yeni bir layer daha oluturup siyah renk ile doldurun. Bu yeni katmandayken Filter mens altndan Noise/Add Noise seeneini Amount: 80%, Distribution: Uniform ve Monochromatic iaretli olarak uygulayp blending modunu da Screen olarak deitirin. imdi yeni bir Hue/Saturation ayar katman eklemek iin Layer/New Adjustment Layer/Hue/Saturation seeneini kullann. OK tuuna tklayn ve ikinci pencerede ayarlar Colorize: iaretli, Hue: 200, Saturation: 10 ve Lightness: 50 olacak ekilde ayarlayn. lk atnz katman sein ve Filter/Distort/Shear seeneini sein. ekildeki gibi ekleyeceiniz 10-20 yeni noktay saa sola doru ekip ilemi tamamlayabilirsiniz.

Labirent grntler
Resmi Ctrl-Shift-U ksayolu ile siyah beyaz hale dntrn. imdi Filter mens altndan Sharpen/Sharpen More seeneini birka kez tekrar etmeniz gerekecek. Bunun iin Ctrl-F ksayolunu tekrar kullanabilirsiniz. Uzaktan siyah/beyaz bir fotoraf andran grnt yakndan bir labirent gibi grnecektir.

Sualt resimleri
ncelikle renklerini dzeltmek istediiniz fotoraf Photoshop iinde an. Ctrl-J klavye ksayolu ile katmann bir kopyasn kartn. Ardndan Filter mens altndan Blur/Average seeneini uygulayn ve Ctrl-I klavye ksayolunu kullanarak resmi negatif hale dntrn ve bu katmann blending modunu Overlay olarak deitirin. imdi Layer mens altndan New Adjustment Layer/Photo Filter seeneini sein. Filter seeneini Warming Filter (85) olacak ekilde, Density deerini ise %25, %75 aras bir deere getirin. Preserve Luminosity seeneini iaretleyin ve OK tuuna tklayn. Resim katmann sein, Image mens altndan Adjustments/Shadow/Highlight seeneini kullann ve Highlights deerini istediiniz sonucu alana kadar artrn.
< CHIP Workshop 42 <

You might also like