Skip to main content

Custom java swing TextField that has auto complete feacher

package com.util;


import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JTextField;

/**
 *Custom JText component that has a gentle auto complete menu
 * @author melsonbati
 */
public class JAutoCompleteTextField extends JTextField {
   
   
    private JPopupMenu popupMenu;
    private List<String> myList=new ArrayList<String>();
    private File txtFile=null;
   
    private ActionListener menuListener = new ActionListener() {
      public void actionPerformed(ActionEvent event) {
          setText(event.getActionCommand());
      }
    };
   
    public JAutoCompleteTextField(File txtFile){
        this.txtFile=txtFile;
        populate(myList,txtFile);
        addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
               try{ txtKeyReleased(evt);}catch(NullPointerException e){}
            }

            private void txtKeyReleased(KeyEvent evt)throws NullPointerException {
               
                    JAutoCompleteTextField me=(JAutoCompleteTextField)evt.getSource();
             
                   popupMenu= new JPopupMenu();

                   popupMenu.setFocusable(false);
                   List<String>filterdList=filterList(myList,me.getText());
                   JMenuItem item;
                   for(String token :filterdList ){
                       popupMenu.add(item = new JMenuItem(token));

                       item.addActionListener(menuListener);
                   }
                    Point p = me.getCaret().getMagicCaretPosition();

                    popupMenu.show(me, p.x, p.y + 20);              
               
            }
        });
       
    }

  private List<String>filterList(List<String> content,String word){
     List<String>resultList=new ArrayList<String>();
     for(String token :content){
         final String t=token.toLowerCase();
         if(t.startsWith(word) ||t.contains(word)){
             resultList.add(token);
         }
     }
     return resultList;
  }

    private void populate(List<String> myList, File tokens) {
 
        try {
            BufferedReader br = new BufferedReader(new FileReader(tokens));
            String line;
            while ((line = br.readLine()) != null) {
               myList.add(line);
            }          
        } catch (FileNotFoundException ex) {
         
        }catch(IOException e){
           
        }
    }
   
    public void appendToken(String token){
        token=token.trim();
        if(token.equals(""))
            return;
        if(myList.contains(token))
            return;
        myList.add(token);
        try {
            PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(txtFile, true)));
            out.println(token);
            out.close();
        } catch (IOException e) {
           
        }
    }
   
}

Comments

Popular posts from this blog

Installing liferay 6.2 on wildfly 10 app server and oracle 11g database & windows machine

*************************************DATABASE CREATION*********************************************************************************************** DOWNLOAD LIFERAY PORTAL SCRIPTS FROM https://www.liferay.com/downloads/liferay-portal/available-releases Rename the file as liferay.sql put it let say in under c drive , so it will be located like this  c:\liferay.sql from cmd dir c:\ SQLPLUS / AS SYSDBA @liferay.sql lportal lportal it will create the db ..after finishing go to sqlplus again to ggrant the below  to lportal user SQLPLUS / AS SYSDBA grant create session to lportal; grant connect to lportal; grant resource to lportal; *******************************CONFIGURE WILDFLY TO CONNECT TO ORACLE DB *****************************************************************************************************  configure wildfly to connect to oracle db Download the driver: ojdbc[VERSION].jar Create subfolders [WILDFLY_HOME]/modules/system/layers/base/com/o...

oracle drop all tables and sequences in a certain schema

--  please never put a comment starting with " / "  as this character means execute the previous line  BEGIN   FOR i IN (SELECT us.sequence_name               FROM USER_SEQUENCES us) LOOP     EXECUTE IMMEDIATE 'drop sequence '|| i.sequence_name ||'';   END LOOP;     FOR i IN (SELECT ut.table_name               FROM USER_TABLES ut) LOOP     EXECUTE IMMEDIATE 'drop table '|| i.table_name ||' CASCADE CONSTRAINTS ';   END LOOP; END; -- the following character executes the whole block of pl sql code /

itext 2.7.1 writing Arabic and English content in a PDF file

   public void createPdf(String filename) throws IOException, DocumentException {               Document document = new Document();           PdfWriter.getInstance(document, new FileOutputStream(filename));             document.open();             document.add(Chunk.NEWLINE);        FontFactory.register("c:/windows/fonts/tradbdo.ttf", "my_arabic");               Font myArabicFont = FontFactory.getFont("my_arabic" ,BaseFont.IDENTITY_H, BaseFont.EMBEDDED);         PdfPTable table = new PdfPTable(1);         table.getDefaultCell().setNoWrap(false);        // table.setRunDirection(PdfWriter.RUN_DIRECTION_RTL);         PdfPCell text = new PdfPCell(new Phrase("محمود السنباطيthis is أبتثجحخدرزسشصضطظعغفقكلمنهوى", myAr...