package GUI.Util;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JTextField;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.text.BadLocationException;
public class JExpectTextField extends JTextField {
private CaretListener careLis;
private myPopupMenu popupMenu;
private List<Object > model;
private boolean isCaretListener = true;
public JExpectTextField()
{
super(8);
popupMenu = new myPopupMenu();
addCaretListener(new myCaretListener(this));
addKeyListener(new myKeyListener());
}
public JExpectTextField(List<Object> model,int maxShowItemCount) {
super(8);
this.model = model;
popupMenu = new myPopupMenu();
addCaretListener(new myCaretListener(this));
addKeyListener(new myKeyListener());
setMaxShowItem(maxShowItemCount);
}
public void setMaxShowItem(int maxShowItem )
{
popupMenu.setMaxShowItem(maxShowItem);
}
public void setModel(List<Object> model)
{
this.model = model;
}
public void popupList(String key) {
int count = popupMenu.updataPopupMenu(key);
if(count>0)
{
popupMenu.setPopupSize(this.getWidth(), this.getHeight()*count);
popupMenu.show(this, 0,this.getHeight());
}
else
{
popupMenu.setVisible(false);
}
}
public void setTextValue(String str)
{
isCaretListener = false;
this.setText(str);
isCaretListener = true;
}
private void setVisibleFalseAndLostFocus()
{
popupMenu.setVisible(false);
this.transferFocus();
}
private class myPopupMenu extends JPopupMenu{
private JList showList;
private List<Object> listModel;
private int maxShowItem = 8;
public myPopupMenu()
{
super();
listModel = new ArrayList<Object>(maxShowItem);
showList = new JList();
showList.addListSelectionListener(new myShowListSelectListener());
showList.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e){
if (e.getClickCount()==2){
setVisibleFalseAndLostFocus();
}
}
});
this.setLayout(new BorderLayout());
this.add(showList,"Center");
this.setFocusable(false);
}
public void setMaxShowItem(int m)
{
this.maxShowItem = m;
}
public int updataPopupMenu(String key)
{
if(model==null||maxShowItem==0)
{
return 0;
}
int i = 0;
listModel.clear();
for(Object obj: model)
{
if(obj.toString().startsWith(key))
{
listModel.add(obj);
if(++i>=maxShowItem)
{
break;
}
}
}
showList.setListData(listModel.toArray());
return listModel.size();
}
public void setSelectItem(int index)
{
showList.setSelectedIndex(index);
}
public int getItemCount()
{
return listModel.size();
}
public Object getSelectObj()
{
return showList.getSelectedValue();
}
}
private class myCaretListener implements CaretListener {
private JExpectTextField myCB;
int index = 0;
public myCaretListener(JExpectTextField myCB) {
this.myCB = myCB;
}
public void caretUpdate(CaretEvent e) {
if(isCaretListener&&index!=e.getDot())
{
try {
myCB.popupList(myCB.getText(0, e.getDot()));
} catch (BadLocationException e1) {
e1.printStackTrace();
}
index = e.getDot();
}
}
}
private class myKeyListener extends KeyAdapter
{
private int index = -1;
public void keyPressed(KeyEvent e) {
int code = e.getKeyCode();
if(code==KeyEvent.VK_DOWN)
{
popupMenu.setVisible(true);
index++;
if(index>=popupMenu.getItemCount())
{
index=0;
}
popupMenu.setSelectItem(index);
}else if(code == KeyEvent.VK_UP){
index--;
if(index<0)
{
index=popupMenu.getItemCount()-1;
}
popupMenu.setSelectItem(index);
}
else if(code==KeyEvent.VK_ESCAPE)
{
popupMenu.setVisible(false);
}else if(code==KeyEvent.VK_ENTER)
{
setVisibleFalseAndLostFocus();
}
}
}
private class myShowListSelectListener implements ListSelectionListener
{
public void valueChanged(ListSelectionEvent e) {
// System.out.println(showList.getSelectedValue());
Object o = popupMenu.getSelectObj();
if(o!=null)
{
setTextValue(o.toString());
}
}
}
public static void main(String args[]) {
JFrame f = new JFrame("JTextField1");
Container contentPane = f.getContentPane();
contentPane.setLayout(new BorderLayout());
JPanel p1 = new JPanel();
List<Object> value = new ArrayList<Object>();
value.add("aaa");
value.add("adf");
value.add("ad");
value.add("aaca");
value.add("aadfe2aa");
value.add("accccaa");
value.add("aaxxa");
value.add("aaaxdw");
value.add("aazca");
value.add("aa asda");
value.add("abc");
value.add("abcd");
value.add("bbb");
value.add("ccc");
JExpectTextField cb = new JExpectTextField(value,10);
cb.setColumns(8);
p1.add(cb);
Object[] objs = new Object[]{"chenzhili","liue"};
JList list = new JList(objs);
p1.add(list);
contentPane.add(p1);
f.setBounds(100, 100, 200, 300);
f.setVisible(true);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
原创:java封装了的JTextField,可以达到google输入框的效果
共1个文件
java:1个
4星 · 超过85%的资源 需积分: 20 59 下载量 178 浏览量
2009-08-11
22:29:10
上传
评论 1
收藏 2KB RAR 举报
温馨提示
原创:java封装了的JTextField,可以达到google输入框的效果:在输入框中输入一些字符即可联想。
资源推荐
资源详情
资源评论
收起资源包目录
JExpectTextField.rar (1个子文件)
JExpectTextField.java 6KB
共 1 条
- 1
crazywoman
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页