30 Nisan 2013 Salı

İreport İle Raporlama

İreport Kullanımı


İlk önce raporlama işlemi için gereken ireport programını  http://community.jaspersoft.com/download  sitesinden  indirerek programı kurmaktır.


İreportu kurduktan sonra eclipsede projemizin üzerine gelip sağ tıklıyoruz ordan BuildPath/Configure Build Pathe tıklıyoruz.

Açılan Sayfadan  Libraiers kısmını seçip sağ taraftaki Add ExteRnal Jars  kısmına tıklıyoruz.Ordan indirdiğimiz ireportun kayıtlı olduğu klasöre tıklıyoruz .
Ben ireportu kurduğumda C ye kurulduğu için ireport doyası c klosöründe program files içerisinde JaspertSoft adıyla kayıtlı.Üzerine gelip tıklıyorum açılan İreport /Modulerse/Ext  tıklayıp açılan sayfadan
commons_beanutils
commons_collection
commons_digester
commons_javaflow
commons_logging
groowy_all
iText
jasperreports .jar dosyalarını seçip projemize ekliyoruz.
Daha sonra projemizin içerisine rapor adında bir klasör oluşturup içerisine yine seçtiğimiz jar dosyalarını koplayıp yapıştırıyoruz.Daha sonra






İreportu Çalıştırdıktan sonra: 


Yukarıda gördüğümüz ekran karşımıza geliyor.


Resimde gördüğümüz gibi Tool kısmına gelip  optionsu seçiyoruz.



Açılan saydan classpathı seçiyoruz.Burdan Add Jar kısmına tıklayıp bilgisayarımızda kayıtlı olan Derby Jarı ireporta ekliyoruz.Ekledikten sonra ok tuşuna basıyoruz.Daha sonra veritabanı yolunu beliryeceğiz.


Daha sonra veritabanı yolunu beliryeceğiz.Ya anasayfadan step1 yazan yere tıklıyoruz yada  yukarıda sol üst tarafta report DataSource toolbarına tıklıyoruz.


açılan sayfada Database JDBC connection seçili olduğı için nexte tıklıyoruz.Eğer seçili olmasaydı DatabaseJDBC connectionu seçecektik.


Açılan sayfadan veritabanı yolunu belirleyeceğiz.


Name yazan kısma rapor dosyamızın kaydolcağı isimi belirliyoruz.

Jdbc driver kısmına ise connectiontodb de driver kısmına yazığımız "org.apache.derby.jdbc.EmbeddedDriver" kısmını koplayıp jdbc driver kısmına yapıştırıyoruz.

Jdbc Url kısmına ise kaydolan tablolarımızın adresinin yazıyoruz.Öncelikle buraya connectiontodb kısmındakı url de yazan yerde yazan  yolun sadece jdbc:derby: kısmını  koplayıp yapıştırıyoruz.Daha sonra tablolarımızn oluştuğu klasöre gelip oranın adresininde koplayalıp jdbc url kısmına yapıştırıyoruz.Gerekli alanları doldurduktan sonra test butonuna tıklayıp test ediyoruz eğer başarılı mesajını görürsek saveye tıklayıp kaydediyoruz.
Kaydetme işlemini yaptıktan sonra sıra geldi rapor sayfasını oluşturmaya bunun için anasayfadan step2 ye yada file/new yapıp yeni  rapor sayfası oluşturmak için tıklıyoruz.

Bu sayfadan istediğimiz rapor tasarımını seçip Launc Report Wizarda tıklıyoruz.


Açılan sayfadan report name kısma raporumuza ne ad vermek istiyorsak yazıyoruz.Neyin raporunu alcaksak onun adını yazmamız daha iyi olur .
Location kısmına ise raporun nereye kaydolcağını belirliyoruz.Adresi workspacede bulunan projemizin içine oluşturduğumuz rapor klasörüne yönlendiriyoruz.Daha sonra next butonuna tıklıyoruz.
Açılan sayfadan sql ifadeleri ile hangi tabloyla işlem yapcaksak onu yazıp next butonuna tılıyoruz.
Buradan hangi alanların raporumuzda olmasını istiyorsak seçip next butonuna tıklıyoruz.
Açılan sayfadan next butonuna tıklıyoruz.
Son olarak finish butonuna basıyoruz.





Açılan sayfadan rapor sayfasını düzenleyip preview kısmındanda önizleme yapabiliriz.
Raporlama sayfasını yaptıktan sonra son olarak hangi raporlama işlemini nerde yapcaksak o guiye gelip 
eğer rapor menuIteme basınca rapor oluşturcaksa menuıteme action veriyoruz.Bu bize kalmış istersek butonasa action verip raporlama sayfasını çağırabiliririz.

