Bölüm 3 - Java Appletlerine Giriş İçerik 3.1 3.2 3.3 3.4 3.5 3.6 Giriş Java 2 Software Development Kit’den Birkaç Applet Örneği Basit Java Appleti: Bir String ifadeyi Applete Yazmak Çizgi Çizmek ve String Yazmak İki Sayıyı Eklemek Java Applet Internet ve World Wide Web Kaynakları 3.1 Giriş • Applet – Program aşağıdaki programların birisiyle çalışır. • appletviewer (appletler için test aracı) • Web browser (IE, Communicator) – Applet içeren HTML (Hypertext Markup Language) dökümanlarını çalıştırır. 3.2 Java 2 Software Development Kit’den Birkaç Applet Örneği • Örnek Appletler – Java 2 Software Development Kit (J2SDK) içinde gelen örnekelere bakacağız. – Kaynak kodlar (.java dosyası) • Yeni fikirlerin akla gelmesi açısından önemli – J2SDK demo kalsörü içinde birçok örnek görülebilir. – J2SDK aşağıdaki adresten indirilebilr. java.sun.com/j2se/1.4.1/ 3.2 Java 2 Software Development Kit’den Birkaç Applet Örneği • Appletlerin çalışması – Komut isteminden appletinizin bulunduğu yere gelin. c:\j2sdk1.4.1\demo\applets cd appletDirectoryName – Appleti çalıştıracak bir HTML dasyası olacak. – Yazın “ appletviewer example1.html” • appletviewer html dosyayı yükler. • HTML dosyasından hangi appletin çalışacağına karar verilir. – Applet çalışır, Reload ve Quit komutları Applet menusünün altında bulunur. 3.2 Java 2 Software Development Kit’den Birkaç Applet Örneği • player "X“ olarak oyuna başlarsınız. Fig. 3.2 Sample execution of applet TicTacToe. 3.2 Java 2 Software Development Kit’den Birkaç Applet Örneği Fig. 3.4 Sample execution of applet DrawTest. Mouse hareketleri ile şekillerin çizildiği alan. Tıkalanılarak istediğiniz renk seçilir. Bu GUI componentleri radio buttons olarak bilinir. Component tıkalanır Lines veya Points seçilir. Bu GUI component combo box, choice veya drop-down list olarak bilinir. 3.2 Java 2 Software Development Kit’den Birkaç Applet Örneği • Demonstrates 2D drawing capabilities built into Java2 Click a tab to select a twodimensional graphics demo. Try changing the options to see their effect on the demonstration. 3.3 Basit Java Appleti: Bir String ifadeyi Applete Yazmak • Şimdi, kendi appletimizi oluşturacağız. – Demodakiler gibi örnek yapmak için biraz zamanımız var. – Birçok farklı teknikleri bilmemiz gerekir. • Programımız – Yeni bir applet oluşturacağız ve bu applet aşağıdakini yazacak; "Welcome to Java Programming!" – Applet ve HTML dosyaları gösterilecek, sonra satır satır inceleme yapacağız. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 // Fig. 3.6: WelcomeApplet.java // A first applet in Java. // Java packages import java.awt.Graphics; import javax.swing.JApplet; import allows us to use predefined classes (allowing us to use applets and import class in Graphics graphics, this case). // // import class JApplet Java applet public class WelcomeApplet extends JApplet { extends allows us to inherit the // draw text on applet’s background public void paint( Graphics g ) capabilities of class JApplet. { // call superclass version of method paint super.paint( g ); // draw a String at x-coordinate 25 and y-coordinate 25 g.drawString( "Welcome to Java Programming!", 25, 25 ); } // end method paint } // end class WelcomeApplet Method paint is guaranteed to be called in all applets. Its first line must be defined as above. Program Output 3.3 1 2 Basit Java Appleti: Bir String ifadeyi Applete Yazmak // Fig. 3.6: WelcomeApplet.java // A first applet in Java. – Yorumlar • Kaynak kodun ismi ve appletin tanıtımı 5 6 import java.awt.Graphics; import javax.swing.JApplet; // import class Graphics // import class JApplet – Önceden tanımlı sınıfları programımıza dahil etme • Bir applet oluşturacağın zaman, JApplet sınıfını programına dahil etmelisin. (package javax.swing) • Grafik çizimi yapabilmek için Graphics sınıfını (package java.awt) programına dahil etmelisin – Çizgi, dörtgen, oval çizip yazı yazabilmek için 3.3 Basit Java Appleti: Bir String ifadeyi Applete Yazmak – Appletde de en az bir tane sınıf tanımlanmalı (uygulama örneğinde olduğu gibi) 8 public class WelcomeApplet extends JApplet { – class WelcomeApplet için class tanımlaması • Anahtar kelime class dan sonra class ismi – class isminden sonra extends • Yeni classı türeteceğin ana class (JApplet) – JApplet : superclass (ana class) – WelcomeApplet : altclass (türemiş class) • WelcomeApplet classı JApplet in method ve datalarına sahip 3.3 Basit Java Appleti: Bir String ifadeyi Applete Yazmak 8 public class WelcomeApplet extends JApplet { – Sınıf JApplet bizim yerimize tanımlanmış • Birisi kalkmış “Bir şeyin applet olması için neler lazım“ tanımlamış – Applets 200 fazla metodda sahip! • extends JApplet – Miras yolu ile meodalarını yeniden yazmaya gerek olmadan programıma dahil ediyorum. • JApplet sınıfının tüm detayını bilmeme gerek yok. 3.3 Basit Java Appleti: Bir String ifadeyi Applete Yazmak 8 public class WelcomeApplet extends JApplet { – Class WelcomeApplet is a tasarım • appletviewer veya browser WelcomeApplet sınıfının objesini oluşturur. – Anahtar kelime public gerekli. – Bir dosyada sadece bir tane public class olur. – public class ismi dosya ismi ile aynı olamlıdır. 3.3 Basit Java Appleti: Bir String ifadeyi Applete Yazmak 11 public void paint( Graphics g ) – Sınıfımız JApplet sınıfından paint metodunu miras alır. • paint metodunun default olarak gövde kodu yok. • Bizim sınıfımızdaki paint metodu yeniden tanımlanur.(override) – Methods paint, init, ve start • Her appletin bu üç metoda ihtiyacı olamayabilir. – İhtiyacı olduklarını yeniden tanımlar. 3.3 11 Basit Java Appleti: Bir String ifadeyi Applete Yazmak public void paint( Graphics g ) – Method paint • Satır 11-19 paint metodununa aittir. • Ekrana grafik çizer. • void metodun işi bittiğinde hiçbirşey geri döndermeyeceği anlamındadır. • Parentezlar parametre listesini tanımlamak içindir. – Normalde, programcı metoda verilerini parametre yolu ile geçirir JOptionPane.showMessageDialog olduğu gibi • paint parametrelerini otomatik olarak alır. – Graphics objesi paint tarafından kullanılır. 3.3 14 Basit Java Appleti: Bir String ifadeyi Applete Yazmak super.paint( g ); – superclass JApplet tarafından paint metodu çağrılır. – Her applet’in paint metodununu ilk satırında olmalıdır. 17 g.drawString( "Welcome to Java Programming!", 25, 25 ); – Paint in gövde kodları • Method drawString (Graphics sınıfının ) • Graphics türünnde yaratılmış g objesi • Method ismi, parametreleri için parantez – Birinci parametre: yazılacak String – İkincisi: x koordinatı (in pixels) – Üçüncüsü: y koordinatı (in pixels) – Java koordinat sistemi • Pixel olarak ölçeklenir. • Üst sol (0,0) 3.3 Basit Java Appleti: Bir String ifadeyi Applete Yazmak • Appleti çalıştırma – Derleme • javac WelcomeApplet.java • Hata yoksa, bytecode lar WelcomeApplet.class içinde saklanır. – HTML dosyası yüklemek • Dosyayı appletviewer veya browsera yüklemek • .htm or .html bitebilir. – Appleti çalıştırma • HTML dosyasında hangi applet varsa o applet çalışır. 3.3 1 2 3 4 Basit Java Appleti: Bir String ifadeyi Applete Yazmak <html> <applet code = "WelcomeApplet.class" width = "300" height = "45"> </applet> </html> – Basit HTML dosyası (WelcomeApplet.html) • Genellikle .class dosyası ile aynı kalsörde bulunur. • Hatırlayın, .class dosyası derlemeden sonra oluşur. – HTML kodları (tagler) • Genellikle çiftler halinde yazılır. • < ile başlar . > ile biter. – Satır 1 ve 4 – başlangıç bitiş HTML tagleri – Satır 2 - <applet> tagine başlayış • Applet için özel bir tag • Appleti görüntülemek için width ve height parametreleri ister. – Satır 3 - </applet> taginin bitişi 3.3 1 2 3 4 Basit Java Appleti: Bir String ifadeyi Applete Yazmak <html> <applet code = "WelcomeApplet.class" width = "300" height = "45"> </applet> </html> – appletviewer sadece <applet> taglerinden anlar. • Gerisini iptal eder. • Küçük tarayıcı – Appleti çalıştırma • appletviewer WelcomeApplet.html • .class dosyası çalışır. 3.3 Basit Java Appleti: Bir String ifadeyi Applete Yazmak • Web browser da appletin çalışması 3.4 Çizgi Çizmek ve String Yazmak • Daha fazla applet – Birinci örnek • İki satırlık text yazdırmak • drawString kullanarak iki satırlık text yazdırmak. – İkinci örnek • Method g.drawLine(x1, y1, x2, y2 ) – (x1, y1)’den (x2, y2)’ye kadar çizgi çizmek – Hatırla (0, 0) appletin sol üst kısmını işaret eder. • drawLine tkullanarak text in altını ve üstünü çerçeveleyelim. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 // Fig. 3.9: WelcomeApplet2.java // Displaying multiple strings in an applet. // Java packages import java.awt.Graphics; import javax.swing.JApplet; // import class Graphics // import class JApplet public class WelcomeApplet2 extends JApplet { // draw text on applet’s background public void paint( Graphics g ) { // call superclass version of method paint super.paint( g ); // draw two Strings at different locations g.drawString( "Welcome to", 25, 25 ); g.drawString( "Java Programming!", 25, 40 ); WelcomeApplet2.j ava 1. import 2. Class WelcomeApplet2 (extends JApplet) 3. paint 3.1 drawString } // end method paint } // end class WelcomeApplet2 The two drawString3.2 drawString on same In x coordinate, statements simulate a newline. but pixels down fact, the concept of lines of15 text does not exist when drawing strings. 1 2 3 4 <html> <applet code = "WelcomeApplet2.class" width = "300" height = "60"> </applet> </html> HTML file Program Output 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 // Fig. 3.11: WelcomeLines.java // Displaying text and lines // Java packages import java.awt.Graphics; import javax.swing.JApplet; // import class Graphics // import class JApplet public class WelcomeLines extends JApplet { // draw lines and a string on applet’s background public void paint( Graphics g ) { // call superclass version of method paint super.paint( g ); // draw horizontal line from (15, 10) to (210, 10) g.drawLine( 15, 10, 210, 10 ); // draw horizontal line from (15, 30) to (210, 30) g.drawLine( 15, 30, 210, 30 ); // draw String between lines at location (25, 25) g.drawString( "Welcome to Java Programming!", 25, 25 ); WelcomeLines.ja va 2. Class WelcomeLines (extends JApplet) 3. paint 3.1 drawLine 3.2 drawLine Draw horizontal lines with drawLine (endpoints have same 3.3 drawString y coordinate). } // end method paint } // end class WelcomeLines Program Output 1 2 3 4 <html> <applet code = "WelcomeLines.class" width = "300" height = "40"> </applet> </html> HTML file 3.4 Çizgi Çizmek ve String Yazmak • Graphics sınıfının drawLine metodu – Başlangıç x ve y koordinatı – Bitiş x ve y koordinatı 3.5 İki Sayıyı Eklemek • Bir sonraki applet – Bu sefereki küçük uygulamamız; iki sayının toplanması • Sayıları ondalıklı kullanacağız. – İlkel tipler • double • float – Programı görelim, sonra satır satır inceleyelim... 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 2 3 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 // Fig. 3.13: AdditionApplet.java // Adding Adding two numbers. // two floating-point floating-point numbers import java.awt.Graphics; // import class Graphics // Java packages import java.awt.Graphics; // import class Graphics import javax.swing.*; //extends import package public class AdditionApplet JAppletjavax.swing { double sum; AdditionApplet. java // sum of the values entered by the user public class AdditionApplet extends JApplet { double sum; // sum of values entered by user public void init() * allows any class in the { // initialize applet by obtaining valuespackage from user to be used. String firstNumber, // first string entered by user public void init() secondNumber; // second string entered by user { doublefirstNumber; number1, // first number to add String // first string entered by user number2; // second number to String secondNumber; // second string entered add by user // read in first double number1; firstNumber = double number2; Field sum may be used anywhere number fromnumber user to add // first in the class, even in other methods. // second number to add JOptionPane.showInputDialog( Type double can // obtain first first numberfloating-point from user "Enter value" ); point numbers. firstNumber = JOptionPane.showInputDialog( first floating-point value" //"Enter read in second number from user); secondNumber = // obtain second number from user JOptionPane.showInputDialog( secondNumber = JOptionPane.showInputDialog( "Enter second floating-point value" ); "Enter second floating-point value" ); store floating 1. import 2. Class AdditionApplet (extends JApplet) 3. Fields 4. init 4.1 Declare variables 4.2 showInputDialog 4.3 parseDouble // convert numbers from type String to type double number1 = Double.parseDouble( firstNumber ); number2 = Double.parseDouble( secondNumber ); 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 1 2 3 4 31 // //add addnumbers the numbers sum = number1 + number2; sum = number1 + number2; 32 33 } } // end method init 34 35 public void paint( Graphics on g )applet’s background // draw results in a rectangle { public void paint( Graphics g ) { // draw the results with g.drawString // call superclass version paint g.drawRect( 15, 10, 270,of20method ); super.paint( g ); 36 37 38 39 g.drawString( "The sum is " + sum, 25, 25 ); 40 } 41 } 1 2 3 4 5. Draw applet contents 5.1 Draw a rectangle 5.2 Draw the results // draw rectangle starting from (15, 10) that is 270 // pixels wide and 20 pixels tall g.drawRect( 15, 10, 270, 20 ); <html> <applet code="AdditionApplet.class" width=300 height=50> // draw results as a String at (25, 25) </applet> g.drawString( "The sum is " + sum, 25, 25 ); </html> } // end method paint } // end class AdditionApplet drawRect takes the upper left coordinate, width, and height of the rectangle to draw. HTML file <html> <applet code = "AdditionApplet.class" width = "300" height = "65"> </applet> </html> Program Output 3.5 İki Sayıyı Eklemek – Satır 1-2: Yorum 5 import java.awt.Graphics; // import class Graphics – Satır 5: imports class Graphics • Eğer kodlarda paket ve sınıf ismi tam kullanılırsa import ifadesine gerek yoktur. public void paint ( java.awt.Graphics g ) 6 import javax.swing.*; // import package javax.swing – Satır 8: javax.swing paketinin özel kullanımı • * javax.swing içindeki tüm sınıflar erişilebilir. – JApplet ve JOptionPane kullanılmış • * bütün sınıfları yüklemez. – Derleyici sadece programda kullanılan sınıfları yükler. 3.5 8 İki Sayıyı Eklemek public class AdditionApplet extends JApplet { – Sınıf tanıtımı • javax.swing paketindeki JApplet ten miras alınmış. 9 double sum; // sum of values entered by user – Sınıf üye değişkeni tanımlama • Sınıf gövdesinde tanıtılmalı, metod içinde tanıtılmamalı – Metodda tanıtılan değişkenler yerel (lokal) değişkenlerdir. – Metodda tanıtılan değişken sadece metod içinde kullanılabilir. • Sınıf üyeleri sınıfın istenilen yerinde kullanılırlar. • Varsayılan değeri (0.0 in this case) 3.5 9 double sum; İki Sayıyı Eklemek // sum of values entered by user – İlkel tip double 12 public void init() – Method init • Appletteki sınıfının ve üyelerinin ilk değer aldığı metod. • Applet çaışırken ilk çağrılan metod. • İlk satır herzaman yukardaki gibi gözükür. – Geirye birşey döndürmez (void) ve herhangi bir argümanda almaz 13 { init metoduna başlangıç 3.5 14 15 16 17 18 İki Sayıyı Eklemek String firstNumber; String secondNumber; // first string entered by user // second string entered by user double number1; double number2; // first number to add // second number to add – Değişken deklare etme – İki tür değişken vardır • Referans değişkenler (referanslar) – Objeyi referans eder. (bellekte konum içerir) • Objeler sınıf tanımlamasında tanımlanırlar. • Birçok data ve metodlar içerirler. – paint metodu Graphics objesinden g isminde referans alır. – Bu referans Graphics objesinin metodlarını çağırır. • ilkel tipler (değişkenler) – Sadce bir tane veriyi tutarlar. 3.5 14 15 16 17 18 İki Sayıyı Eklemek String firstNumber; String secondNumber; // first string entered by user // second string entered by user double number1; double number2; // first number to add // second number to add – Referans ve değişkenler arasındaki farklılıklar • Eğer veri tipi sınıf ismi ise, bu referanstır. – String bir sınıftır. – firstNumber, secondNumber • Eğer veri tipi ilkel tip ise, bu değişkendir. – double bir ilkel tiptir. – number1, number2 3.5 21 22 İki Sayıyı Eklemek firstNumber = JOptionPane.showInputDialog( "Enter first floating-point value" ); • Method JOptionPane.showInputDialog • Kullanıcıdan string bir girdi dönderir. • Text alan yazılır ardından OK basılır. – Eğer yalnış tip girdi ise hata verir. • Kullanıcı girişini string olarak geri dönderir. – Satır 25-26: Yukardaki aynı işi secondNumber için yapar. 3.5 29 30 İki Sayıyı Eklemek number1 = Double.parseDouble( firstNumber ); number2 = Double.parseDouble( secondNumber ); – static method Double.parseDouble • String ifadeyi double çevirir. • Static method sentaksını hatırlayın. – Classİsmi.methodİsmi( arguments ) 3.5 35 İki Sayıyı Eklemek } // end method init – Init metodunun bitişi • appletviewer (veya browser) start metodunu çağırır. • start ugenellikle çoklu kanallama (multithreading) de kullanılır. – Bölüm 16 dan bakılabilir. – Biz bu programımızda onu deklare etmediğimizden kullanılmıyor. • Sonra, method paint çağrılır. 45 g.drawRect( 15, 10, 270, 20 ); – Method drawRect( x1, y1, width, height ) • Sol üst koordinatı (x1, y1) olan ve genişliği (width) ve yüksekliği (height) • Satır 45 (15, 10) noktasından başlayıp genişliği 270 pixel , yüksekliği 20 pixel olan bir dikdörtgen çizer. 3.5 48 İki Sayıyı Eklemek g.drawString( "The sum is " + sum, 25, 25 ); – g referansını kullanarak Graphics objesinin drawString metoduna "The sum is" + sum yollanıyor. – sum stringe çevrildi. • sum paint metodunun içinde tanımlanmadığı halde kullanıldı. – Local değişken değil 40 Örnek Programlar • for • while • do while 2003 Prentice Hall, Inc. All rights reserved. 41 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 Outline // Fig. 5.1: WhileCounter.java // Counter-controlled repetition. import java.awt.Graphics; WhileCounter.ja va import javax.swing.JApplet; Control-variableCondition name is counter tests for counter’s final value Control-variable initial value is 1 public class WhileCounter extends JApplet { // draw lines on applet’s background public void paint( Graphics g ) { super.paint( g ); // call paint method inherited from JApplet int counter = 1; Line 14 Line 16 Increment Line for counter 18 // initialization while ( counter <= 10 ) { // repetition condition g.drawLine( 10, 10, 250, counter * 10 ); ++counter; // increment } // end while } // end method paint } // end class WhileCounter 2003 Prentice Hall, Inc. All rights reserved. 42 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 // Fig. 5.2: ForCounter.java // Counter-controlled repetition with the for statement. import java.awt.Graphics; import javax.swing.JApplet; Condition tests for Control-variable namecounter’s is counterfinal value public class ForCounter extends JApplet { Control-variable initial value is 1 applet’s background Increment for counter // draw lines on public void paint( Graphics g ) { super.paint( g ); // call paint method inherited from JApplet // for statement header includes initialization, // repetition condition and increment for ( int counter = 1; counter <= 10; counter++ ) g.drawLine( 10, 10, 250, counter * 10 ); Outline ForCounter.java Line 16 int counter = 1; Line 16 counter <= 10; Line 16 counter++; } // end method paint } // end class ForCounter 2003 Prentice Hall, Inc. All rights reserved. 43 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 // Fig. 5.7: DoWhileTest.java // Using the do...while statement. import java.awt.Graphics; Outline DoWhileTest.jav a import javax.swing.JApplet; Oval is drawn before testing counter’s final value public class DoWhileTest extends JApplet { Lines 16-20 // draw lines on applet public void paint( Graphics g ) { super.paint( g ); // call paint method inherited from JApplet int counter = 1; // initialize counter do { g.drawOval( 110 - counter * 10, 110 - counter * 10, counter * 20, counter * 20 ); ++counter; } while ( counter <= 10 ); // end do...while } // end method paint } // end class DoWhileTest 2003 Prentice Hall, Inc. All rights reserved. 44 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 // Fig. 5.9: SwitchTest.java // Drawing lines, rectangles or ovals based on user input. import java.awt.Graphics; Outline SwitchTest.java import javax.swing.*; public class SwitchTest extends JApplet { int choice; // user's choice of which shape to draw // initialize applet by obtaining user's choice public void init() { Get user’s String input; // user's input Lines 16-21: Getting user’s input input in JApplet // obtain user's choice input = JOptionPane.showInputDialog( "Enter 1 to draw lines\n" + "Enter 2 to draw rectangles\n" + "Enter 3 to draw ovals\n" ); choice = Integer.parseInt( input ); // convert input to int } // end method init // draw shapes on applet's background public void paint( Graphics g ) { super.paint( g ); // call paint method inherited from JApplet for ( int i = 0; i < 10; i++ ) { // loop 10 times (0-9) 2003 Prentice Hall, Inc. All rights reserved. 45 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 switch ( choice ) { // determine shape to draw user input (choice) is Outline case 1: // draw a line switch statement determines controlling expression g.drawLine( 10, 10, 250, 10 + i * 10 ); SwitchTest.java which case label to execute, break; // done processing case case 2: // draw a rectangle g.drawRect( 10 + i * 10, 10 + i 50 + i * 10, 50 + i * 10 ); break; // done processing case depending on controlling expression Line 32: controlling * 10, expression case 3: // draw an oval g.drawOval( 10 + i * 10, 10 + i * 10, 50 + i * 10, 50 + i * 10 ); break; // done processing case Line 32: switch statement Line 48 default: // draw string indicating invalid value entered g.drawString( "Invalid value entered", 10, 20 + i * 15 ); } // end switch default case for invalid entries } // end for } // end method paint } // end class SwitchTest 2003 Prentice Hall, Inc. All rights reserved. 46 Outline SwitchTest.java 2003 Prentice Hall, Inc. All rights reserved. 47 Outline SwitchTest.java 2003 Prentice Hall, Inc. All rights reserved. 3.6 Java Applet Internet ve World Wide Web Kaynakları • Birçok Java appletlerine ulaşılabilir – java.sun.com/applets/ – Birçok kaynak kod ve free appletler indirilebilir. – Sun site developer.java.sun.com/developer • Tartışma oturumları, eğitici slaytlar, tutoriallar, makaleler..vb. • Kayıt gerekli – www.jars.com • Appletler oylanıyor., top 1, 5 ve yüzde 25 • Web deki en iyi appletleri bu sayfadan göreblirsiniz.