一、实现效果

二、代码

Java代码  

importjava.awt.*;

importjava.awt.event.*;

importjava.util.*;

importjavax.swing.*;

importjavax.swing.event.*;

publicclassTest {

publicstaticvoidmain(String[] args)throwsException {

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

JFrame frame =newJFrame();

frame.setTitle("Auto Completion Test");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setBounds(200,200,500,400);

ArrayList items =newArrayList();

Locale[] locales = Locale.getAvailableLocales();

for(inti =0; i

String item = locales[i].getDisplayName();

System.out.println(item);

items.add(item);

}

JTextField txtInput =newJTextField();

setupAutoComplete(txtInput, items);

txtInput.setColumns(30);

frame.getContentPane().setLayout(newFlowLayout());

frame.getContentPane().add(txtInput, BorderLayout.NORTH);

frame.setVisible(true);

}

privatestaticbooleanisAdjusting(JComboBox cbInput) {

if(cbInput.getClientProperty("is_adjusting")instanceofBoolean) {

return(Boolean) cbInput.getClientProperty("is_adjusting");

}

returnfalse;

}

privatestaticvoidsetAdjusting(JComboBox cbInput,booleanadjusting) {

cbInput.putClientProperty("is_adjusting", adjusting);

}

publicstaticvoidsetupAutoComplete(finalJTextField txtInput,finalArrayList items) {

finalDefaultComboBoxModel model =newDefaultComboBoxModel();

finalJComboBox cbInput =newJComboBox(model) {

publicDimension getPreferredSize() {

returnnewDimension(super.getPreferredSize().width,0);

}

};

setAdjusting(cbInput,false);

for(String item : items) {

model.addElement(item);

}

cbInput.setSelectedItem(null);

cbInput.addActionListener(newActionListener() {

@Override

publicvoidactionPerformed(ActionEvent e) {

if(!isAdjusting(cbInput)) {

if(cbInput.getSelectedItem() !=null) {

txtInput.setText(cbInput.getSelectedItem().toString());

}

}

}

});

txtInput.addKeyListener(newKeyAdapter() {

@Override

publicvoidkeyPressed(KeyEvent e) {

setAdjusting(cbInput,true);

if(e.getKeyCode() == KeyEvent.VK_SPACE) {

if(cbInput.isPopupVisible()) {

e.setKeyCode(KeyEvent.VK_ENTER);

}

}

if(e.getKeyCode() == KeyEvent.VK_ENTER || e.getKeyCode() == KeyEvent.VK_UP || e.getKeyCode() == KeyEvent.VK_DOWN) {

e.setSource(cbInput);

cbInput.dispatchEvent(e);

if(e.getKeyCode() == KeyEvent.VK_ENTER) {

txtInput.setText(cbInput.getSelectedItem().toString());

cbInput.setPopupVisible(false);

}

}

if(e.getKeyCode() == KeyEvent.VK_ESCAPE) {

cbInput.setPopupVisible(false);

}

setAdjusting(cbInput,false);

}

});

txtInput.getDocument().addDocumentListener(newDocumentListener() {

publicvoidinsertUpdate(DocumentEvent e) {

updateList();

}

publicvoidremoveUpdate(DocumentEvent e) {

updateList();

}

publicvoidchangedUpdate(DocumentEvent e) {

updateList();

}

privatevoidupdateList() {

setAdjusting(cbInput,true);

model.removeAllElements();

String input = txtInput.getText();

if(!input.isEmpty()) {

for(String item : items) {

if(item.toLowerCase().startsWith(input.toLowerCase())) {

model.addElement(item);

}

}

}

cbInput.setPopupVisible(model.getSize() >0);

setAdjusting(cbInput,false);

}

});

txtInput.setLayout(newBorderLayout());

txtInput.add(cbInput, BorderLayout.SOUTH);

}

}

import java.awt.*;

import java.awt.event.*;

import java.util.*;

import javax.swing.*;

import javax.swing.event.*;

