12 Mart 2012 Pazartesi

Java Swing Tam Ekran (Ekranı Kaplayan) Frame(Pencere) Oluşturmak

Merhaba arkadaşlar java'ya ilgi duyan bizlerin en başta yapmaya başlaması gereken tasarım ekranı olmadan eclipse ortamında sadece kod yazarak bir program yapmaktır. Bu bir çocuğun doğduğunda nasıl yürümeden emeklemesini gerektiriyorsa onunla aynı kategoridedir. Emeklemeden yürüyen çocuk nasıl yere sağlam basamaz ise javada designer(netbeans ve benzeri komponentler) kullananlarda java konusunda yere sağlam basamazlar. Bu yüzden java'ya başlarken olmazsa olmaz olan swing ortamında sadece kod yazarak pencereler tasarlayıp bunların üzerine kendiniz gerekli araçları(tool) koymanızdır. Şimdi basit olarak bir frame(yani programlama dilinde bir pencere yaratıp bu pencerenin tam ekran olmasını nasıl sağlarız ona bakacağız. Eclips ortamında yeni bir java programı oluşturuyoruz. Oluşturduğumuz projeye bir tane main fonksiyonu içeren bir sınıf(class) ekliyoruz. Sınıfımızın içerisine de ana ekranımızı barındıran bir frame(pencere) koyacağız ve bu pencereyi full screen(tam ekran) yapacağız.
import java.awt.*;  
import java.awt.event.*;
import javax.swing.*; 
import java.awt.Toolkit;  
public class Benim_Uygulamam
 {
   JFrame frame;
   public Test()  {  
   frame = new JFrame("İlk Uygulamam");  // Arkadaşlar tırnak içerisindeki metin uygulamamızın  // title başlık dedğimiz kısmıdır. Pencerenin üzerinde gözükecektir.
   Toolkit tk = Toolkit.getDefaultToolkit();  
   int withSize = ((int) tk.getScreenSize().getWidth()); //Bilgisayarın ekranının genişliği 
   int heightSize = ((int) tk.getScreenSize().getHeight());  // bilgisayar ekranının   //yüksekliği
   frame.setSize( withSize  , heightSize);  //Bu değerleri penceremize boyut olarak veriyoruz
   frame.show();  // pencereyi ekranda görünür hale getiriyoruz.
   
 }  
public static void main(String[] args)  // programımızın başladığı ana fonksiyon 
 {  
    Benim_Uygulamam app = new  Benim_Uygulamam();  
 }  
}  


Burada javada oluşturulan pencerelerin kendine has form kenarlıklarını ve büyütme küçültme düğmeleriyle kapatma düğmesini kullanmak istemiyorsak aşağıda yazılı kodu
frame.show() dan önce ki satıra yazıyoruz.
frame.setUndecorated(true); 

Özlü Söz

Günahlarım gibi olabilseydi dağlar delip geçebilir miydin aşabilir miydin ömrü can sevdayı kan gibi taşıyabilir miydin.Susmak mı .....

Özlü Söz

Bir sadeyi viran idi, sandım durur durduğu yerde; durmadı gitti revan oldu, ömrüm gençliğimi bitirdiği yerde.

4 Mayıs 2011 Çarşamba

Java İle Programlama

Yeni başlayanlar için öncelikle yapılması gereken nesne yönelimli programlama hakkında detaylı bir araştırma yapmak. Nesneler nedir ne işe yarar sınıflar nasıl kullanılır bunları anlamak önemli.Java programları tamamen sınıf dediğimiz yapılardan oluşur. Bu sınıf dediğimiz yapılar aslında Nesneye Dayalı Programlama Konseptinde yer alır. Daha önce nesneye dayalı programlama ile uğraşmadıysanız , bu konsepte ait terminolojiye biraz bakmak gerekiyor.

Nesne: Günlük yaşamda karşılaştığımız şeyleri modellemek için kullandığımız şeylere nesne diyoruz. Örneğin bir okul otomasyonu yazıyor olsak , burada öğrenci, ders , öğretim görevlisi birer nesne olacaktır. Burada önemli bir nokta da bu nesnelerin hepsinde mevcut iki şey vardır : durumları ve davranışları. Örneğin öğrenci not durumu ve öğrencinin ders seçmesini örnek verebiliriz. Burada not durumu öğrencinin durumu, ders seçmesi de öğrencinin bir davranışıdır.

Mesaj: Geliştirdiğimiz programlarda elbetteki sadece tek bir nesne olması çok ender bir durumdur. Sistem modellenirken bir çok nesneler de modelde oluşur. Bu nesneler birbirleriyle mesajlarla anlaşılır. Örneğin kayıt otomasyonunda ders seçen öğrenci , sisteme kendine o derse kaydetmesi mesajını verir. Burada sisteme kayıt yapan nesne ile öğrenci nesnesi haberleşmek için mesajları kullanırlar.

Sınıf: Sistemi modelleme aşamasında, daha sonda programımızda nesneleri oluşturmak için öncelikle ilgili sınıfları tanımlamamız gerekir. Yani başka bir deyişle , nesneler mevcut sınıfların birer örneğidir. Biz okul otomasyonunda ogrenci sınıfını tanımladıktan sonra , okulda derse kayıt yaptıran her bir öğrenci ogrenci sınıfında bir nesnedir, daha doğrusu öğrenci sınıfının bir örneğidir.

Kalıtım: Buraya kadar nesnelerin , sınıflar aracılığı ile ifade edildiğini söyledik. Sınıfına bakarak bir nesne hakkında çok şey söyleyebiliriz. Örneğin size bir bisiklet nesnesinden bahsetsem , 2 tekerleği, tutacakları ve pedalların olduğunu söylersiniz. Nesneye Dayalı Sistemler işi bir adım daha öteye götürüyor ve başka sınıfları kullanarak ta sınıf tanımlamamıza olanak sağlıyor. Örneğin dağ bisikleti , yarış bisikleti ve iki kişilik bisiklette bisiklet tipinde nesnelerdir. Dolayısıyla tüm bu bisiklet tipleri aslında bisiklet sınıfının alt sınıflarıdır(subclasses) . Diğer bir ifadeyle bisiklet sınıfı bu sınıfların üst sınıfıdır. Bu ilişki aşağıdaki gösterilmiştir:

Bunlara ek olarak kodlar içerisinde // ile başlayan satırlar yorum  satırlarıdır. Bu aynen C++'da olduğu gibidir. Bu satırlar sadece geliştiricilere daha sonra kodu anlamak için yardım amaçlı yazılırlar. Derlenmezler, direkt olarak derleyici bunları es geçer.

Burada da gösterildiği üzere bir kalıtım mevcuttur. Alt sınıflar , üst sınıfın durumları alır (değişkenlerin tanımlandığı şekilde). Tabi burada değişkenlerin üst sınıfta tanımlanma şeklide önemlidir , bu konu üzerinde daha sonra duracağım. Aynı zamanda üst sınıftan bazı methodları da alırlar. Bu metodların bazıları hepsinde vardır örneğin hızArtır, yavasla, vitesDegistir, vs. Tabi burada şuna da değinmek gerekiyor , alt sınıflar sadece üst sınıfın metod ve değişkenleri ile sınırlı değillerdir , kendilerine ait durum ve metodları da olabilir , ya da üst sınıfta bulunan metodları ve değişkenleri kendilerine uyarlayabilirler. Bu durumda metod ve değişkenler üst sınıftaki haliyle değilde , alt sınıftaki yeni haliyle kullanılırlar.

Arayüz: Aslında metod ve sabit tanımlamalar biçiminde bir form için yapılan kontrattır. Diğer bir deyişle , bir sınıf, bir arayüzü yürüttüğünde  , o arayüzün içerisinde bulunan tüm metodları yürütmek için söz vermiş olur. Bu bize şunları sağlar:

* Birbiriyle akalı olmayan sınıflar arasında benzerlikleri , bir sınıf ilişkisi oluşturmak zorunda kalmadan yakalamaya yarar.
* Bir ya da daha fazla sınıf tarafından yürütüleceğini bildiğimiz metodları tanımlamaya yarar.

Bir nesnenin sınıfını göstermeden , onun programlama arayüzünü açığa çıkarmaya yarar. Peki bütün bunları tanımladıkta , bunları nasıl koda dönüştürecez , şimdi de bunu biraz inceleyelim.

Örnek olarak yazacağımız kod bir applet örneğidir. Appletler Java platformu desteği olan tarayıcılarda ( Hot Java, Netscape, vs ) çalışan Java programlarıdır. Program çalışmak için 3 adet dosyaya ihtiyaç duymaktadır. Bunlardan birisi appletimizin üzerinde çalışacağı html dosyası , diğerleri de ihtiyaç duyduğumuz 2 adet Java dosyasıdır. Program üzerine tıklandığında ekrana kırmızı bir spot basan applet örneğidir.


şeklinde html tagları arasına gömülmüş halidir. Yazdığımız programların nasıl derleneceğine bir sonraki yazıda gireceğim için burada derlemenin nasıl yapılacağı ve neler gerektiğini atlıyorum. Sadece kodları açıklayacağım.

Burada da görüldüğü üzere ClikMe.java dosyası Spot.java dosyasına ihtiyaç duymaktadır. Dolayısıyla bu dosyaları aynı klasör içine koymaya dikkat edin.

Applet için gereken dosyalar :

public class Spot {
//instance variables
public int size;
public int x, y;
//constructor
public Spot(int intSize) {
size = intSize;
x = -1;
y = -1;
}
}

Burada Spot nesnesi ekrana çıkarılacak olan kırmızı spotu temsil etmektedir. Dolayısıyla spotun ekrandaki koordinatları bu sınıfın üye değişkinleri olarak belirlenmiştir. Aynı zamanda spotun boyutunu temsilen size ( yani çap olarak ) kullanılmıştır. Bu arada sınıf içerisinde bir de kurucu metodu (Constructor) bulunmaktadır. Üyesi olduğu sınıfın adını aldığı için diğer metodlardan ayırt edilir. Farklı parametrelerle değişik tiplerde kurucu tanımlamaları yapılabilir. Bu kurucular o sınıftan oluşturulan nesnelerin otomatik olarak ilklendirilmelerine (initialize) olanak sağlar. Yani çapı 10 olan bir Spot oluşturmak istiyorsanız , bunu kurucuya parametre olarak aktarmanız yeterli olacaktır.

public Spot(int intSize) {
size = intSize;
x = -1;
y = -1;
}


İfadesinde nesne oluşturulurken int bir parametre beklemektedir. Bu parametre aracılığı ile çap belirlenecektir. Bu Spot sınıfı için eğer parametre geçirmezseniz program hata verir. Peki bir sınıftan nasıl nesne oluşturulur ona bakalım şimdi:

Spot mySpot= new Spot (10);

Şeklinde programımızda yazdığımız zaman, adı mySpot ve çapı 10 olan bir Spot nesnesi yaratmış oluruz.

ClickMe appleti, ClickMe sınıfının bir örneğidir. Burada ClickMe sınıfı aşağıdaki gibi tanımlanmıştır:

public class ClickMe extends Applet implements MouseListener
{
...
}

Burada extends anahtar kelimesi ClickMe sınıfımızın , Applet sınıfından türetildiğini göstermektedir, implements anahtar kelimesi ise daha önce anlattığımız gibi MouseListener arayüzünü yürüttünü göstermektedir. Yani diğer bir deyişle , applet üzerinde mouse'a tıkladığımızda bir şeyler olacak demektir. Tabi ki , mouse ile neler yapması gerektiğini applet 'e kodlayacak olan biziz. Bu örnek için appletten mouse 'a tıklandığında ekranda kliklediğimiz yere kırmızı bir spot koymasını istiyoruz.

ClickMe Applet'i için tüm kod aşağıdadır:

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class ClickMe extends Applet implements MouseListener {
private Spot spot = null;
private static final int RADIUS = 7;

public void init() {
addMouseListener(this);
//Applet'e bir mouse dinleyici //ekledik.

}

public void paint(Graphics g) {
// draw a black border and a white //background
g.setColor(Color.white);
g.fillRect(0, 0, getSize().width - 1, getSize().height - 1);
g.setColor(Color.black);
g.drawRect(0, 0, getSize().width - 1, getSize().height - 1);

// draw the spot
g.setColor(Color.red);
if (spot != null) {
g.fillOval(spot.x - RADIUS,
spot.y - RADIUS,
RADIUS * 2, RADIUS * 2);
}
}
public void mousePressed(MouseEvent event) {
if (spot == null) {
spot = new Spot(RADIUS);
}
spot.x = event.getX();
spot.y = event.getY();
repaint();
}
public void mouseClicked(MouseEvent event) {}
public void mouseReleased(MouseEvent event) {}
public void mouseEntered(MouseEvent event) {}
public void mouseExited(MouseEvent event) {}
//söz verdik , kullanmasakta yazalım
}

Burada Graphics g değişkeni ( Graphics sınıfında bir nesne ) ekran üzerinde işlemler yapabilmemizi sağlıyor. Arka planın rengini , kenarların rengini vs değiştirmemize olanak sağlıyor.

public void mousePressed(MouseEvent event) {
if (spot == null) {
spot = new Spot(RADIUS);
}
spot.x = event.getX();
spot.y = event.getY();
repaint();
}

Burada mouse 'a tıklandığında , eğer bu ilk tıklama ise applet bir Spot nesnesi oluşturuyor ve ona ilk değerini veriyor. Daha sonra oluşturduğu spot nesnesinin değişkenleri güncelleniyor.

event.getX(); event.getX();


metodları ile de mouse'u tıkladığımız yerin koordinatlarına ulaşıyoruz ve applet oraya kırmızı bir spot koyarak bize cevap veriyor. Ardından repaint(); metodu ile de ekranda yeni Spot gösterilir.

if (spot != null) {
g.fillOval(spot.x - RADIUS,
spot.y - RADIUS,
RADIUS * 2, RADIUS *2);
}

Kodu da eğer mouse'a tıklanmışsa ( Bunu da spot != null ifadesinden kontrol ediyoruz, eğer null olsaydı , başlangıçta tanımlandığı durumu koruduğunu gösterirdi. Bu da bize mouse'a hiç tıklanmadığını bildirecekti) nerde tıklandıysa tam orayı merkez kabul ederek oraya bir Spot'un nasıl koyulduğunu gösteriyor.

