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 /

Android Shaking View for wrong enterd password

1-create folder called  "anim" under "res" folder 2-create these two xml files under anim folde  res/anim/shake.xml   <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="500" android:fromXDelta="0" android:interpolator="@anim/cycle_7" android:toXDelta="10" /> res/anim/cycle_7.xml   <cycleInterpolator xmlns:android="http://schemas.android.com/apk/res/android" android:cycles="7" /> 3- In your activity ,put these two lines of code to shake the password field Animation shake = AnimationUtils.loadAnimation(this, R.anim.shake); findViewById(R.id.pwd).startAnimation(shake);