Java实现自动补全提示的文本框
标签:
杂谈 |
1.ListPopup类:
- import
java.awt.BorderLayout; - import
java.awt.Color; - import
java.awt.Point; - import
java.awt.Rectangle; - import
java.awt.event.MouseEvent; - import
java.util.ArrayList; - import
java.util.Enumeration; - import
javax.swing.BorderFactory; - import
javax.swing.DefaultListModel; - import
javax.swing.JList; - import
javax.swing.JPopupMenu; - import
javax.swing.JScrollPane; - import
javax.swing.ListSelectionModel; - import
javax.swing.event.ListSelectionEvent; - import
javax.swing.event.ListSelectionListener; - import
javax.swing.event.MouseInputListener; -
-
- public
class ListPopup extendsJPopupMenu implementsMouseInputListener { -
-
privateJList list; -
privateJScrollPane pane; -
privateArrayList newlisteners= ArrayList(); -
publicvoid addListSelectionListener (ListSelectionListener l){ -
if(!listeners.contains(l)) -
listeners.add(l); -
} -
publicvoid setSelectedIndex( intindex){ -
if(index>=list.getModel().getSize()) -
0;index= -
if(index<</SPAN>0) -
1;index=list.getModel().getSize()- -
list.ensureIndexIsVisible(index); -
list.setSelectedIndex(index); -
} -
publicObject getSelectedValue(){ -
returnlist.getSelectedValue(); -
} -
publicint getSelectedIndex(){ -
returnlist.getSelectedIndex(); -
} -
publicboolean isSelected(){ -
returnlist.getSelectedIndex()!=- 1; -
} -
publicvoid setLastOneSelected(){ -
intcount=list.getModel().getSize(); -
if(count>0){ -
1);list.ensureIndexIsVisible(count- -
1);list.setSelectedIndex(count- -
} -
} -
publicvoid removeListSelectionListe ner(ListSelectionListener l){ -
if(listeners.contains(l)) -
listeners.remove(l); -
} -
privatevoid fireValueChanged(ListSelectionEvent e){ -
for(ListSelectionListenerl:listeners){ -
l.valueChanged(e); -
} -
} -
publicListPopup() { -
newsetLayout( BorderLayout()); -
newlist = JList(); -
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); -
this);list.addMouseListener( -
this);list.addMouseMotionListener( -
newlist.setModel( DefaultListModel()); -
newpane = JScrollPane(list); -
null);pane.setBorder( -
add(pane, BorderLayout.CENTER); -
} -
-
publicint getItemCount() { -
DefaultListModel model = (DefaultListModel) list.getModel(); -
returnmodel.getSize(); -
} -
-
publicObject intgetItem( index) { -
DefaultListModel model = (DefaultListModel) list.getModel(); -
returnmodel.get(index); -
} -
-
publicvoid addItem(Object o) { -
DefaultListModel model = (DefaultListModel) list.getModel(); -
model.addElement(o); -
list.repaint(); -
} -
-
publicvoid removeItem(Object o) { -
DefaultListModel model = (DefaultListModel) list.getModel(); -
model.removeElement(o); -
list.repaint(); -
} -
-
publicvoid setList(Iterable iterable) { -
newDefaultListModel model = DefaultListModel(); -
for(Object o : iterable) { -
model.addElement(o); -
} -
list.setModel(model); -
list.repaint(); -
} -
-
publicvoid setList(Enumeration e) { -
newDefaultListModel model = DefaultListModel(); -
while(e.hasMoreElements()) { -
model.addElement(e.nextElement()); -
} -
list.setModel(model); -
list.repaint(); -
} -
-
publicvoid setList(Object... objects) { -
newDefaultListModel model = DefaultListModel(); -
for(Object o : objects) { -
model.addElement(o); -
} -
list.setModel(model); -
list.repaint(); -
} -
-
-
publicvoid mouseClicked(MouseEvent e) { -
} -
-
publicvoid mousePressed(MouseEvent e) { -
if(list.getSelectedIndex()!=-1) -
newfireValueChanged( ListSelectionEvent(list, true));list.getSelectedIndex(), list.getSelectedIndex(), -
} -
-
publicvoid mouseReleased(MouseEvent e) { -
} -
-
publicvoid mouseEntered(MouseEvent e) { -
} -
-
publicvoid mouseExited(MouseEvent e) { -
} -
-
publicvoid mouseMoved(MouseEvent anEvent) { -
if(anEvent.getSource() == list) { -
Point location = anEvent.getPoint(); -
newRectangle r = Rectangle(); -
list.computeVisibleRect(r); -
if(r.contains(location)) { -
false);updateListBoxSelectionFo rEvent(anEvent, -
} -
} -
} -
-
protectedvoid updateListBoxSelectionFo booleanrEvent(MouseEvent anEvent, shouldScroll) { -
-
Point location = anEvent.getPoint(); -
if(list null)== { -
return; -
} -
intindex = list.locationToIndex(location); -
if(index 1)== - { -
if(location.y 0)< { -
0;index = -
else} { -
1;index = list.getModel().getSize() - -
} -
} -
if(list.getSelectedIndex() != index) { -
list.setSelectedIndex(index); -
if(shouldScroll) { -
list.ensureIndexIsVisible(index); -
} -
} -
} -
-
publicvoid mouseDragged(MouseEvent e) { -
} - }
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Enumeration;
import javax.swing.BorderFactory;
import javax.swing.DefaultListModel;
import javax.swing.JList;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.event.MouseInputListener;
public class ListPopup extends JPopupMenu implements MouseInputListener {
private JList list;
private JScrollPane pane;
private ArrayList listeners=new ArrayList();
public void addListSelectionListener(ListSelectionListener l){
if(!listeners.contains(l))
listeners.add(l);
}
public void setSelectedIndex(int index){
if(index>=list.getModel().getSize())
index=0;
if(index<0)
index=list.getModel().getSize()-1;
list.ensureIndexIsVisible(index);
list.setSelectedIndex(index);
}
public Object getSelectedValue(){
return list.getSelectedValue();
}
public int getSelectedIndex(){
return list.getSelectedIndex();
}
public boolean isSelected(){
return list.getSelectedIndex()!=-1;
}
public void setLastOneSelected(){
int count=list.getModel().getSize();
if(count>0){
list.ensureIndexIsVisible(count-1);
list.setSelectedIndex(count-1);
}
}
public void removeListSelectionListener(ListSelectionListener l){
if(listeners.contains(l))
listeners.remove(l);
}
private void fireValueChanged(ListSelectionEvent e){
for(ListSelectionListener l:listeners){
l.valueChanged(e);
}
}
public ListPopup() {
setLayout(new BorderLayout());
list = new JList();
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list.addMouseListener(this);
list.addMouseMotionListener(this);
list.setModel(new DefaultListModel());
pane = new JScrollPane(list);
pane.setBorder(null);
add(pane, BorderLayout.CENTER);
}
public int getItemCount() {
DefaultListModel model = (DefaultListModel) list.getModel();
return model.getSize();
}
public Object getItem(int index) {
DefaultListModel model = (DefaultListModel) list.getModel();
return model.get(index);
}
public void addItem(Object o) {
DefaultListModel model = (DefaultListModel) list.getModel();
model.addElement(o);
list.repaint();
}
public void removeItem(Object o) {
DefaultListModel model = (DefaultListModel) list.getModel();
model.removeElement(o);
list.repaint();
}
public void setList(Iterable iterable) {
DefaultListModel model = new DefaultListModel();
for (Object o : iterable) {
model.addElement(o);
}
list.setModel(model);
list.repaint();
}
public void setList(Enumeration e) {
DefaultListModel model = new DefaultListModel();
while (e.hasMoreElements()) {
model.addElement(e.nextElement());
}
list.setModel(model);
list.repaint();
}
public void setList(Object... objects) {
DefaultListModel model = new DefaultListModel();
for (Object o : objects) {
model.addElement(o);
}
list.setModel(model);
list.repaint();
}
public void mouseClicked(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
if(list.getSelectedIndex()!=-1)
fireValueChanged(new ListSelectionEvent(list, list.getSelectedIndex(), list.getSelectedIndex(), true));
}
public void mouseReleased(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void mouseMoved(MouseEvent anEvent) {
if (anEvent.getSource() == list) {
Point location = anEvent.getPoint();
Rectangle r = new Rectangle();
list.computeVisibleRect(r);
if (r.contains(location)) {
updateListBoxSelectionForEvent(anEvent, false);
}
}
}
protected void updateListBoxSelectionForEvent(MouseEvent anEvent, boolean shouldScroll) {
Point location = anEvent.getPoint();
if (list == null) {
return;
}
int index = list.locationToIndex(location);
if (index == -1) {
if (location.y < 0) {
index = 0;
} else {
index = list.getModel().getSize() - 1;
}
}
if (list.getSelectedIndex() != index) {
list.setSelectedIndex(index);
if (shouldScroll) {
list.ensureIndexIsVisible(index);
}
}
}
public void mouseDragged(MouseEvent e) {
}
}
2.AutoCompletionField类:
- import
java.awt.event.ActionEvent; - import
java.awt.event.ActionListener; - import
java.awt.event.KeyEvent; - import
java.awt.event.KeyListener; - import
java.awt.event.MouseEvent; - import
java.awt.event.MouseListener; - import
java.util.ArrayList; - import
javax.swing.JList; - import
javax.swing.JTextField; - import
javax.swing.event.DocumentEvent; - import
javax.swing.event.DocumentListener; - import
javax.swing.event.ListSelectionEvent; - import
javax.swing.event.ListSelectionListener; -
- public
class AutoCompletionField extendsJTextField implementsDocumentListener, MouseListener, ListSelectionListener, ActionListener, KeyListener { -
-
privatestatic int DEFAULT_PREFERRED_HEIGHT 100;= -
privateListPopup popup; -
privateint preferredHeight = DEFAULT_PREFERRED_HEIGHT; -
privateCompletionFilter filter; -
-
publicvoid setFilter(CompletionFilter f) { -
filter = f; -
} -
-
publicAutoCompletionField() { -
newpopup = ListPopup(); -
this);getDocument().addDocumentListener( -
this);addMouseListener( -
this);popup.addListSelectionListener ( -
this);addActionListener( -
this);addKeyListener( -
} -
-
publicvoid setPopupPreferredHeight( inth) { -
preferredHeight = h; -
} -
-
privateboolean isListChange(ArrayList array) { -
if(array.size() != popup.getItemCount()) { -
returntrue; -
} -
for( inti 0;= i < array.size(); i++) { -
if(!array.get(i).equals(popup.getItem(i))) { -
returntrue; -
} -
} -
returnfalse; -
} -
-
privatevoid textChanged() { -
if( "".equals(this.getText())) -
false);popup.setVisible( -
else{ -
if(!popup.isVisible()) { -
showPopup(); -
requestFocus(); -
} -
if(filter null)!= { -
ArrayList array = filter.filter(getText()); -
changeList(array); -
} -
-
} -
-
} -
-
privatevoid showPopup() { -
popup.setPopupSize(getWidth(), preferredHeight); -
this,popup.show( 0, getHeight()- 1); -
} -
-
privatevoid changeList(ArrayList array) { -
if(array.size() 0)== { -
if(popup.isVisible()) { -
false);popup.setVisible( -
} -
else} { -
if(!popup.isVisible()) { -
showPopup(); -
} -
} -
if(isListChange(array)&&array.size()!= 0){ -
popup.setList(array); -
} -
} -
-
publicvoid insertUpdate(DocumentEvent e) { -
textChanged(); -
} -
-
publicvoid removeUpdate(DocumentEvent e) { -
textChanged(); -
} -
-
publicvoid changedUpdate(DocumentEvent e) { -
textChanged(); -
} -
-
publicvoid mouseClicked(MouseEvent e) { -
if(e.getClickCount()>1&& !popup.isVisible()) -
textChanged(); -
} -
-
publicvoid mousePressed(MouseEvent e) { -
} -
-
publicvoid mouseReleased(MouseEvent e) { -
} -
-
publicvoid mouseEntered(MouseEvent e) { -
} -
-
publicvoid mouseExited(MouseEvent e) { -
} -
-
publicvoid valueChanged(ListSelectionEvent e) { -
JList list=(JList)e.getSource(); -
String text=list.getSelectedValue().toString(); -
setText(text); -
false);popup.setVisible( -
} -
-
publicvoid actionPerformed(ActionEvent e) { -
if(popup.isVisible()){ -
Object o=popup.getSelectedValue(); -
if(o!=null) -
setText(o.toString()); -
false);popup.setVisible( -
} -
this.selectAll(); -
this.requestFocus(); -
} -
-
publicvoid keyTyped(KeyEvent e) { -
} -
-
publicvoid keyPressed(KeyEvent e) { -
if(e.getKeyCode()==KeyEvent.VK_DOWN){ -
if(popup.isVisible()){ -
if(!popup.isSelected()) -
0);popup.setSelectedIndex( -
else -
1);popup.setSelectedIndex(popup.getSelectedIndex()+ -
} -
else} if(e.getKeyCode()==KeyEvent.VK_UP){ -
if(popup.isVisible()){ -
if(!popup.isSelected()) -
popup.setLastOneSelected(); -
else -
1);popup.setSelectedIndex(popup.getSelectedIndex()- -
} -
else} if(e.getKeyCode()==KeyEvent.VK_PAGE_DOWN){ -
if(popup.isVisible()){ -
if(!popup.isSelected()) -
0);popup.setSelectedIndex( -
else -
5);popup.setSelectedIndex(popup.getSelectedIndex()+ -
} -
else} if(e.getKeyCode()==KeyEvent.VK_PAGE_UP){ -
if(popup.isVisible()){ -
if(!popup.isSelected()) -
popup.setLastOneSelected(); -
else -
5);popup.setSelectedIndex(popup.getSelectedIndex()- -
} -
} -
} -
-
publicvoid keyReleased(KeyEvent e) { -
} - }
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import javax.swing.JList;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class AutoCompletionField extends JTextField implements DocumentListener, MouseListener, ListSelectionListener, ActionListener, KeyListener {
private static int DEFAULT_PREFERRED_HEIGHT = 100;
private ListPopup popup;
private int preferredHeight = DEFAULT_PREFERRED_HEIGHT;
private CompletionFilter filter;
public void setFilter(CompletionFilter f) {
filter = f;
}
public AutoCompletionField() {
popup = new ListPopup();
getDocument().addDocumentListener(this);
addMouseListener(this);
popup.addListSelectionListener(this);
addActionListener(this);
addKeyListener(this);
}
public void setPopupPreferredHeight(int h) {
preferredHeight = h;
}
private boolean isListChange(ArrayList array) {
if (array.size() != popup.getItemCount()) {
return true;
}
for (int i = 0; i < array.size(); i++) {
if (!array.get(i).equals(popup.getItem(i))) {
return true;
}
}
return false;
}
private void textChanged() {
if ("".equals(this.getText()))
popup.setVisible(false);
else {
if (!popup.isVisible()) {
showPopup();
requestFocus();
}
if (filter != null) {
ArrayList array = filter.filter(getText());
changeList(array);
}
}
}
private void showPopup() {
popup.setPopupSize(getWidth(), preferredHeight);
popup.show(this, 0, getHeight()-1);
}
private void changeList(ArrayList array) {
if (array.size() == 0) {
if (popup.isVisible()) {
popup.setVisible(false);
}
} else {
if (!popup.isVisible()) {
showPopup();
}
}
if (isListChange(array)&&array.size()!=0) {
popup.setList(array);
}
}
public void insertUpdate(DocumentEvent e) {
textChanged();
}
public void removeUpdate(DocumentEvent e) {
textChanged();
}
public void changedUpdate(DocumentEvent e) {
textChanged();
}
public void mouseClicked(MouseEvent e) {
if(e.getClickCount()>1 && !popup.isVisible())
textChanged();
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void valueChanged(ListSelectionEvent e) {
JList list=(JList)e.getSource();
String text=list.getSelectedValue().toString();
setText(text);
popup.setVisible(false);
}
public void actionPerformed(ActionEvent e) {
if(popup.isVisible()){
Object o=popup.getSelectedValue();
if(o!=null)
setText(o.toString());
popup.setVisible(false);
}
this.selectAll();
this.requestFocus();
}
public void keyTyped(KeyEvent e) {
}
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_DOWN){
if(popup.isVisible()){
if(!popup.isSelected())
popup.setSelectedIndex(0);
else
popup.setSelectedIndex(popup.getSelectedIndex()+1);
}
}else if(e.getKeyCode()==KeyEvent.VK_UP){
if(popup.isVisible()){
if(!popup.isSelected())
popup.setLastOneSelected();
else
popup.setSelectedIndex(popup.getSelectedIndex()-1);
}
}else if(e.getKeyCode()==KeyEvent.VK_PAGE_DOWN){
if(popup.isVisible()){
if(!popup.isSelected())
popup.setSelectedIndex(0);
else
popup.setSelectedIndex(popup.getSelectedIndex()+5);
}
}else if(e.getKeyCode()==KeyEvent.VK_PAGE_UP){
if(popup.isVisible()){
if(!popup.isSelected())
popup.setLastOneSelected();
else
popup.setSelectedIndex(popup.getSelectedIndex()-5);
}
}
}
public void keyReleased(KeyEvent e) {
}
}
3.CompletionFilter类:
- import
java.util.ArrayList; -
- public
interface CompletionFilter { -
ArrayList filter(String text); - }
import java.util.ArrayList;
public interface CompletionFilter {
ArrayList filter(String text);
}
4.DefaultCompletionFilter类:
- import
java.util.ArrayList; - import
java.util.Vector; -
- public
class DefaultCompletionFilter implementsCompletionFilter { -
-
privateVector vector; -
-
publicDefaultCompletionFilter() { -
newvector = Vector(); -
} -
-
publicDefaultCompletionFilter(Vector v) { -
vector = v; -
} -
publicArrayList filter(String text) { -
newArrayList list= ArrayList(); -
String txt=text.trim(); -
intlength=txt.length(); -
for(inti= 0;i -
Object o=vector.get(i); -
String str=o.toString(); -
if(length==0||str.startsWith(txt)) //输入内容与记录前端比较 -
list.add(o); -
} -
returnlist; -
} - }
import java.util.ArrayList;
import java.util.Vector;
public class DefaultCompletionFilter implements CompletionFilter {
private Vector vector;
public DefaultCompletionFilter() {
vector = new Vector();
}
public DefaultCompletionFilter(Vector v) {
vector = v;
}
public ArrayList filter(String text) {
ArrayList list=new ArrayList();
String txt=text.trim();
int length=txt.length();
for(int i=0;i
5.使用的控件MyAutoField,使用时指定查询条件和自动提示的字段:
- import
java.awt.im.InputMethodRequests; - import
java.sql.ResultSet; - import
java.sql.SQLException; - import
java.util.Vector; - import
javax.swing.JFrame; - import
javax.swing.JPanel; - import
javax.swing.UIManager; - import
com.borland.jbcl.layout.XYConstraints; - import
com.borland.jbcl.layout.XYLayout; - import
yz.jlsys.connect.connector; -
- public
class MyAutoField extendsAutoCompletionField { -
-
-
publicMyAutoField(String sql,String field) { -
super(); -
newVector tempvector = Vector(); -
newconnector connec = connector(); //数据库操作对象 -
ResultSet rs = connec.getResult(sql); -
try{ -
//若结果集不为空,则显示每条记录 -
booleanisexist false;= -
isexist = rs.first(); -
-
if(isexist) -
{ -
//移动光标到零的位置 -
rs.beforeFirst(); -
while(rs.next()) -
{ -
if(tempvector.contains(rs.getString(field))) -
continue; -
tempvector.add(rs.getString(field)); -
} -
} -
} -
catch(SQLExceptione){ -
-
} -
this.setFilter(newDefaultCompletionFilter(tempvector)); -
} -
-
publicInputMethodRequests getInputMethodRequests() { -
returnnull; -
} -
-
publicstatic void main(String args[]) { -
-
try{ -
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClas sName()); -
catch} (Exception ex) { -
} -
newJFrame j = JFrame(); -
j.setDefaultCloseOperation (JFrame.DISPOSE_ON_CLOSE); -
newJPanel contentPane = JPanel(); -
j.setContentPane(contentPane); -
newcontentPane.setLayout( XYLayout()); -
800,720);j.setSize( -
newj.getContentPane().add( MyAutoField( "select* ,from clienttable where CLIENTNAME like '%'" "CLIENTNAME"), new XYConstraints( 40,95, 200, 25)); -
true);j.setVisible( -
-
} - }
import java.awt.im.InputMethodRequests;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import com.borland.jbcl.layout.XYConstraints;
import com.borland.jbcl.layout.XYLayout;
import yz.jlsys.connect.connector;
public class MyAutoField extends AutoCompletionField {
public MyAutoField(String sql,String field) {
super();
Vector tempvector = new Vector();
connector connec = new connector(); // 数据库操作对象
ResultSet rs = connec.getResult(sql);
try{
//若结果集不为空,则显示每条记录
boolean isexist = false;
isexist = rs.first();
if(isexist)
{
//移动光标到零的位置
rs.beforeFirst();
while(rs.next() )
{
if(tempvector.contains(rs.getString(field)))
continue;
tempvector.add(rs.getString(field));
}
}
}
catch(SQLException e){
}
this.setFilter(new DefaultCompletionFilter(tempvector));
}
public InputMethodRequests getInputMethodRequests() {
return null;
}
public static void main(String args[]) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception ex) {
}
JFrame j = new JFrame();
j.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JPanel contentPane = new JPanel();
j.setContentPane(contentPane);
contentPane.setLayout(new XYLayout());
j.setSize(800,720);
j.getContentPane().add(new MyAutoField("select * from clienttable where CLIENTNAME like '%'", "CLIENTNAME"), new XYConstraints(40, 95, 200, 25));
j.setVisible(true);
}
}

加载中…