1. sayfa
Hangi platform ve teknoloji? Anladığım kadarı ile autocomplete ile arama yapmak istiyorsunuz. Web (JSP,JSF), Masaüstü (Swing,JavaFx) , Android ? Butonsuz olarak event yakalamamız gerekiyor ama platforma göre değişiyor. ![]() |
Masaüstü swing. Yardımınıza ihtiyacım var. |
Örnek olarak MSSQL ile gösteriyorum. Edit: Takıldığın yerde sor (gösterek) , izahatini ve soruna yönelik çözüm bulmaya çalışırım ----------JFrame Class (Özet Event)------------- private javax.swing.JTable table; private JTextField textField; //class property textField.addKeyListener(new KeyAdapter() { //Arama yapacağın textfield'e event ekleriz @Override public void keyReleased(KeyEvent arg0) { /*Keyup event ekliyoruz (klavye tuşunu bıraktığında), alternatif bir tuşa basmaya gerek kalmaz. Ancak kötü tarafı tuşu her basıp bıraktığında çalışır. Buna alternatif çözümler mevcut. Ancak kolay anlaman için en basit temeli bu şekilde olması için sade tutuyorum ve bu problemi gözardı ediyorum*/ String arananKelime=textField.getText(); //Textfield içindeki alanı alıyoruz MsSQL sql=new MsSQL("localhost",1433,"denemeDatabase","Sa","Sa12345678"); //veritabanı bağlantısını alıyoruz java.sql.PreparedStatement pstmt=null; //PreparedStatement ön referans alırız DefaultTableModel model=new DefaultTableModel(); //Boş bir JTable modeli oluştururuz model.addColumn("Ad"); //modelde iki adet gösterilecek kolon ekleriz model.addColumn("Soyad"); try { pstmt=sql.getConn().prepareStatement("select top 1000 personel.Ad, personel.Soyad from personel where personel.Ad like '%?%' or personel.Soyad like '%?'%'"); /*Sorgumuzu oluştururuz, ancak parametre alanlarını soru işaretleri ile bırakırız*/ pstmt.setString(1, arananKelime); /*Her bir parametreyi tek tek set ederiz. Not: Burda parametre kaçıncı soru işareti olduğudur ve bu 1 sayısı başlar*/ pstmt.setString(2, arananKelime); sql.sorgula(pstmt); /*Sorgumuz sorgulanır*/ java.sql.ResultSet sonucSet=sql.getResult(); /*Sonucu alırız*/ while(sonucSet.next()) /*Dönen sonuc kadar döngüye sokarız*/ { model.addRow(new Object[] {sonucSet.getString("Ad"),sonucSet.getString("Soyad")}); /*Her kayıttaki bu kolonları modelimize ekleriz*/ } table.setModel(model); /*döngü bittiğinde modeli set ederiz ve metod bittiğinde ekranda listemizi görebiliriz (Tabi bir hata oluşmuyorsa veritabanında)*/ } catch (SQLException e) { /*Şayet SQL ile hata oluşursa*/ e.printStackTrace(); /*StackTrace i consola yazdır. Hatanın ne olduğunu görelim*/ } } }); ----------MsSQL Class--------------- import java.sql.*; public class MsSQL { private String host=""; private String instance=""; private String port=""; private String database=""; private String username=""; private String password=""; private String baglantiuzun; private ResultSet result; public ResultSet getResult() { return result; } protected Connection conn; protected PreparedStatement pst; public MsSQL(String host,int port,String database,String username,String password) { this.host=host; this.port=port; this.database=database; this.username=username; this.password=password; this.baglantiuzun="jdbc:sqlserver://"+this.host+":"+this.port+";databaseName="+this.database+";user="+this.username+";password="+this.password; } public MsSQL(String host,String database,String username,String password , String instance) { this.host=host; this.database=database; this.username=username; this.password=password; this.instance=instance; this.baglantiuzun="jdbc:sqlserver://"+this.host+";instanceName="+instance+";databaseName="+this.database+";user="+this.username+";password="+this.password; } public void sorgula (String sql) throws SQLException { if(conn==null){conn=DriverManager.getConnection(baglantiuzun);} pst=conn.prepareStatement(sql,ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY); pst.setFetchSize(5000); result=pst.executeQuery(); } public void sorgula (PreparedStatement statement) throws SQLException { if(conn==null){conn=DriverManager.getConnection(baglantiuzun);} /*Bağlantı yok ise veya koptuysa bağlan*/ pst=statement; pst.setFetchSize(5000); result=pst.executeQuery(); } public void duzenle (String sql) throws SQLException { if(conn==null){conn=DriverManager.getConnection(baglantiuzun);} pst=conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); //Düzenleme için bağlantı oluşturulur pst.executeUpdate(); //executeQuery(); } public void duzenle (PreparedStatement statement) throws SQLException { if(conn==null){conn=DriverManager.getConnection(baglantiuzun);} pst=statement; pst.setFetchSize(5000); result=pst.executeQuery(); } /*Getter ve Setter metodlar*/ } |
Şu anlık tek sorun ben aramaları buton olarak istiyorum. yani diyelimki veritabanında Ali Ayşe Veli var. Ben A yazdığımda ali ve ayşe nin buton olarak gelmesini istiyorum. Yardımınıza ihtiyacım var. |
javayla ilgilenmedim ama aşağıda wpf ile yapılan örnek çektim herhalde bunun gibi birşey arıyorsunuz veritabanı temsilidir. Videoyu izlemek için tıklayınız |
Bence soru tam anlasilmamis. Ben de butona basmadan arama yapmak gibi bir anlam cikardim ve ilk cevaba hak verdim, fakat sonraki mesaji gorunce ilk mesaji tekrar okudum, siz cok baska bir sey istiyorsunuz anlasilan, Elinizde kagit kalem ile, bunun bir basit goruntusunu cizip anlatmaya calisirsaniz belki daha net anlasilir, Sqing tecrubesinden uzun zamandir uzak oldugum icin ben net bir cevap veremem ama bilenler ve cevap verenler belki cikabilir. |
Ben hem butonsuz atana olsun hemde sonuçları buton olarak göstermesini istiyorum < Resime gitmek için tıklayın > Yazımın kendi olduğu için özür dilerim. Yardımınıza ihtiyacım var. |
Fena yoğun günler geçiriyorum, foruma pek uğrayamadım. Burda sadece soracağım şu soruya göre cevap vermeye çalışacağım. Buton olmasının amacı nedir? Aradığınız değerlerden gelen verilere göre buton ile menü yönlendirmesi mi yapacaksınız? Yada belirli bir işlemmi yapacaksınız? Normal koşullarda JComboBox içerisine (biraz komplex olsada) farklı objeler atabilmemiz mümkün. Ancak gelen verilerin sebebine göre farklı bir önerim olabilir. ![]() |
Butona tıklayınca tıklanan kişinin profil sayfası açılacak. Yardımınıza ihtiyacım var. |
Çok etkili bir yöntem olmasada; Şu şekilde pratik bir çözüm oluşturabilirsiniz. (Komplex component oluşturmaktansa... (Buton listeleyen combobox için)) Aldığınız verileri bir List içerisinde (Linked olmasına dikkat ediniz) tutunuz. List içerisindeki jCombobox'a içerisinde görünmesini istediğiniz alanı aynı sıra (for-foreach) ile jCombobox'a üzerine ekleyiniz. jCombobox'a ise seçilen sıradaki = list içerisindeki objeye denk gelmiş olacaktır. jCombobox onItemChange (yanlış hatırlamıyorsam) eventinin içerisinde combobox seçim satır numarasını elde edebilirsiniz (-1 kontrolüne dikkat, seçilmemiş olabilir) Bu event içerisinde istediğiniz işlemleri yapabilirsiniz (Bahsettiğiniz, profil ekranını açmak gibi) (Bonus: JCombobox obje listesi alabildiği için doğrudan ayrı bir obje tutmadan, seçileni içinden alabilirsiniz. Ancak ekranda görüntülenecek olan toString metodu doğrudan çağrılacaktır. Kendiniz bir toString metodu oluşturursanız (yani toString ile başka bir işleminiz yok ise), dahada pratik olabilir) |
1. sayfa
java'da veritabanından verileri çekerek butonsuz arama yapmak istiyorum. Sonuçlarıda butonlar olarak yazdırmak istiyorum. Bunu nsaıl yapabilirim? Kod örneği verebilir misiniz?
Yardımınıza ihtiyacım var.