Java Dersleri 18 – Network Programlama – UDP
(daha fazla…)
Java Dersleri 17 – JDBC API (Veritabanı Bağlantısı)
Swing Programlama : JFileChooser
JFileChooser jfc = new JFileChooser(); jfc.showOpenDialog(null);
Bu kod parçacığı kullanıcının ön tanımlı dizinini gösteren bir dosya diyaloğu açar. Ön tanımlı dizininizi linux ortamında komut satırına “env” komutunu vererek ulaşabilirsiniz. Bu komutu çalıştırdığınızda karşınıza gelen listedeki HOME ortam değişkeni kullanıcının ön tanımlı dizinidir. Örnek görüntümüz şu şekilde olacaktır :
Peki biz dosya diyalogumuzu öntanımlı klasörde değil de başka klasörde açmak istersek ne yapmalıyız? Bunun için JFileChooser sınıfının parametre olarak dosya yolu yada dosya alan diğer yapılandırıcı metodunu kullanmalıyız. Örneğin ben dosya seçme diyaloğumu “/home/orhan/Downloads” klasöründe açmak istersem şu kod parçasını kullanmam gerekir :
JFileChooser jfc = new JFileChooser("/home/orhan/Downloads");
jfc.showOpenDialog(null);
Bundan sonra ihtiyacımız olan kullanıcının hangi seçeneği seçtiğini öğrenmek. Kullanıcı herhangi bir dosyayı seçebilir veya işlemi iptal edebilir. Diyalogdan kullanıcı çıktısını şu şekilde alıyoruz :
JFileChooser jfc = new JFileChooser("/home/orhan/Downloads");
int kullaniciSecimi = jfc.showOpenDialog(null);
Kullanıcı seiçimi değişkeninin alabileceği değerler de JFileChooser sınıfında tanımlanmıştır. Bu değerler :
JFileChooser.APPROVE_OPTION //seçim onaylandı JFileChooser.CANCEL_OPTION //seçim iptal edildi JFileChooser.ERROR_OPTION //işlem sırasında hata oluştu
Şimdi kullanıcının seçmiş olduğu dosya ismini JFileChooser sınıfından almayı öğrenelim.
if (kullaniciSecimi == JFileChooser.APPROVE_OPTION) {
System.out.println(jfc.getSelectedFile());
}
Kullanıcı tarafından seçilen dosya referansına ulaşmak için getSelectedFile() metodunu kullanıyoruz. Eğer kullanıcıya birden fazla dosya seçme imkanı tanımak istiyorsak sırasıyla şu işlemleri yapmalıyız.
jfc.setMultiSelectionEnabled(true);
int kullaniciSecimi = jfc.showOpenDialog(null);
if (kullaniciSecimi == JFileChooser.APPROVE_OPTION) {
for(File f : jfc.getSelectedFiles()) {
System.out.println(f);
}
}
Son olarak seçimimiza filtre eklemeyi öğrenelim. Örneğin sadec zip uzantılı dosyaların seçilebilmesini istiyorsak :
jfc.setFileFilter(new FileFilter() {
@Override
public boolean accept(File f) {
if(f.isDirectory())
return true;
String fileName = f.getName();
int nokta = fileName.lastIndexOf('.');
String ext = "";
if(nokta > 0)
ext = fileName.substring(nokta+1);
return ext.equalsIgnoreCase("zip");
}
@Override
public String getDescription() {
return "ZIP Dosyaları";
}
});
Yeni bir filtre eklemek için setFileFilter metodundan faydalandık. Bu filtremizde kullanıcının klasörleri ve zip uzantılı dosyaları seçebilmesine izin verdik. Dosya uzantısını saptayabilmek için String sınıfının lastIndexOf ve substring metodlarından yararlandık.
Java Dersleri 16 – Enum Yapısı
enum AminoAsit{ALANIN,GLUTAMIN,PROLIN,SERIN};
Java’da Enum tanımlamak için enum anahtar kelimesi kullanılır. Daha sonra enum elemanları süslü parantez içinde yazılır. Şimdi bu örneği biraz daha geliştirelim ve enum için bir yapıcı (constructor) metod tanımlayalım :
enum AminoAsit {
ALANIN("apolar"), GLUTAMIN("polar"), PROLIN("nötür"), SERIN("nötür");
public String polarite_;
AminoAsit() {
}
AminoAsit(String polarite) {
polarite_ = polarite;
}
};
Örneği biraz değiştirerek bir String alan yapıcı metodumuzu ekledik. Burada dikkat etmemiz gereken kural yapıcı metodumuzun public erişim seviyesinde olmaması. Enum’ların sınıflardan bir farkı yapıcı metodlarının public erişim seviyesinde olamamasıdır. Enum yapılarının sınıf yapısından bir diğer farkı ise Enum yapılarının herhangi bir sınıftan miras alamamasıdır. Bunun tersine Enum yapıları herhangi bir arayüzü gerçekleyebilirler yani şu kullanım geçerlidir :
interface Hidropatik {
public double getHidropatiKatsayi();
}
enum AminoAsit implements Hidropatik {
ALANIN("apolar") {
@Override
public double getHidropatiKatsayi() {
return 1.8;
}
},
GLUTAMIN("polar") {
@Override
public double getHidropatiKatsayi() {
return -3.5;
}
},
PROLIN("nötür") {
@Override
public double getHidropatiKatsayi() {
return 0.0;
}
},
SERIN("nötür") {
@Override
public double getHidropatiKatsayi() {
return -0.8;
}
};
public String polarite_;
AminoAsit() {
}
AminoAsit(String polarite) {
polarite_ = polarite;
}
};
Yukarıda tanımladığımız Enum’u nasıl kullanacağımızı görelim. Aşağıdaki örnekte tanımladığımız Enum’un tüm elemanlarına ulaşıyoruz:
for (AminoAsit a : AminoAsit.values()) {
System.out.println(a.name() + " " + a.polarite_ + " " + a.getHidropatiKatsayi());
}
Java Dersleri 15 – Koleksiyon API (Collection API) Map
package net.orhanbalci.collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class HashMapExample {
public static void main(String[] args) {
Map<Integer,String> m = new HashMap<Integer,String>();
for (int i = 0; i < 10; i++) {
m.put(i, String.valueOf(i) + " değer");
}
Set<Integer> ks = m.keySet();
Iterator<Integer> i = ks.iterator();
while (i.hasNext()) {
Integer key = i.next();
System.out.print(key + " ");
System.out.println(m.get(key));
}
}
}
Örneğimizde 11. satırda yeni bir HashMap nesnesi tanımlıyoruz. Java’nın generics özelliğini (şablon sınıflar) kullanılarak anahtarların veri tipini Integer değerlerin veri tipini ise String olarak belirttik. 14. satırda Map arayüzünün put() metodunu kullanarak HashMap koleksiyonumuza yeni eleman ekliyoruz. 24. satırda ise get() metodu yardımıyla HashMap koleksiyonumuzdan anahtar yardımıyla değerimize ulaşıyoruz.
Yukarıda bahsettiğimiz ilk kapasitenin performansa olan etkisini başka bir örnekte görelim :
Map<Integer,String> m2 = new HashMap<Integer,String>(10);
Map<Integer,String> m3 = new HashMap<Integer,String>(100);
long time1 = System.currentTimeMillis();
for (int k = 0; k < 10000; k++) {
m2.put(k, String.valueOf(k) + " değer");
}
long time2 = System.currentTimeMillis();
System.out.println(String.valueOf(time2-time1) + " milisaniye");
time1 = System.currentTimeMillis();
for (int k = 0; k < 10000; k++) {
m3.put(k, String.valueOf(k) + " değer");
}
time2 = System.currentTimeMillis();
System.out.println(String.valueOf(time2-time1) + " milisaniye");
Bu örneğimizde ise iki adet HashMap nesnesi oluşturuken ilk kapasiteyi yapılandırıcı metoda parametre olarak veriyoruz. m2 koleksiyonumuzun ilk kapasitesi 10 iken diğerinin ilk kapasitesi 100 dür. Her iki koleksiyona arka arkaya 10000 anahtar-değer ikilisi ekleyip performansı ölçtüğümüzde ilk kapasitesi 10 olan koleksiyona ekleme işlemi 46-47 milisaniye sürerken ilk kapasitesi 100 olan koleksiyona ekleme işlemi 19-20 milisaniye sürmekte. Görüldüğü üzere kapasite artırımına gitmek zaman kaybına neden olmaktadır.
Ulusal Bilgisayar Olimpiyadı 2009 – Soru 36
‘i3(3(<)i)’ komutu kaç numaralı şekli çizer?
A) (1)
B) (6)
C) (9)
D) (10)
E) (14)
CEVAP: Nispeten kolay bir soru. Komutu incelersek ilk olarak kuzeye ilerleyip daha sonra 3 kere 135 derece sola dönüp ilerlemeliyiz.
Yukarıdaki şekilden takip edersek önce kuzeye yani 1′den 2′ye. Daha sonra sola 135 derece dönüp ileriye. Yani 2′den 3′e. Yine 135 derece sola dönüş ve ilerleme : 3′den 1′e. Son kez 135 derece sola ve ileri : 1′den 4′e. Doğru cevap C) (9)



