JavaFx kullanarak basit bir öğretmen atama programı nasıl yapılır?
Ekran görüntüsü bu şekilde olacak. Öğretmenler ve yaşları tamamen kafadan atıldı, gerçekle ilgisi yoktur 🙂
Paylaşacağım dosyanın içinde veri tabanı olacak ama yine de nasıl bir veri tabanında uğraşacağımızı görelim.
Şimdi kodlara geçersek; Veri tabanına bağlantı sınıfımız aynı olacak diğer paylaştığım yazıdakiler gibi, ben ilk önce veri tabanından veri çekeceğimiz sınıfı yazalım.Sınıfımızın adı VeritabaniController.
//Bu fonksiyonu combo box'a ekleyeceklerimiz için kullanacağız public ObservableList sehirGetir(){ ObservableList list = FXCollections.observableArrayList(); try { db.baglan();//veri tabanına bağlandık PreparedStatement ps =(PreparedStatement) db.connection.prepareStatement("select Sehir from atanacak_yerler");//komutumuzu yazdık ResultSet rs = ps.executeQuery();//sonuçlarını çektik while (rs.next()) { list.add(rs.getString("Sehir"));//observable list'e ekledik } return list;//listeyi geri döndürdük } catch (SQLException ex) { System.out.println(ex.getMessage()); } return list; } //Arayüzde ki combo box için kullanacağımız fonksiyon public ObservableList yerGetir(){ ObservableList list = FXCollections.observableArrayList(); try { db.baglan(); PreparedStatement ps =(PreparedStatement) db.connection.prepareStatement("select Yer from atanacak_yerler"); ResultSet rs = ps.executeQuery(); while (rs.next()) { list.add(rs.getString("Yer")); } return list; } catch (SQLException ex) { System.out.println(ex.getMessage()); } return list; } //Yine combo box için kullanacağımız bir başka fonksiyon public ObservableList bransGetir(){ ObservableList list = FXCollections.observableArrayList(); try { db.baglan(); PreparedStatement ps =(PreparedStatement) db.connection.prepareStatement("select Brans from atanacaklar"); ResultSet rs = ps.executeQuery(); while (rs.next()) { list.add(rs.getString("Brans")); } return list; } catch (SQLException ex) { System.out.println(ex.getMessage()); } return list; } /*Veri tabanında şehirlere göre okullar ayrılmış durumda bu yüzden Antalya seçilmişse Antalya'da ki okulları getirecek fonksiyon*/ public ObservableList secilenYerGetir(String sehir){//sectiğimiz şehri parametre olarak gönderdik ObservableList list = FXCollections.observableArrayList(); try { db.baglan(); PreparedStatement ps =(PreparedStatement) db.connection.prepareStatement("select Yer from atanacak_yerler where sehir = ?"); ps.setString(1, sehir);//gelen şehri komuta ekledik ResultSet rs = ps.executeQuery(); while (rs.next()) { list.add(rs.getString("Yer"));//listeye gelen yeri ekledik } return list; } catch (SQLException ex) { System.out.println(ex.getMessage()); } return list; } //Atama yap dedikten sonra bize atanmaya uygun öğretmenlerin branşlarını,isimlerini yaşlarını döndürecek public ObservableList atamaYap(String brans){//branşını gönderdik çünkü asıl önemli olan branş bizim için ObservableList list = FXCollections.observableArrayList(); try { db.baglan(); PreparedStatement ps = (PreparedStatement) db.connection.prepareStatement("select Ad,Brans,Yas from atanacaklar where Brans = ?"); ps.setString(1, brans);//gelen branşı komuta ekledik ResultSet rs = ps.executeQuery(); while (rs.next()){ Atananlar atananlar = new Atananlar();//Atananlar diye bir sınıf oluşturduk aşağıda iç kısmını yazacağım atananlar.setAd(rs.getString("Ad")); atananlar.setBrans(rs.getString("Brans")); atananlar.setYas(rs.getInt("Yas")); list.add(atananlar);//listeye ekledik atanan sınıfını } return list;//listeyi gönderdik } catch (Exception e) { System.out.println(e.getMessage()); } return list; }
Şimdi unutmadan Atananlar sınıfında ne olacağını yazalım. Komutlarını yazmayacağım çünkü gereksiz uzun. Sadece String Ad, Brans ve Integer Yas oluşturup. Getter ve Setter yapacağız.
Şimdi FXMLDocumentController sınıfını yazalım. Bu arada aşağıda yazılmadı ama VeritabaniController gibi sınıfları en üstte çağırdım her yerde kullanabilmek için, tanımlanmamışsa en üstte tanımlamışım dır.
public void cmbSehir(){//combo box'lara gelen şehirleri ekliyeceğiz list = vc.sehirGetir();//liste döndüren fonksiyonu çağırdık for (int i = 0; i < list.size(); i++) { cmb_sehir.getItems().add(list.get(i));//combo box'a ekledik } } public void cmbYer(){//komutlarımız aynı üstteki ile list = vc.yerGetir(); for (int i = 0; i < list.size(); i++) { cmb_yer.getItems().add(list.get(i)); } } //branşlar veri tabanında aynı olarak birden çok var aynı olanları ayıklamamız gerekli public void cmbBrans(){ list = vc.bransGetir();//fonksiyonu çağırıp listeye ekledik for (int i = 0; i < list.size(); i++) { if(i==0)//ilk gelen olmayacağı için hemen ekliyoruz cmb_brans.getItems().add(list.get(i)); else while(true){ if(cmb_brans.getItems().contains(list.get(i)))//bu combo box'da eğer ekli ise iptal ediyoruz break; else//yoksa ekliyoruz cmb_brans.getItems().add(list.get(i)); } } } //ve ilk başlangıçta bu yazdıklarımızı çağırıyoruz @Override public void initialize(URL url, ResourceBundle rb) { cmbSehir(); cmbYer(); cmbBrans(); } //Buton için onAction metodunu yazıyoruz @FXML private void atamaYap(ActionEvent event) { listView.getItems().clear();//ilk başta listview'in içini temizliyoruz int a = 0;//bu bir kontrol için lazım olacak ObservableList list2 = vc.atamaYap(cmb_brans.getSelectionModel().getSelectedItem());//gelecekleri observable list'e ekledik int ihtiyac = Integer.valueOf(txt_ihtiyac.getText());//arayüzdeki textfield'dan aldığımız değeri atıyoruz for (int i = 0; i < ihtiyac; i++) { String atanan = "Adı="+list2.get(i).getAd()+"\nBrans= "+list2.get(i).getBrans()+"\nYas= "+String.valueOf(list2.get(i).getYas()); /*Gelenleri tek bir string'e dönüştürdük*/ if(list.contains(atanan)){//aynısı var mı kontrol ettik a++;//kontrol için oluşturduğumuz int değerini arttırdık break; } else list.add(atanan);//eğer aynısı yoksa ekledik } if(a>0){//eğer en sonra a artmışsa aynısından bulmuş demek ki //Bunu en sonra yazdım çünkü öbür türlü iki defa bulursa iki defa uyarı ekranı gösterecekti JOptionPane.showMessageDialog(null, "İhtiyacınız kadar öğretmen bulunamadı."); } listView.setItems(list);//list view'a ekledik }
Sonradan aklıma gelen bir şeyi de sonra yazmak zorunda kaldım şehir seçildiğinde orada hangi okul varsa combo box’ta da o gözüksün dedim onun için cmb_sehir combo box’una bir onAction ekledim komutları şu şekilde;
@FXML private void sehirSecildi(ActionEvent event) { String secilen = cmb_sehir.getSelectionModel().getSelectedItem();//seçilen şehiri aldık list = vc.secilenYerGetir(secilen);//observable listeye ekledik for (int i = 0; i < list.size(); i++) { cmb_yer.getItems().clear();//sehir combo box'unu sildik cmb_yer.getItems().add(list.get(i));//gelen okulları tekrar ekledik } }
Veri tabanının dosyasının da içinde olduğu proje dosyasını buradan indirebilirsiniz.