Buraya kadar nesneye dayalı programlama terminolojisini ve bir uygulama gördük. Bir dahaki yazımda yazdığımız Java programlarımızı nasıl derleyeceğimizden , hangi ortamların gerektiğinden vs bahsedeceğim.

31 Mart 2011 Perşembe

Sağlık Bilgi Paylaşım Sistemi

Bu günlerde yeni bir site dikkatimi çekti diyerek başlamak istiyorum aslında söze çünkü çok beğendiğim bir yapıya sahip olan hastanevitrini.com çok güzel bir içeriğe ve çok güzel bir tasarıma site. Şu ana kadar insanların sağlık konusunda ihtiyaç duyduğu bazı önemli bilgileri paylaşıyorlar. Aslında site benim bana ait olan bir site arkadaşım ile birlikte sürekli içerik giriyoruz. Kendi reklamımı yaptım biraz ama :). Bu arada siteye sağlık konusunda içerik eklemek isteyen olursa huseyinokumuss@gmail.com adresine ileti göndersinler. Ama özgün olacak gerçekten yoksa kopya içerikleri yayınlamıyorum. Hepinizin desteğini bekliyorum...
Saygılar...

12 Mart 2011 Cumartesi

Sağlık Hakkında

Stres insanı en fazla yıpratan yaşlandıran hastalandıran en kötü alışkanlığımızdır. Gerekli gereksiz bir sürü olay ve durum karşısında strese gireriz. Stres iş hayatının sıkıntıları, trafiğin sıkışması, aile baskısı, fiziksel rahatsızlıklar, ruhsal depresyonlar gibi dış uyaramlara verilen içsel tepkidir. Stresli insanların rahat bir yapıya sahip insanlara göre daha fazla yıprandığı ve erken yaşlandığı kanıtlanmıştır. Stressiz günler dilerim.