public class Test {

public static void main(String[] args) throws Exception {

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

JFrame frame = new JFrame();

frame.setTitle("Auto Completion Test");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setBounds(200, 200, 500, 400);

ArrayList items = new ArrayList();

Locale[] locales = Locale.getAvailableLocales();

for (int i = 0; i < locales.length; i++) {

String item = locales[i].getDisplayName();

System.out.println(item);

items.add(item);

}

JTextField txtInput = new JTextField();

setupAutoComplete(txtInput, items);

txtInput.setColumns(30);

frame.getContentPane().setLayout(new FlowLayout());

frame.getContentPane().add(txtInput, BorderLayout.NORTH);

frame.setVisible(true);

}

private static boolean isAdjusting(JComboBox cbInput) {

if (cbInput.getClientProperty("is_adjusting") instanceof Boolean) {

return (Boolean) cbInput.getClientProperty("is_adjusting");

}

return false;

}

private static void setAdjusting(JComboBox cbInput, boolean adjusting) {

cbInput.putClientProperty("is_adjusting", adjusting);

}

public static void setupAutoComplete(final JTextField txtInput, final ArrayList items) {

final DefaultComboBoxModel model = new DefaultComboBoxModel();

final JComboBox cbInput = new JComboBox(model) {

public Dimension getPreferredSize() {

return new Dimension(super.getPreferredSize().width, 0);

}

};

setAdjusting(cbInput, false);

for (String item : items) {

model.addElement(item);

}

cbInput.setSelectedItem(null);

cbInput.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

if (!isAdjusting(cbInput)) {

if (cbInput.getSelectedItem() != null) {

txtInput.setText(cbInput.getSelectedItem().toString());

}

}

}

});

txtInput.addKeyListener(new KeyAdapter() {

@Override

public void keyPressed(KeyEvent e) {

setAdjusting(cbInput, true);

if (e.getKeyCode() == KeyEvent.VK_SPACE) {

if (cbInput.isPopupVisible()) {

e.setKeyCode(KeyEvent.VK_ENTER);

}

}

if (e.getKeyCode() == KeyEvent.VK_ENTER || e.getKeyCode() == KeyEvent.VK_UP || e.getKeyCode() == KeyEvent.VK_DOWN) {

e.setSource(cbInput);

cbInput.dispatchEvent(e);

if (e.getKeyCode() == KeyEvent.VK_ENTER) {

txtInput.setText(cbInput.getSelectedItem().toString());

cbInput.setPopupVisible(false);

}

}

if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {

cbInput.setPopupVisible(false);

}

setAdjusting(cbInput, false);

}

});

txtInput.getDocument().addDocumentListener(new DocumentListener() {

public void insertUpdate(DocumentEvent e) {

updateList();

}

public void removeUpdate(DocumentEvent e) {

updateList();

}

public void changedUpdate(DocumentEvent e) {

updateList();

}

private void updateList() {

setAdjusting(cbInput, true);

model.removeAllElements();

String input = txtInput.getText();

if (!input.isEmpty()) {

for (String item : items) {

if (item.toLowerCase().startsWith(input.toLowerCase())) {

model.addElement(item);

}

}

}

cbInput.setPopupVisible(model.getSize() > 0);

setAdjusting(cbInput, false);

}

});

txtInput.setLayout(new BorderLayout());

txtInput.add(cbInput, BorderLayout.SOUTH);

}

}