Guiye:

UrunListesiItem.addActionListener(new ActionListener() {


@Override
public void actionPerformed(ActionEvent arg0) {
Connection conn = ConnectionToDb.getConnection();

try {
JasperPrint print = JasperFillManager.fillReport(
"urunrapor/report2UrunListesi.jasper", null, conn);

JasperViewer.viewReport(print, false);
} catch (JRException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
});

kodu yazıp çalıştırdıktan sonra işlemimiz sonlanmış oluyor.Başka bir rapor oluşturmak istediğimizde file/new seçeneğini seçip raporumuzu oluşturuyoruz.
Resim.1.1.Örnek Raporlama Resmi























Silme İşleminde Kısıtlama

Bütün programlarımızda silme işlem vardır.Programlarımızda kayıtlarımız önemlidir.Sil tuşuna bastığımızda hemen silme işlemi yapılması yerine bir mesaj vermesi gerekir.Bunun için:

Guiye:



int i = JOptionPane.showConfirmDialog(null, "Silmek İstediğinizden Emin misiniz?");

if (i == JOptionPane.YES_OPTION) {

GrupDao.sil(silinecekGrupDomain);
}


int değişkenini tanımlamımızın sebebi çıkan mesajda yes=1 ,no=2,cancel=3 anlamına gelir.Yani 1 ise sil,2 ise silme,3 ise vazgeç anlamına gelir.


Resim.1.1.Örnek Resim





Enter Tuşuna Basıldığında Kayıt Yapılması


Kayıt işlemlerinde bilindiği gibi değerleri girdikten sonra kaydet butonuna basıldığı zaman kayıt işlemi yapılıyor.İşimizi kolaylaştırmak istersek enter tuşuna basıldığında da kayıt ekleme işlemi yapılır.Bunun için:

Guiye:

getRootPane().setDefaultButton(ekleButton);

Yukarıdaki kodu  panelimizin içine yazıyoruz.Böylece enter tuşuna basıldığında kayıt işlemi yapılmış olur.


24 Nisan 2013 Çarşamba

JListteki Bir Kayıt Seçildiğinde JTableye Atanması

JListe bulunan bir kayıt  seçildiğinde JTableye Atanması

Gui Sınıfına:

urunlerJList.addMouseListener(new MouseListener() {

//JListe addmouselistener eklenir.

@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub

}

@Override

public void mouseClicked(MouseEvent arg0) {

UrunDomain secilenUrunDomain = (UrunDomain) urunlerJList
.getSelectedValue();

//JListte değerlerin alınacağı domain tanıtılıyor.

String urunAdi = secilenUrunDomain.getUrunAdi();

int adeti = 1;

//Adeti dominde tanımlanmadığı için.Kendimiz adetinin beliryececiğimiz için adet sayısını birden başlatıyoruz.

Double fiyat = secilenUrunDomain.getFiyati();


model.addRow(new Object[] { urunAdi, adeti, fiyat });

//JTabledeki alanlara secilen ürünün otomatik satır oluşturmasını sağlıyor.

}
});


Şekil.1.1.Örnek Resim

Şekilde görüldüğü gibi JListte secilen kazak ve ceket ürünleri seçildiğinde tabloda bir satır oluşup Jlistteski bilgiler Jtableye atanıyor.


17 Nisan 2013 Çarşamba

Değer Girmeden Kaydetmeyi Engelleme


Kaydetme işleminde belirlenen değerler girilmeden kayıt işlemini engelleyeceğiz.


String kodu = grupKoduField.getText();//Kodu alanı tanımlaması yapılıyor.
   String adi = grupAdiField.getText();//Ad alanı tanımlaması yapılıyor.



if (!adi.isEmpty() && !kodu.isEmpty()) {

    ekleButton.setBackground(Color.green);//Alanların hepsi doldurulup ekle Kaydetme Başarılı olursa butonun alacacı renk belirlenir.
   

GrupDomain GrupDomain= new GrupDomain();


GrupDomain.setGrupKodu(grupKoduField.getText());
GrupDomain.setGrupAdi(grupAdiField.getText());
GrupDao.ekle(GrupDomain);


ListeJList.setListData(GrupDao.listele().toArray());
 } else {

 ekleButton.setBackground(Color.red);//Alanlar doldurulmadan kaydetmek istediğimizde ekle butonun yanacağı renk belirlenir.
    JOptionPane.showMessageDialog(null,
      "tüm sütünları doldurun!");//Verilecek mesaj yazılır.



}
}
});