26 Şubat 2011 Cumartesi

Düşünmek İçin ‘’Vakit Yok’’ Demeyin!

Düşünmek İçin ‘’Vakit Yok’’ Demeyin!

Çoğu insanımız gerek iş konumu gerekse aile hayatını öne sürerek düşünmeye vaktinin olmadığını sık sık dile getirmekte ve zaman kısıtlığını bahane ederek tembelliğe

kendini alıştırmaktadır. Hâlbuki düşünmek için o kadar çok vaktimiz var ki. Toplu taşıma araçlarında, yatakta, yemekte, yürürken, alışverişte, sigara içerken, yemek yaparken hatta tuvalette dahi düşünebilir ve kimsenin aklına gelmeyecek fikirler üretebiliriz. Kendimden örnek verecek olursam ben daha çok yemek yaparken ve sigara içerken düşünür beynimi kurcalar dururum. Sizde deneyin eminim faydasını göreceksiniz. Sadece hangi arabayı alacağınızı, borçlarınızı, alacaklarınızı, ailenizi düşünmeyin. Gün geçtikçe gelişen teknolojiye bende nasıl bir katkı da bulanabilirim diye de düşünün.
Evet, bir buluş(icat) yapmak ya da var olanın üzerine katkıda bulunacak fikirler öne sürmenin tek yolu düşünmektir. Bizler toplum olarak düşünmekten giderek uzaklaşmakta ve maalesef  robotlaşmaktayız. Öncelikle yapmamız gereken insanımıza tekrardan düşünme kabiliyetini aşılamak ve sabırla neticesini beklemektir. Fakat görüyorum ki sabredecek zamanımız kalmamış. Ülkemiz gün geçtikçe, dünya ülkeleri arasında patent kısırlığında ilk sıraları kimselere kaptırmamaktadır.
Bizim geçmişimiz, başarılarımız, zaferlerimiz, inançlarımız ve de en önemlisi geleceğimiz bunu hak etmedi hak etmeyecekte. Tekrardan OSMANLI’nın şanına yakışır, dünyaya hükmeden, geleceğine yön verilen değil geleceğe yön veren, lider bir ülke olmak istiyorsak TÜRKİYE CUMHURİYETİ sınırları içerisinde yaşayan, kimlik hanesinde TC. ibaresi olan bütün fertlere bu konuda çok ciddi sorumluluklar düşmektedir. ’’Kazancın yarısı sorumlulukların bilincinde olmaktır’’ düsturu ile yola çıkarsak aşamayacağımız engel, yapamayacağımız hiçbir şey kalmayacaktır. ‘’TÜRK milleti zekidir, TÜRK milleti çalışkandır’’ sözüyle bizleri yücelten ATATÜRK ‘ü yalancı çıkarmak istemiyorsak, derhal tüketen toplum olmaktan kurtulup üreten toplum olma yolunda adımlar atmalıyız. Tüketmek istiyorsan üreteceksin, üretmek istiyorsan düşüneceksin, düşünmek istiyorsan bir fikir öneri icat sunmak istiyorsan bu yazıyı okur okumaz hemen, oturuyorsan ayağa kalkacak, ayakta isen oturacak ve ‘’ Bir buluş yapmalıyım ülkem kazansın! Bir buluş yapmalıyım firmam için! Bir buluş yapmalıyım ailem için kendim için.’’ diyerek Türk milleti olma bilincinin verdiği sorumluluk ile düşünmeye başlayacaksın.
Aradan bir süre geçti ve senin aklına süper bir fikir geldi. Bu fikre kendin dahi inanamıyorsun. İçinden hemen bu fikri benim birileriyle paylaşmam lazım diyorsun. Ve kendinle övünmeye başlıyorsun‘’süper bir şey bu ya nasılda aklıma geldi, çok dahiyim ben çooook’’ gideyim de şu fikri unutmadan Ahmet’le Mehmet’le paylaşayım dedin. Ama benim yazımın devamı aklına geldi, aniden duraksadın.Hemen yazımın devamını okumak için geri döndün. Buyurun yazımın devamı neymiş birlikte inceleyelim…
Ola ki aklınıza bir fikir geldi. Ve bu fikrinizin faydalı olacağınızdan çok eminsiniz. Beklemeyin alın elinize kâğıdı kalemi buluşunuzu ana hatlarıyla anlatmaya hatta çizmeye çalışın. Aman bu işi de yarın yapayım demeyin aynı buluşu başka biri düşünmüş olabilir ve siz geç kalabilir pişman olabilirsiniz. Çizdiniz, yazdınız bitirdiniz. Atladığınız bir kısım olabilir tekrar kontrol etmekte yarar vardır. Aldık bu kâğıdı elimize en yakın notere gittik ve onaylattık. Bu onay bizim fikrimizin ön tapusudur, asıl tapu Türk Patent Enstitüsü’nden alacağın buluşunu yaptığın ürünün patenthaklarıdır. Peki, nedir bu haklar. Kısaca ürettiğin ürünü senden başka kimse senden izin almadan üretemeyecek, çoğaltamayacak, çakmalarını piyasaya süremeyecek, sende bu fikri çalsalar dahi hiçbir hak iddia edemeyeceklerdir. Kulağa ne kadar hoş geliyor demi. Hadi yine ucuz yırttın!!!
Ne yapmıştık. Fikrimizi kâğıda döküp noterde tasdik ettirmiştik. Yani ön tapumuzu almıştık. Bu aşamadan sonra yapmanız gereken buluşunuzun varsa imkânınız numunesini üretip ilgili alanda uzman olan arkadaşlarınızla paylaşmak yok ise ilgili firmalarla irtibata geçip randevu talep edip fikrinizin sunumunu yapmaktır.
Kaybettiğiniz veya kaybedeceğiniz bir şeyler söz konusu mu? Hayır.!! Ama kazanacağınız ve kazandıracağınız o kadar çok şey var ki.
Sen kazanacaksın, ülken kazanacak, ailen, çevren eşin, dostun hemen hemen herkes kazanacak.
Hayırlı uğurlu olsun.10 yılda 1.000.000 patent hedefine ilk katkı senden geldi. Emin ol bizler bu buluşundan dolayı sana minnettarız. Ülkemizi patent sıralamasında hak ettiği konuma getirmek için verdiğin çabadan ötürü seni kutlarım.Sen ülkene karşı sorumluluğunu yerine getirdin.Sıra bizde!!
Unutmayın, Düşünmeye ‘’VAKTİM YOK’’ dediğin an ülkene sırtını döndüğün andır.
Bir vakit bul, DÜŞÜN,
Bir fikir bul, ÖVÜN,
Bir patent al, KORUN,
Ülkene bir katkıda, BULUN.

Yazar: Ali AKTAŞ