java jtextfield 输入_【java】JTextField与JComboBox结合动态匹配输入信息相关推荐

  1. java获取JTextfield值_[求助]JTextfield 取值问题!

    [求助]JTextfield 取值问题! 我用K取JTextfield中的值 可怎么就是得不到在JTextfield输入的值 K始终=0 (原来JTextfield的初值)请教各位 代码下面 大部分是 ...

  2. java取负数_[Java] 告别“CV 工程师”码出高效!(基础篇)

    作为一名资深的 CV 工程师,某天,当我再一次日常看见满屏的报错信息与键盘上已经磨的泛白的 Ctrl.C.V 这三个按键时,我顿悟了. 百度谷歌复制粘贴虽然很香,但是总是依靠前人种树,终会有一天失去乘 ...

  3. java控制语句练习题_[Java初探实例篇02]__流程控制语句知识相关的实例练习

    本例就流程控制语句的应用方面,通过三个练习题来深入学习和巩固下学习的流程控制语句方面的知识,设计到,if条件判断语句,switch多分支语句,for循环语句及其嵌套多层使用,while循环语句. 练习 ...

  4. java小朋友猜拳_[Java教程]Java猜拳小游戏(剪刀、石头、布)

    [Java教程]Java猜拳小游戏(剪刀.石头.布) 0 2015-09-29 08:00:04 import java.util.Random;import java.util.Scanner;pu ...

  5. java 文本压缩_[Java基础]Java使用GZIP进行文本压缩

    import java.io.IOException; import java.util.zip.GZIPOutputStream; import org.apache.commons.io.outp ...

  6. java private 对象_[Java笔记]类的所有构造器都是private权限,就一定没有办法实例化它的对象了么?...

    笔者以前学过C++语言.众所周知,C++也是一门面向对象程序设计语言.还记得当时在大学的时候,老师讲过这样的话:类的构造函数不应该设置成private权限,这样的话还怎么去实例化类的对象?当时也信以为 ...

  7. java resources 目录_[Java] 在 jar 文件中读取 resources 目录下的文件

    注意两点: 1. 将资源目录添加到 build path,确保该目录下的文件被拷贝到 jar 文件中. 2. jar 内部的东西,可以当作 stream 来读取,但不应该当作 file 来读取. 例子 ...

  8. vs可以调用java接口吗_关于vs2010下编译dll动态库,JNA接口在java中调用的问题

    最近在搞关于把vs2010中的project,使之能够在Java下面运行,有一个调用本地接口的问题,JNI那个涉及到复杂细节太多,就使用了最新的JNA(java native access) 网上也给 ...

  9. java斗地主发牌_[Java源码]扑克牌——斗地主发牌实现

    --------------------------------------- --------------------------------------- ----------一个扑克牌核心和简单 ...

最新文章

  1. TinyOS下TOSSIM仿真
  2. 我该如何学习spring源码以及解析bean定义的注册
  3. leetcode 搜索插入位置
  4. 亿级 Web 系统的容错性建设实践
  5. 成功解决from scipy.linalg import _fblas ImportError: DLL load failed: 找不到指定的模块。
  6. DeepMind论文解读:让机器更深入地理解文本
  7. 【struts2】struts2中对象的获取
  8. make and make bzImage
  9. 涨姿势,一个通信项目从开始到结束,原来还包括这些工作
  10. 由于已明确禁止所请求的页类型,无法对该类型的页提供服务。扩展名“.asp”可能不正确 asp网页在vs中的调试
  11. Oracle 递归查询 (start with ...connect by ...prior)
  12. host地址切换工具-SwitchHosts
  13. 使用SVN将项目从服务器下载到本地
  14. 【AI应用】海康威视iVMS-4200软件安装
  15. 最好用的五个黑科技搜索引擎推荐
  16. grep匹配单引号('),惰性匹配(.*?)
  17. 云存储——fileserve
  18. 百度搜索引擎结果网址参数 搜索框提示词搜索方式(rsv_sug2)
  19. 「建议观看」史上超长,前端css晦涩难懂的点都在这啦
  20. matlab烟花动图程序,用PS制作漂亮烟花绽放效果的GIF图片

热门文章

  1. 海量数据中找top K专题
  2. 8 函数类型——《Swift3.0从入门到出家
  3. javascript中的'this'
  4. j2ee不同数据库的驱动和URL写法
  5. 整理 被appstore 拒绝审核通过的原因
  6. SQLServer扩展存储过程
  7. Windows下能PING通网关不能打开网页解决方法
  8. win10 1909更新后无法上网三种解决方法
  9. CentOS下ELK收集Nginx日志
  10. windows server 查看当前登陆的用户 query user