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) {
}
}
}
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
Post a Comment