Şekil.1.1.Örnek Resim

Görüldüğü gibi girilecek alanlar tanımlandıktan sonra if else ile kısıtlama yapılıyor.Eğer belirlenen alanların hepsi doldurulup kayıt işlmi yapılırsa kayıt başarılı olduğundan  Ekle buton yeşil yanar.



Şekil.1.2.Örnek Resim

Eğer alanlar doldurulmadan kayıt işlemi yapılmaya çalışılırsa "Tüm sütunları doldurun"mesajını verir ve buton Yeşil Yanar.



JLİSTİN ARKA ZEMİN RENGİNİ DEĞİŞTİRME

Bilindiği gibi programlarımızda JListlerin rengi beyaz olmaktadır.Görsellik açısından daha güzel olmasını istersek rengini değiştirebiliriz.

JListimizin bulunudugu guiye gelip:


JList liste = new JList(); //Liste tanımlanması yapılıyor

  liste.setBackground(Color.lightGrey); //Listenin hangi renk olmasını istiyorsak renk seçilir.


bu JListimizi oluşturan ve rengini değiştirmeyi sağlayan kodlar yazılır.

Şekil.1.1.JList Örneği

Yukarıdaki şekilde görüldüğü gibi rengi beyaz olan JListin rengi gri olarak değiştirildi.


10 Nisan 2013 Çarşamba

JButton ve MenıItem Nesnelerine İcon Ekleme

İkonların bilgisayardaki yerini belirlemek için oluşturulan ImageIcon nesnesinde parantez içinde yolunu belirledim. Benim resimlerim proje ile aynı klasör içinde bulunduğu için sadece resim adını yazdım. Daha sonra menü öğesini oluştururken isimden sonra oluşturduğum ikonları belirttiğim isim ile menü öğesine ekledim.


JMenuItem MusteriTanimlamaItem = new JMenuItem("Müşteri Tanımlama",
new ImageIcon("Icons/musteri.png"));
JMenuItem MusteriGrubuTanimlamaItem = new JMenuItem(
"Müşteri Grubu Tanımlama", new ImageIcon(
"Icons/musterigrubu2.png"));
JMenuItem UrunTanimlamaItem = new JMenuItem("Ürün  Tanımlama",
new ImageIcon("Icons/grupurun.png"));
JMenuItem UrunGrubuTanimlamaItem = new JMenuItem(
"Ürün Grubu Tanımlama", new ImageIcon("Icons/grupurunn.png"));






 Butonlara ikon ekleme için daha önce menü öğelerinde yaptığım işlemlerin aynısını uygulayacağım. 


JButton TamamButton = new JButton("Giriş" ,new ImageIcon("Icons/ekle2.png")); JButton KapatButton = new JButton("Kapat",new ImageIcon("Icons/iptal.png"));








3 Nisan 2013 Çarşamba

VERİTABANINA BAĞLANTI

ÖnÖnceden veri tabanı için oluşturduğum sınıfta kullanacağım nesnelerin sınıfını ekliyoruz. tabanı için oluşturduğum sınıfta kullanacağım nesnelerin sınıfını ekliyoruz.
import
java.io.File;
import
java.sql.Connection;
import
java.sql.DriverManager;
import
java.sql.SQLException;


Daha sonra bağlantı için kullanacağımız ver tabanı yolunu, kullanıcı adını ve şifresini private olarak belirliyoruz. Final kullanılmasının sebebi ise bu değerleri kullanırken değiştirilemez olması gerekiyor. 


private
static String driver = "org.apache.derby.jdbc.EmbeddedDriver";
private static String url = "jdbc:derby:KuruTemizleme;create=true;";
private static String user = "";
private static String pass = "";

Daha sonra kullanacağımız veritabanının kayıt yerini belirlioruz.

