Java ile Sözlük Uygulaması
Posted: December 13th, 2008 | Author: Ahmet Kakıcı | Filed under: Programlama | Tags: java, kod | 19 Comments »Çok mükemmel bir sözlük değil ama örnek olması açısından işe yarayacağını düşünüyorum. Düzenli ifadeler ile arama yapan bir sözlük denemesi hani şu yazmaya başladığınızda arama yapanlardan. Sözlük herhangi bir veri tabanı kullanmıyor sadece bir txt dosyasından okuma yapıyor. kelimeler.txt adında bir dosya oluşturup içine istediğiniz kelimeleri girebilirsiniz. Ancak formatı şu şekilde olmalıdır : İngilizce\tTürkçe. İngilizce kelime ardından bir tab karakteri ve sonra türkçe anlamı gelmelidir. Kendi kullandığım kelimeler.txt dosyasını da örnek olsun diye veriyorum. Dosyaya dilediğiniz gibi kelime ekleyip çıkarabilir hatta okuma kaynağını değiştirip herhangi bir sitden vs arama da yapabilirsiniz diyor ve kodu sunuyorum:
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.awt.datatransfer.Clipboard;
public class SozLook extends JFrame implements ActionListener,KeyListener
{
public File dosya; //Kelimelerin okunacağı dosya
public FileReader acilan_dosya;
public BufferedReader girdi;
public String yazilar=""; //Dosyadan okunan veriler
public int myIndex; //TR->ING ING->TR çevrim türünü tutuyor
public JTextField Word; //Kelime girilen TextField
public JTextField Sonuc; //Sonucu gösteren TextField
public JPanel myPanel1,myPanel2;
public JList list; //Seçim listesi
public JListData ldata;
public JRadioButton trButton,ingButton;
public ButtonGroup myGroup;
public String urlString;
public String gelen;
public Boolean bulundu=false;
public Pattern urlPattern;
public Matcher urlMatcher;
public void init()
{
Container container = getContentPane();
container.setLayout(new BorderLayout(25,5));
myPanel1 = new JPanel();
myPanel1.setLayout(new BorderLayout(25,5));
myPanel2 = new JPanel();
myPanel2.setLayout(new FlowLayout());
Word = new JTextField(25);
Word.addKeyListener(this);
Sonuc = new JTextField(50);
Sonuc.setEditable(false);
ingButton = new JRadioButton("İngilizce -> Türkçe", true);
trButton = new JRadioButton("Türkçe -> İngilizce", false);
trButton.addActionListener(this);
ingButton.addActionListener(this);
myGroup= new ButtonGroup();
myGroup.add(trButton);
myGroup.add(ingButton);
myPanel2.add(ingButton);
myPanel2.add(trButton);
myPanel1.add(Word,BorderLayout.NORTH);
myPanel1.add(Sonuc,BorderLayout.SOUTH);
JScrollPane sp = new JScrollPane();
myPanel1.add("Center", sp);
ldata = new JListData();
list= new JList(ldata); //data verisiyle yeni liste oluşturuyor
sp.getViewport().add(list); //scrollpane
container.add(myPanel1,BorderLayout.CENTER);
container.add(myPanel2,BorderLayout.SOUTH);
setSize(500,300);
setResizable(false);
list.addMouseListener(new MouseAdapter()
{
public void mouseReleased( MouseEvent e )
{
if(!list.isSelectionEmpty())
elemanSecildi();
}
}
);
}
public SozLook()
{
super("SözLook - KTÜ");
init();
setVisible(true);
}
public static void main(String args[])
{
new SozLook();
}
public void actionPerformed( ActionEvent actionEvent )
{
Sonuc.setText("");
ldata.temizle();
ldata.addElement("");
list.disable();
harfYazildi();
return;
}
public void keyPressed( KeyEvent event )
{
}
public void keyTyped( KeyEvent event )
{
}
public void keyReleased( KeyEvent event )
{
harfYazildi();
}
public void harfYazildi()
{
Sonuc.setText("");
if(Word.getText().toLowerCase().length()==0)
{
ldata.temizle();
ldata.addElement("");
list.disable();
return;
}
bulundu=false;
ldata.temizle();
list.enable();
list.clearSelection();
if(ingButton.isSelected())
urlString ="^"+Word.getText().toLowerCase()+"[^\t]*";
else
urlString ="\t"+Word.getText().toLowerCase()+".*$";
bul(0);
}
public void elemanSecildi()
{
if(ingButton.isSelected())
{
urlString ="^"+list.getSelectedValue().toString()+".*\t.*";
myIndex=1;
}
else
{
urlString ="^.*"+list.getSelectedValue().toString()+".*$";
myIndex=0;
}
bul(1);
}
public void bul(int tur)
{
try
{
dosya = new File( "kelimeler.txt" );
acilan_dosya = new FileReader ( dosya );
girdi = new BufferedReader ( acilan_dosya );
urlPattern = Pattern.compile(urlString);
while ( (yazilar=girdi.readLine()) != null )
{
urlMatcher = urlPattern.matcher(yazilar);
if(urlMatcher.find())
{
if(tur==0) //harfe göre kelime aranıyor
{
bulundu=true;
ldata.addElement(urlMatcher.group());
}
else //listeden seçilen kelimenin karşılığı aranıyor
{
String [] bulunan=urlMatcher.group().split("\t");
Sonuc.setText(bulunan[myIndex]);
break;
}
}
if(yazilar.toLowerCase().toCharArray()[0]>Word.getText().toLowerCase().toCharArray()[0])
break;
}
if(tur==0 && !bulundu)
{
ldata.addElement("");
list.disable();
return;
}
}
catch ( IOException exception )
{
System.out.println("Dosyadan okurken hata oluştu");
}
finally
{
try
{
girdi.close();
}
catch( IOException exception )
{
System.out.println("Dosya kapatılırken hata oluşturuldu.");
}
}
}
}
class JListData extends AbstractListModel {
private Vector dlist;
public JListData()
{
dlist = new Vector();
makeData();
}
public int getSize()
{
return dlist.size();
}
private Vector makeData()
{
dlist = new Vector();
return dlist;
}
public Object getElementAt(int index)
{
return dlist.elementAt(index);
}
public void addElement(String s)
{
dlist.addElement(s);
fireIntervalAdded(this, dlist.size()-1, dlist.size());
}
public void temizle()
{
dlist.clear();
}
}
Benzer yazılar:





