Yıllarca Microsoft Visual Studio ve C# ile desktop uygulamaları geliştirdikten ve kolaylıklarını gördükten sonra Java’da bu işin biraz daha uğraştırıcı olacağına dair aldığım duyumlar sayesinde Web platformunu başlangıç için tercih ettim ve çok doğru bir seçim oldu. Peki Java’da desktop uygulamaları nasıl oluşturuluyor? Ekranlar butonlar labellar... nasıl oluşturuluyor, yönetiliyor? Bu konuya detalı bir şekilde değinmemiz gerekir.
Java’da desktop uygulaması pencerelerine Frame denmektedir. Tüm kontroller frame üzerine yerleşmektedir. Hemen bir frame oluşturalım.
publicstaticvoid main(String[] args) {
Frame pencere=new Frame("Merhaba Pencere");
pencere.setBounds(100, 100, 300, 100);
pencere.setBackground(Color.blue);
pencere.setVisible(true);
}
|
1. Frame : Penceremizin türü
2. setBounds : X koordinatı, Y koordinatı, Genişlik, Yükseklik
3. setBackground : Arkaplan rengini belirliyoruz.
4. setVisible: Ekranda görünürlüğünü belirliyoruz.
Kodumuzu çalıştıralım ve ekrana göz atalım.
Şimdi framein üzerine bir buton ekleyelim.
publicstaticvoid main(String[] args) {
//Frame oluşturma kodları
Frame pencere=new Frame("Merhaba Pencere");
pencere.setBounds(100, 100, 300, 100);
pencere.setBackground(Color.blue);
pencere.setLayout(new FlowLayout());
//Button oluşturma kodları
Button buton = new Button();
buton.setName("btTikla");
buton.setLabel("Tıkla");
pencere.add(buton);
pencere.setVisible(true);
}
|
1. Button : Buton değişkenimizin türü
2. setName : Butona isim veriyoruz.
3. setLabel : Butonun üzerindeki metni değiştiriyoruz.
4. pencere.add : Frame üzerine butonu ekliyoruz.
Şimdi projemizi çalıştıralım.
Butonumuzu da oluşturduk. Şimdi gelişmiş bir örnek yapalım:
Örneğimizde 1 buton 1 label olsun. Butonumuza tıklandığında label bir görünsün bir görünmesin. Peki bu işlemi nasıl yapacağız?
Öncelikle bu işlem için (yani bu ekran için) yeni bir sınıf üzerinde çalışma yapalım. Testini Test isminde bir sınıfta yapalım. Çünkü ekranlarımızla ekranlarımızı çağırdığımız yerler projelerimizde de farklı olacaktır.
Pencere1.java
publicclass Pencere1 implements WindowListener,ActionListener {
private Frame pencere;
private Button buton1;
private Label label1;
privatebooleanlabelVisibleMi;
public Pencere1(int sol, int sag, int en, int boy){
//Pencere Oluştur
this.pencere = new Frame();
this.pencere.setBounds(sol,sag,en,boy);
this.pencere.setLayout(new FlowLayout());
//
//Buton Oluştur
this.buton1 = new Button();
this.buton1.setLabel("Tıkla");
this.buton1.addActionListener(this);
this.pencere.add(this.buton1);
//
//Label Oluştur
this.label1 = new Label();
this.label1.setText("Label");
this.label1.setVisible(this.labelVisibleMi = true);
this.pencere.add(this.label1);
//
this.pencere.setVisible(true);
}
@Override
publicvoid actionPerformed(ActionEvent e) {
if(e.getSource()==this.buton1)
{
this.label1.setVisible(this.labelVisibleMi = !this.labelVisibleMi);
}
}
@Override
publicvoid windowActivated(WindowEvent arg0) {
// TODO Auto-generated method stub
}
@Override
publicvoid windowClosed(WindowEvent arg0) {
// TODO Auto-generated method stub
}
@Override
publicvoid windowClosing(WindowEvent arg0) {
// TODO Auto-generated method stub
}
@Override
publicvoid windowDeactivated(WindowEvent arg0) {
// TODO Auto-generated method stub
}
@Override
publicvoid windowDeiconified(WindowEvent arg0) {
// TODO Auto-generated method stub
}
@Override
publicvoid windowIconified(WindowEvent arg0) {
// TODO Auto-generated method stub
}
@Override
publicvoid windowOpened(WindowEvent arg0) {
// TODO Auto-generated method stub
}
}
|
1. Sınıfımıza WindowListener ve ActionListener interfacelerinin kalıtımlarını veriyoruz. Bu interface’ler ile event ekleme işlemlerini Java standartlarına göre gerçekleştireceğimizi söylüyoruz.
2. Birden çok methodda button, frame ve label’ı kullanabilmek için global alanda tanımlamalarını yapıyoruz.
3. Ekranımızı değişken oluşturulduğunda oluşturmak istiyoruz (istersek ayrı bir methodda da oluşturabiliriz). Bu sebeple tüm oluşturma kodlarını constructor’da tanımladık.
4.
this.pencere = new Frame();
this.pencere.setBounds(sol,sag,en,boy);
this.pencere.setLayout(new FlowLayout());
|
Penceremize bellekte yer ayırıyor ve özelliklerini belirliyoruz.
5.
this.buton1 = new Button();
this.buton1.setLabel("Tıkla");
this.buton1.addActionListener(this);
this.pencere.add(this.buton1);
|
Butonumuza bellekte yer ayırıyor, özelliklerini belirliyor ve pencerenin bir parçası olduğunu tanıtıyoruz.
6.
this.label1 = new Label();
this.label1.setText("Label");
this.label1.setVisible(this.labelVisibleMi = true);
this.pencere.add(this.label1);
|
Labelımıza bellekte yer ayırıyor, özelliklerini belirliyor ve pencerenin bir parçası olduğunu tanıtıyoruz.
7.
this.pencere.setVisible(true);
|
Penceremizi ekranda gösteriyoruz.
8.
publicvoid actionPerformed(ActionEvent e) {
if(e.getSource()==this.buton1)
{
this.label1.setVisible(this.labelVisibleMi = !this.labelVisibleMi);
}
}
|
buton1’e tıklandıysa label1’in görünürlüğünü tersine çevir. Görünürse görünmez yap, görünmezse görünür yap.
Şimdi projemizi çalıştıralım.
publicclass Test {
publicstaticvoid main(String[] args) {
Pencere1 pencere = new Pencere1(100, 100, 300, 100);
}
}
|
Butona tıklayalım.
Label görünmez oldu. Butona tekrar tıklayalım.
Label tekrar görünür oldu. Tıklamaya devam ettikçe bu işlemleri yapmaya devam edecektir.
Veysel Uğur KIZMAZ