static
{
String ev, sistem;
ev = System.getProperty(
"user.home",".");
sistem = ev + File.
separatorChar + "KuruTemizlemeada";
System.setProperty(
"derby.system.home", sistem);

Bu işlemlerden sonra projemize gerekli kütüphaneyi ekliyoruz. Daha sonra bu kütüphaneyi projemizde belirtme işlemini yapıyoruz.

try
{
Class.forName(
driver);
}
catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

Burada üstte yazdığımız yolu, kullanıcı adını ve şifreyi kullanarak bağlantımızı yapıyoruz.İşlemler sonucunda return ile dolduruyoruz.


public
static Connection getConnection() {
Connection conn =
null;
try {
conn = DriverManager.getConnection(
url, user, pass);
}
catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}

Pojo [Plain Old Java Objects] Nedir?

Pojo [Plain Old Java Objects] Nedir?


POJO en basit şekilde tanımlanan java nesnelerine verilen isimdir. Açılımı (plain old java objects) olan veri taşıyıcı sınıfıdır. JEE tarafında baked bean olarak kullanılırlar.
Plain old java objects, bunu bu kadar vurgulamalarının nedeni şu :
frameworkler kendi tanımladıkları bir arayüzün implementasyonlarına hizmet vermeyi seçebilir. Bu durumda sizin kodunuz ile framework arasında gereksiz bir “bağımlılık” yaratılmış olur.
“POJO” terimi esas önemli Java nesne modelleri, kongre ya da çerçeveleri herhangi bir takip etmez bir Java nesnesi göstermek için kullanılır.
POJO kullanarak tasarımlar daha yaygın halde kullanılır. Sistemleri bu POJO çerçeveler ve işlevsellik alanlarında gerçekten ihtiyaç olduğu konusunda daha fazla seçenek sunulmustur ve tam olarak ortaya çıkmıştır. Bu modelde, programcı bir POJO ile daha fazla bir şey yaratır.  Bu POJO tamamen ticari mantık üzerine odaklanmış ve (kurumsal) çerçeveler bağımlılıkları vardır.

Kod Ornegi ;

public class Uye
{
private Integer id;
private String userName;
private String password;
public void setId(Integer id) {
this.id = id;
}
public Integer getId() {
return id;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserName() {
return userName;
}
public void setPassword(String password) {
this.password = password;
}
public String getPassword() {
return password;
}
}

STATİC BLOK

Static blok


Java da "static" anahtar kelimesi kullanılarak; değişken,metot,blok ve hatta sınıf tanımlanabilir.
Sınıflar için "static" sadece inner class (iç sınıf) kullanımında geçerlidir.
Static değişkenler javada sınıf değişkenleri (class variable) olarak bilinir.Nesneye bağımlı değildir ve sınıfın ismiyle erişilir.
Static metodlar da sınıf metodlarıdır,nesne yaratmadan direk sınıf ismiyle çağırılır,tamami ile nesneden bağımsızdır.Static metotlar için en önemli nokta;static bir metot içerisinden static olmayan bir değişkene veya bir metoda erişilemeyeceğidir.Ama bunun tam tersi geçerlidir yani static olmayan bir metot içerisinden static bir değişkene veya metoda erişilebilir.
Bu önemli noktayı açıklamak gerekirse;bildiğiniz gibi normal static olmayan metotlar nesneye bağımlıdır ve nesne üzerinden çağrılırlar ama static metodlar yukarda bahsettiğimiz gibi nesneden bağımsızlardır.Bu yüzden static bir metot içerisinden nesneye bağımlı bir metot çağıramayız çünkü ortada nesne yoktur.
Ve bir önemli nokta daha static değişkenler,bloklar sınıf yüklenirken (class load) oluşturulur ve sadece bir kez oluşturulur.
Static bloklar çok kullanılan bir yapı değildir,o yüzden çok bilinmezler.
Kullanım şekli :
public class Test {
static{
System.out.println("static block..");
}
}
Static bloklar yukarda bahsedildiği gibi sınıf JVM (java virtual machine) tarafından class loader ile yüklenirken çalıştırılır.


Ne için kullanılır ?



Static bloklar "initializer" gibi düşünülebilir,static değişkenlere ilk değerlerini vermek için kullanılır.
Örneğin:
public class Test {
static int a;
static{
a = 5;
}
}
Şöyle bir soru aklınıza gelebilir,neden static değişkeni oluştururken direk değerini vermiyoruz da blok içinde vermeye çalışıyoruz ?
Çünkü blok içinde dinamik birşey çalıştırmak isteyebilirz,örneğin if yapısını kullanabiliriz,bu yüzden değişkenin değeri bir koşula bağlı olabilir veyahut static bir dizi değişkenimizin olduğunu düşünelim,burdada for döngü yapısını kullanarak static bir dizinin ilk değerlerini vermek isteyebiliriz ve bunu sadece static blok kullanarak yapabiliriz.
Static blokları bir metot gibi düşünmek gerekir,sınıflar yüklenirken ve sadece bir kez çağrılan bir metot gibi...