Bölüm 4 – Kontrol İfadeleri:1.kısım Outline 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10 4.11 4.12 4.13 Giriş Algoritmalar Pseudocode Kontrol İfadeleri if tek-seçimli ifadeler if else seçimli ifadeler while döngü ifadeleri Algoritmaların Tasarımı : Örnek Çalışma 1(Sayaç Kontrollü Döngüler) Algoritmaların Tasarımı: Örnek Çalışma 2 (SonlandırcıKontrollü Döngüler) Algoritmaların Tasarımı: Örnek Çalışma 2 (İçiçe Kontrollü Yapılar) Birleşik Atama Operatörleri Artırma ve Azaltma Operatörleri İlkel Tipler 4.1 Giriş • Bu bölümde Kontrol İfadelerini öğreneceğiz. – Yapısal programlama prensibi – Kontrol ifadeleri objelerin yapımına yardım eder. (Chapter 8) 4.2 Algoritmalar • Algoritma – Belli bir sırada takip edilen işler • İşler gerçekleştirilir. • Sıra, hangi işin gerçekleştireceğini tespit eder. • Program kontrolü – Kontrol ifadeleri bu sıranın oluşumuna yardım eder. 4.3 Pseudocode • Pseudocode (Program tasarımı) – Algoritma geliştirmek için kullanılan esnek bir dil – Bilgisayarda çalıştırılamaz – Algoritmayı yapanlara kurallardan bağımsız ifade etmeyi sağlar. 4.4 Kontrol İfadeleri • Sıralı çalışma – Program kodları baştan başlayıp satır satır çalışır. • Kontrolün transferi – 3 tip kontrol ifadesi bu kodlar arasında transfer sağlar. • Sıralı yapılar • Seçimli yapılar • Döngüsel yapılar • Akış diagramı – İş akışını modeller • İşi tanımlayan semboller • İş sırasını gösteren oklar Notu toplama ekle Sayacı 1 artır Java karşılığı: toplam = toplam + not; Java karşılığı: sayac = sayac + 1; Fig 4.1 Sıralı akış diyagramı. Ja va Keyw ord s abstract assert boolean break case catch char class default do double else final finally float for implements import instanceof int long native new package protected public return short strictfp super switch synchronized throw throws transient try volatile while Keywords that are reserved, but not currently used const goto Fig. 4.2 Ja va keyw o rd s. byte continue extends if interface private static this void 4.4 Kontrol İfadeleri • Java sıralı akışa sahiptir. • Java 3 farklı seçim komutu sağlar. – if – If…else – switch • Java 3 farklı döngü komutu sağlar. – while – do…while – for • Bu komutların herbiri ayrılmış kelimelerdir. 4.5 if tek-seçimli durum • Tek-giriş/tek-çıkış kontrol ifadeleri • Şart doğru (true) olduğu zaman komut çalışır. [not >= 60] print “Geçti” [not < 60] Fig 4.3 if tek-seçimli durum iş iş akış diyagramı. 4.6 if…else seçimli durum • Şart doğru (true) olduğu zaman komut çalışır. • Şart yanlış (false) olduğu zaman başka bir komut çalışır. • Şart operatörü (?:) • İçiçe if…else ifadeleri [not < 60] print “Kaldı” [not >= 60] print “Geçti” Fig 4.4 if…else iki seçimli durumlar için akış diyagramı. 4.7 while Tekrarlama İfadeleri • Şart doğru (true) olduğu müddetçe dögüye ait komutları çalıştır. birleşim karar [ürün <= 1000] Ürün değerinin 2 katını al [ürün > 1000] Java karşılığı: ürün = 2 * ürün; Fig 4.5 while tekrarlama ifadelerinin akış dyagramı. 4.8 Algoritmaların Tasarlanması: Örnek Çalışma 1 (Kontrollü Sayaç Döngüsü) • Sayaç – İfadelerin kaç defa tekrar ettiğini kontrol eden değişken • Ortalama1.java not ortalamasını hesaplar. – Döngüyü kontrol için sayaç kullanılır. Toplam değişkenini sıfırla Sayaç değişkenine 1 ata Syaç 10 ‘a eşit yada küçük olduğu müddetçe Diğer notu gir Toplamı not kadar artır Sayacı 1 artır Toplamı 10 ‘a bölerek sınıf ortalamasına ata Sınıf ortalamasını yazdır Fig. 4.6 Pseudocode algoritması : sınıf ortalamasını bulmak için kontrollü sayaç döngüsü kullanılır. 1 // Fig. 4.6: GradeBook.java 2 // GradeBook class that solves class-average problem using 3 // counter-controlled repetition. 4 import java.util.Scanner; // program uses class Scanner 17 Outline 5 6 public class GradeBook 7 { 8 private String courseName; // name of course this GradeBook represents 9 10 // constructor initializes courseName 11 public GradeBook( String name ) 12 { courseName = name; // initializes courseName 13 14 • (1 of 3) } // end constructor Assign a value to instance variable courseName 15 16 // method to set the course name 17 public void setCourseName( String name ) 18 { courseName = name; // store the course name 19 20 • GradeBook .java Declare method setCourseName } // end method setCourseName 21 22 // method to retrieve the course name 23 public String getCourseName() 24 { 25 26 return courseName; } // end method getCourseName 27 2003 Prentice Hall, Inc. All rights reserved. Declare method getCourseName 28 // display a welcome message to the GradeBook user 29 public void displayMessage() 30 { Outline 18 Declare method displayMessage 31 // getCourseName gets the name of the course 32 System.out.printf( "Welcome to the grade book for\n%s!\n\n", 33 getCourseName() ); 34 } // end method displayMessage • GradeBoo k.java 35 36 // determine class average based on 10 grades entered by user 37 public void determineClassAverage() 38 { • (2 of Declare method determineClassAverage 3) 39 // create Scanner to obtain input from command window 40 Scanner input = new Scanner( System.in ); 41 42 int total; // sum of grades entered by user 43 int gradeCounter; // number of the grade to be entered next 44 int grade; // grade value entered by user 45 int average; // average of grades Declare and initialize Scanner variable input 46 47 // initialization phase 48 total = 0; // initialize total 49 gradeCounter = 1; // initialize loop counter 50 2003 Prentice Hall, Inc. All rights reserved. Declare local int variables total, gradeCounter, grade and average 51 // processing phase 52 while ( gradeCounter <= 10 ) // loop 10 times 53 { Outline 19 while loop iterates as long as gradeCounter <= 10 54 System.out.print( "Enter grade: " ); // prompt 55 grade = input.nextInt(); // input next grade 56 total = total + grade; // add grade to total 57 gradeCounter = gradeCounter + 1; // increment counter by 1 58 } // end while 59 Increment the counter variable gradeCounter 60 // termination phase 61 average = total / 10; // integer division yields integer result 62 Calculate average grade 63 // display total and average of grades 64 System.out.printf( "\nTotal of all 10 grades is %d\n", total ); 65 System.out.printf( "Class average is %d\n", average ); 66 } // end method determineClassAverage 67 68 } // end class GradeBook 2003 Prentice Hall, Inc. All rights reserved. Display results • GradeBoo k.java • (3 of 3) 1 // Fig. 4.7: GradeBookTest.java 2 // Create GradeBook object and invoke its determineClassAverage method. 23 Outline 3 4 public class GradeBookTest 5 { 6 public static void main( String args[] ) 7 { Create a new GradeBook object 8 // create GradeBook object myGradeBook and 9 // pass course name to constructor 10 GradeBook myGradeBook = new GradeBook( "CS101 Introduction to Java Programming" ); 11 12 • GradeBook Test.java Pass the course’s name to the GradeBook constructor as a string 13 myGradeBook.displayMessage(); // display welcome message 14 myGradeBook.determineClassAverage(); // find average of 10 grades } // end main 15 16 17 } // end class GradeBookTest Welcome to the grade book for CS101 Introduction to Java Programming! Enter Enter Enter Enter Enter Enter Enter Enter Enter Enter grade: grade: grade: grade: grade: grade: grade: grade: grade: grade: 67 78 89 67 87 98 93 85 82 100 Total of all 10 grades is 846 Class average is 84 2003 Prentice Hall, Inc. All rights reserved. Call GradeBook’s determineClassAverage method 4.9 Algoritmaların Tasarlanması: Örnek Çalışma 2 (Sonlandırıcı-Kontrollü Döngüler) • Sonlandırıcı değer – Veri girişini sonlandırmak amaçlı kullanılır. • Ortalama2.java döngünün sayısı belli değil – Kullanıcı sonlandırıcı değere (-1) basarak döngüyü bitiriyor. Toplam değişkenini sıfırla Sayaç değişkenine 1 ata İlk not girişi yap (sonlandırıcı değer de mümkün) Kullanıcı sonlandırıcı değer girmediği müddetçe Toplamı not değeri kadar artır Sayacı 1 artır Yeni notu gir(sonlandırcı değer de mümkün) Eğer sayaç 0 eşit değilse Ortalamayı toplamı sayaca bölerek bul Ortalamayı yazdır else “Hiçbir not girilmedi” yazdır Fig. 4.8 Pseudocode algoritması : sınıf ortalamasını bulmak için sonlandırıcı kontrollü döngüs kullanılır. 1 // Fig. 4.9: GradeBook.java 2 // GradeBook class that solves class-average program using 3 4 // sentinel-controlled repetition. import java.util.Scanner; // program uses class Scanner 5 6 7 public class GradeBook { Outline 8 9 10 private String courseName; // name of course this GradeBook represents 11 public GradeBook( String name ) 12 13 14 { // constructor initializes courseName courseName = name; // initializes courseName } // end constructor • GradeB ook.jav a • (1 of 3) Assign a value to instance variable courseName 15 16 // method to set the course name 17 public void setCourseName( String name ) 18 { 19 26 courseName = name; // store the course name 20 21 22 } // end method setCourseName 23 24 25 public String getCourseName() { return courseName; 26 27 } // end method getCourseName Declare method setCourseName // method to retrieve the course name 2003 Prentice Hall, Inc. All rights reserved. Declare method getCourseName 28 // display a welcome message to the GradeBook user 29 30 public void displayMessage() { Outline 27 Declare method displayMessage 31 // getCourseName gets the name of the course 32 33 System.out.printf( "Welcome to the grade book for\n%s!\n\n", getCourseName() ); 34 } // end method displayMessage 35 36 // determine the average of an arbitrary number of grades 37 public void determineClassAverage() 38 { 39 40 41 // create Scanner to obtain input from command window Scanner input = new Scanner( System.in ); 42 43 int total; // sum of grades int gradeCounter; // number of grades entered 44 45 int grade; // grade value double average; // number with decimal point for average 46 47 48 // initialization phase total = 0; // initialize total 49 gradeCounter = 0; // initialize loop counter 50 • (2 of 3) Declare method determineClassAverage Declare and initialize Scanner variable input Declare local int variables total, gradeCounter and grade and double variable average 51 52 53 // processing phase // prompt for input and read grade from user System.out.print( "Enter grade or -1 to quit: " ); 54 55 grade = input.nextInt(); 2003 Prentice Hall, Inc. All rights reserved. • GradeB ook.jav a 56 // loop until sentinel value read from user 57 while ( grade != -1 ) 58 { Outline 59 total = total + grade; // add grade to total 60 gradeCounter = gradeCounter + 1; // increment counter 28 while loop iterates as long as grade != the sentinel value, -1 61 62 // prompt for input and read next grade from user 63 System.out.print( "Enter grade or -1 to quit: " ); 64 grade = input.nextInt(); 65 } // end while 66 67 // termination phase 68 // if user entered at least one grade... 69 if ( gradeCounter != 0 ) 70 { 71 // calculate average of all grades entered 72 average = (double) total / gradeCounter; 73 74 // display total and average (with two digits of precision) 75 System.out.printf( "\nTotal of the %d grades entered is %d\n", 76 77 System.out.printf( "Class average is %.2f\n", average ); } // end if 79 else // no grades were entered, so output appropriate message 81 • (3 of Calculate 3) average grade using (double) to perform explicit conversion gradeCounter, total ); 78 80 • GradeB ook.jav a Display average grade System.out.println( "No grades were entered" ); } // end method determineClassAverage 82 83 } // end class GradeBook 2003 Prentice Hall, Inc. All rights reserved. Display “No grades were entered” message 1 // Fig. 4.10: GradeBookTest.java 2 // Create GradeBook object and invoke its determineClassAverage method. 29 Outline 3 4 public class GradeBookTest 5 { 6 public static void main( String args[] ) 7 { Create a new GradeBook object 8 // create GradeBook object myGradeBook and 9 // pass course name to constructor 10 GradeBook myGradeBook = new GradeBook( "CS101 Introduction to Java Programming" ); 11 12 • GradeBook Test.java Pass the course’s name to the GradeBook constructor as a string 13 myGradeBook.displayMessage(); // display welcome message 14 myGradeBook.determineClassAverage(); // find average of grades } // end main 15 16 17 } // end class GradeBookTest Welcome to the grade book for CS101 Introduction to Java Programming! Enter Enter Enter Enter grade grade grade grade or or or or -1 -1 -1 -1 to to to to quit: quit: quit: quit: 97 88 72 -1 Total of the 3 grades entered is 257 Class average is 85.67 2003 Prentice Hall, Inc. All rights reserved. Call GradeBook’s determineClassAverage method 4.10 Algoritmaların Tasarlanması: Örnek Çalışma 3 (İçiçe Kontrol Yapıları) • İçiçe kontrol yapıları Gecenler ‘e 0 ilk değeri ver Kalanlar’ a 0 ilk değeri ver Ogrenci ‘ye 1 ilk değer ver Sayac 10 ‘a eşit yada küçük olduğu müddetçe Sınav sonucu gir Eğer öğrenci geçmiş ise Gecenlere 1 ekle else Kalanlara 1 ekle Sayacı 1 artır Kaç kişi geçtiğini yazdır Kaç kişi kaldığını yazdır Eğer 8 kişiden fazla kişi geçmiş ise “Öğretim başarılı” yazdır Fig 4.10 Pseudocode :sınav sonucu problemi için. 1 // Fig. 4.12: Analysis.java 2 // Analysis of examination results. 3 import java.util.Scanner; // class uses class Scanner Outline 4 5 public class Analysis 6 { 7 public void processExamResults 8 { 35 Declare processExamResults’ local variables 9 // create Scanner to obtain input from command window 10 Scanner input = new Scanner( System.in ); • Analysi s.java • (1 of 2) 11 12 // initializing variables in declarations 13 int passes = 0; // number of passes 14 int failures = 0; // number of failures 15 int studentCounter = 1; // student counter 16 int result; // one exam result (obtains value from user) 17 18 // process 10 students using counter-controlled loop 19 while ( studentCounter <= 10 ) 20 { while loop iterates as long as studentCounter <= 10 21 // prompt user for input and obtain value from user 22 System.out.print( "Enter result (1 = pass, 2 = fail): " ); 23 result = input.nextInt(); 24 2003 Prentice Hall, Inc. All rights reserved. 25 // if...else nested in while 26 if ( result == 1 ) 27 28 29 passes = passes + 1; else Outline // if result 1, // increment passes; // else result is not 1, so Determine whether this student passed36 or failed and increment the appropriate variable failures = failures + 1; // increment failures 30 31 // increment studentCounter so loop eventually terminates 32 studentCounter = studentCounter + 1; 33 } // end while 34 35 // termination phase; prepare and display results 36 System.out.printf( "Passed: %d\nFailed: %d\n", passes, failures ); 37 38 // determine whether more than 8 students passed 39 if ( passes > 8 ) 40 41 System.out.println( "Raise Tuition" ); } // end method processExamResults 42 43 } // end class Analysis 2003 Prentice Hall, Inc. All rights reserved. • Analysi s.java • (2 of 2) Determine whether more than eight students passed the exam 1 2 3 4 5 6 7 8 9 10 11 12 // Fig. 4.13: AnalysisTest.java // Test program for class Analysis. Outline public class AnalysisTest Create an Analysis object { public static void main( String args[] ) { Analysis application = new Analysis(); // create Analysis object application.processExamResults(); // call method to process results } // end main } // end class AnalysisTest Enter result (1 Enter result (1 Enter result (1 Enter result (1 Enter result (1 Enter result (1 Enter result (1 Enter result (1 Enter result (1 Enter result (1 Passed: 9 Failed: 1 Raise Tuition = = = = = = = = = = Enter result Enter result Enter result Enter result Enter result Enter result Enter result Enter result Enter result Enter result Passed: 6 Failed: 4 = = = = = = = = = = (1 (1 (1 (1 (1 (1 (1 (1 (1 (1 pass, pass, pass, pass, pass, pass, pass, pass, pass, pass, 2 2 2 2 2 2 2 2 2 2 = = = = = = = = = = fail): fail): fail): fail): fail): fail): fail): fail): fail): fail): 1 2 1 1 1 1 1 1 1 1 More than 8 students passed the exam pass, pass, pass, pass, pass, pass, pass, pass, pass, pass, 2 2 2 2 2 2 2 2 2 2 = = = = = = = = = = fail): fail): fail): fail): fail): fail): fail): fail): fail): fail): 1 2 1 2 1 2 2 1 1 1 2003 Prentice Hall, Inc. All rights reserved. 37 • AnalysisTe st.java 4.11 Birleşik Atama Operatörleri • Atama Operatörleri – Kısaltılmış atama operatörleri – Herhangi bir atama işlemi • değişken = değişken operatör ifade; – Şu şekilde de yazılabilir • değişken operatör = ifade; – Örneğin toplam atama operatörü += •c = c + 3 – Şu şekilde de yazılabilir • c += 3 Assig nm ent Sa m p le Exp la na tion op era tor exp ression Assume: int c = 3, d = 5, e = 4, f = 6, g = 12; += c += 7 c = c + 7 -= d -= 4 d = d - 4 *= e *= 5 e = e * 5 /= f /= 3 f = f / 3 %= g %= 9 g = g % 9 Fig. 4.12 Arithm etic a ssig nm ent o p era to rs. Assig ns 10 to c 1 to d 20 to e 2 to f 3 to g 4.12 Artırma Azaltma Operatörleri • Bir artırma (++) – Değer 1 artırır. • Bir azaltma (--) – Değeri 1 azaltır • Önceden artırma / önceden azaltma operatör • Sonradan artırma / sonradan-azaltma operatör Op era tor Ca lled ++ preincrement ++ postincrement -- predecrement -- postdecrement Fig. 4.13 The inc rem ent Sa m p le exp ression ++a Exp la na tion Increment a by 1, then use the new value of a in the expression in which a resides. a++ Use the current value of a in the expression in which a resides, then increment a by 1. --b Decrement b by 1, then use the new value of b in the expression in which b resides. b-Use the current value of b in the expression in which b resides, then decrement b by 1. a nd d ec re m ent o p era tors. 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 5 5 6 5 6 6 // Fig. 4.14: Increment.java // Preincrementing and postincrementing operators. public class Increment { Line 13 postincrements c public static void main( String args[] ) { int c; // demonstrate postincrement c = 5; // System.out.println( c ); // System.out.println( c++ ); // System.out.println( c ); // System.out.println(); // skip a line // demonstrate preincrement c = 5; // System.out.println( c ); // System.out.println( ++c ); // System.out.println( c ); // } // end main } // end class Increment assign 5 to c print 5 Line 21 preincrements print 5 then postincrement print 6 assign 5 to c print 5 preincrement then print 6 print 6 Increment.java Line 13 postincrement Line 21 preincrement c Operators Associativity Type ++ -right to left unary postfix ++ -- + (type) right to left unary * / % left to right multiplicative + left to right additive < <= > >= left to right relational == != left to right equality ?: right to left conditional = += -= *= /= %= right to left assignment Fig. 4.15 Bu zamana kadar öğrendiğimiz tüm operatörler. 4.13 İlkel Veri Tipleri • Java da tüm değişkenlerin mutlaka bir veri tipi olması lazımdır. • Java ilkel veri tipleri Typ e boolean Size in b its char 16 byte 8 short 16 int 32 long 64 float 32 double 64 Fig. 4.16 The Ja va Va lues true or false Sta nd a rd [Note: The representation of a boolean is specific to the Java Virtual Machine on each computer platform.] '\u0000' to '\uFFFF' (ISO Unicode character set) (0 to 65535) –128 to +127 (–27 to 27 – 1) –32,768 to +32,767 (–215 to 215 – 1) –2,147,483,648 to +2,147,483,647 (–231 to 231 – 1) –9,223,372,036,854,775,808 to +9,223,372,036,854,775,807 (–263 to 263 – 1) Negative range: (IEEE 754 floating point) –3.4028234663852886E+38 to –1.40129846432481707e–45 Positive range: 1.40129846432481707e–45 to 3.4028234663852886E+38 Negative range: (IEEE 754 floating point) –1.7976931348623157E+308 to –4.94065645841246544e–324 Positive range: 4.94065645841246544e–324 to 1.7976931348623157E+308 p rim itive typ es. 48 Diyalog kutusunda metin yazdırmak • Pencereler ve diyalog kutuları – Bir çok Java uygulaması program çıktısını göstermek için bunu kullanır. – JOptionPane sınıfı hazır diyalog kutularını kullanır. 2003 Prentice Hall, Inc. All rights reserved. 1 // Fig. 3.17: Dialog1.java 2 // Printing multiple lines in dialog box. 3 import javax.swing.JOptionPane; // import class JOptionPane Outline 4 5 public class Dialog1 6 { 7 public static void main( String args[] ) 8 { • Dialog1. java Import class JOptionPane 9 // display a dialog with the message 10 JOptionPane.showMessageDialog( null, "Welcome\nto\nJava" ); 11 } // end main 12 } // end class Dialog1 Show a message dialog with text 2003 Prentice Hall, Inc. All rights reserved. 49 50 Diyalog kutusunda metin yazdırmak • javax.swing paketi – Grafik arabirim oluşturmaya yardım edecek sınıflar içerir.(GUIs) – JOptionPane sınıfını içerir • Bir mesaj yazdırmak için showMessageDialog statik metodu kullanılır. 2003 Prentice Hall, Inc. All rights reserved. 51 Diyalog kutusundan metin girişi yapmak • Diyalog girişi – Kullanıcın bilgi girmesini sağlar – JOptionPane sınıfının showInputDialog metodu kullanılarak oluşturulur 2003 Prentice Hall, Inc. All rights reserved. 1 // Fig. 3.18: NameDialog.java 2 // Basic input with a dialog box. 3 import javax.swing.JOptionPane; 52 Outline 4 5 public class NameDialog 6 { 7 public static void main( String args[] ) 8 { 9 // prompt user to enter name 10 String name = 11 Show input dialog • NameDial og.java JOptionPane.showInputDialog( "What is your name?" ); 12 13 // create the message 14 String message = 15 String.format( "Welcome, %s, to Java Programming!", name ); 16 17 // display the message to welcome the user by name 18 JOptionPane.showMessageDialog( null, message ); 19 } // end main 20 } // end class NameDialog 2003 Prentice Hall, Inc. All rights reserved. Format a String to output to user 53 Creating Simple Drawings 2003 Prentice Hall, Inc. All rights reserved. 54 4.14 (Optional) GUI and Graphics Case Study: Creating Simple Drawings • Java grafiklerinde koordinat sistemi – X- koordinatı ve Y-koordinatı olarak ifade edilir. • Yatay veya dikey koordinatlar da denilir. • x-ekseni ve y-ekseninde gösterilir. – Koordinat birimi pixeldir. • Graphics class java.awt paketindedir. – Metin ve şekil çizme metodlarını içerir. • JPanel class javax.swing paketindedir. – Çizim yapma alanı oluşturur. 2003 Prentice Hall, Inc. All rights reserved. 55 4.14 Basit çizimler oluşturmak • JPanel class – Her JPanel in bir paintComponent metodu vardır • paintComponent sistem JPanel i görüntüleyeceği zaman çağrılır. – getWidth ve getHeight metodları • JPanel’in genişlik ve uzunluğunu gönderir. – drawLine metodu • İlk 2 argümanın gösterdiği noktadan, diğer 2 argümanın gösterdiği noktaya bir çizgi çizer. 2003 Prentice Hall, Inc. All rights reserved. 56 Fig. 4.18 | Java koordinat sistemi 2003 Prentice Hall, Inc. All rights reserved. 57 4.14 Basit çizimler oluşturmak • Kalıtım – extends anahtar kelimesi kullanılır – Altsınıf(subclass) üstsınıf(superclass)tan türer • Altsınıf üstsınıfın tanımladığı data ve metodlara sahip olur ve kullanabilir. 2003 Prentice Hall, Inc. All rights reserved. 1 // Fig. 4.19: DrawPanel.java 2 // Draws two crossing lines on a panel. 3 import java.awt.Graphics; 4 import javax.swing.JPanel; Outline Import the java.awt.Graphics and the javax.swing.JPanel classes 5 6 public class DrawPanel extends JPanel 7 { 8 // draws an X from the corners of the panel 9 public void paintComponent( Graphics g ) 10 { The DrawPanel class extends the JPanel class 11 // call paintComponent to ensure the panel displays correctly 12 super.paintComponent( g ); 13 14 int width = getWidth(); // total width 15 int height = getHeight(); // total height • DrawPa nel.java Declare the paintComponent method 16 17 // draw a line from the upper-left to the lower-right 18 g.drawLine( 0, 0, width, height ); Retrieve the JPanel’s width and height 19 20 // draw a line from the lower-left to the upper-right 21 g.drawLine( 0, height, width, 0 ); 22 } // end method paintComponent 23 } // end class DrawPanel Draw the two lines 2003 Prentice Hall, Inc. All rights reserved. 58 59 4.14 Basit çizimler oluşturmak • JFrame class javax.swing paketindedir. – Programcının bir pencere oluşturmasını sağlar. – setDefaultCloseOperation metod • JFrame.EXIT_ON_CLOSE arguman olarak uygulamaya gönderir ve pencere kapandığında programın bitmesini sağlar. – add metod • JPanel i JFrame e ekler. – setSize metod • JFrame in genişliğini ve uzunluğunu belirler. Birinci parametre genişlik, ikinci parametre uzunluktur. 2003 Prentice Hall, Inc. All rights reserved. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 // Fig. 4.20: DrawPanelTest.java // Application to display a DrawPanel. import javax.swing.JFrame; 60 Import the JFrame class from Outline the javax.swing class public class DrawPanelTest { public static void main( String args[] ) { // create a panel that contains our drawing DrawPanel panel = new DrawPanel(); // create a new frame to hold the panel JFrame application = new JFrame(); Create DrawPanel and JFrame objects // set the frame to exit when it is closed application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); application.add( panel ); // add the panel to the frame application.setSize( 250, 250 ); // set the size of the frame application.setVisible( true ); // make the frame visible } // end main } // end class DrawPanelTest Add • DrawPanel Test.java Set the application to terminate when the user closes the window the DrawPanel to the JFrame Set the size of and display the JFrame 2003 Prentice Hall, Inc. All rights reserved. 61 Fig. 4.21 | Lines fanning from a corner. 2003 Prentice Hall, Inc. All rights reserved. Fig. 4.22 | Line art with loops and drawLine. 2003 Prentice Hall, Inc. All rights reserved. 62