ahmet bu web üzerindede çalışır değil mi ?
applet olarak yazmadım ama düzenlersen web üzerinden de çalışır :)
Süpermiş, kodu çok incelemedim ama Türkçe karakter sıkıntısının olmaması güzel. Bunu parse edip veritabanına atmamız mümkün olur mu acep?
Veritabanına neyi atacağını anlayamadım? Kelimeleri veri tabanından çekeceksen sorgu manyağı olursun :) Her tuşa basışta bir sorgu… Ama eğer yazdıktan sonra bir buton ile arama yaparsan (ki daha mantıklı) gayet güzel çalışır ;)
Peki Seslisozluk.com gibi Ajax uygulamalarında da sonuçta veritabanı kullanılmıyor mu? “sorgu manyağı” olmanın dezavantajı ne? :)
Her harfe basıldığında bir sorgu yapılması sunucuyu epey yorar diye düşünüyorum. Ancak seslisozluk yapmış, ve bu kadar popüler olmasına rağmen sorun çıkarmıyorsa demek ki yapılsa da oluyormuş :)
Merhabalar;
Bu kodlama, programlara işlerine çok uzağım şu an. Daha yavaş yavaş Web tasarımından başladım işe. Ben İtalyan dili okuyorum. Acaba ben bu bahsettiğiniz sözlüğü İtalyanca-İngilizce-Türkçe sözlük şeklinde kullanabilir miyim? Veya siz benim için böyle bir şey yapabilir misiniz, tabii vaktiniz varsa.
Saygılarımla…
Kelimelerin bulunduğu dosyaya İngilizce\tTürkçe yerine İtalyanca\tTürkçe şeklinde yazarak italyanca < -> türkçe sözlük yapabilirsiniz.
amet :) siteyi yeni keşfettim iyi yazıların var tebrikler. ama şu sözlüğe yalandan iki üç tane class koysaydın ne lan bu benim applet gibi :D tek class kökle gitsin.
Şaka bir yana eline sağlık..
birden fazla sınıfa ihtiyaç duyacak kadar karmaşık bir iş değildi :) şu bitirme ödevimdeki yapay sinir ağını bir yazayım o zaman gör bak kaç sınıf olacak :)
Şaka bir yana teşekkür ederim.
Programda olsa sınıf ayrımına hayır diyerek bitiriyorum :D
Tam yerinde bitmiş :) Bu tarzda devamı gelse pek iyi olmaycacaktı :)
Tam da dönem ödevimim için gerekli kodlar:) Saolun.
Kardeş gerçekten çok teşekkür ederim.Programlama ile ilgili yazılarının devamını bekiyoruz
ben cep telefon için sözlük hazırlıyorum bana yardımcı olurmusununz teşekürler
meraba.Ben kodunuzu yazdım ama şu kısmını anlamadım zaten orda hata verdi
if(tur==0 &amp;&amp; !bulundu)
Fatma kodun o kısmı blog’un azizliğine uğramış.
if(tur==0 && !bulundu)
olacaktı aslında.
Ya hocam ben de java ya yeni yeni başladım .
bu .txt dosyasını nereye atacaz da gorecek bu java ?
Yeni başladığımdan mazur gör.
Programın class dosyası ile aynı klasöre koyman yeterli. Aksi halde dosyanın tam yolunu (c:\….) gibisinden de verebilirsin.