`
雪馨25
  • 浏览: 128427 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

【java】JTextField与JComboBox结合动态匹配输入信息

阅读更多

一、实现效果

二、代码

 

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<String> items = new ArrayList<String>();
         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<String> 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);
     }
 }


 

分享到:
评论

相关推荐

    JTextField添加“自动完成”

    总结来说,实现`JTextField`的自动完成功能,主要依赖于`JComboBox`的下拉列表特性,通过组合和监听机制,可以在用户输入时动态展示匹配的建议,从而提升用户的输入效率和应用的用户体验。这种设计思路展示了在Java ...

    JAVA学生管理信息系统

    JAVA学生管理信息系统结合了Java语言的强大功能、Eclipse的开发便利性以及MySQL数据库的可靠性,构建了一个集学生信息管理、成绩查询、权限控制于一体的综合平台。通过对用户登录、数据查询、界面布局等关键功能的...

    javaGUI Swing组件开发求职管理系统

    - 搜索功能:JTextField输入关键词,搜索匹配的职位或求职者。 - 数据展示:JTable显示职位列表或求职者列表,支持排序和过滤功能。 此外,系统还可能涉及到数据库操作,如使用JDBC(Java Database Connectivity)...

    java中 Swing与IO的综合应用

    1. **数据录入**:使用JTextField和JComboBox等组件收集用户输入的学生信息,然后通过FileWriter或ObjectOutputStream将数据写入文件。 2. **数据查询**:允许用户输入搜索条件,通过BufferedReader读取文件,筛选...

    java文本框自动提示

    在Java编程中,文本框(JTextField)是用户界面中常用的一个组件,它允许用户输入单行文本。在设计交互式应用时,我们经常需要实现一个功能,即当用户在文本框中输入时,系统能根据输入内容自动给出提示或建议,这...

    大学生Swing窗体设计房产管理系统,实现获搜索与添加功能,运用下拉框与单选框

    - **搜索功能**: 可以通过JTextField让用户输入关键词,结合JComboBox提供筛选条件,如按价格、面积等。按下“搜索”按钮后,系统将查询数据库并显示匹配结果。 - **下拉框(JComboBox)应用**:下拉框通常用于提供...

    Java超市管理系统(Swing)

    例如,注册界面可以通过JOptionPane对话框进行用户信息输入验证,而登录功能则需要处理事件监听,确保用户输入的凭证与数据库中的数据匹配。 二、商品管理 商品管理是超市运营的核心,包括商品的添加、删除、修改和...

    Java课程设计-Java swing的教材管理系统.zip

    在教材查询方面,我们可以使用JTextField配合 JButton实现关键词搜索功能,用户输入教材名称或作者后,点击搜索按钮,系统将根据输入内容查找并显示匹配的教材信息。为了展示搜索结果,可以使用JTable组件,将查询到...

    java文字预测

    对于初学者来说,理解JTextField、KeyListener或ActionListener接口以及如何将它们结合起来实现输入监听是学习GUI编程的重要步骤。 当用户输入发生变化时,我们需要遍历字典库,找到所有以当前输入开头的单词。这...

    java仿goolge文本框查询

    在Java编程中,仿Google文本框查询涉及到的关键技术主要包括用户界面设计、事件监听...通过学习并理解这个示例,开发者不仅可以掌握基本的GUI设计,还能了解到如何将用户输入与后台处理相结合,提供实时的交互体验。

    java实现学生管理系统

    使用JTable显示学生列表,JTextField和JComboBox接收用户输入,JButton触发相应操作。 四、代码组织与结构 良好的代码组织和设计模式的应用有助于项目的可维护性和扩展性。可以采用MVC(Model-View-Controller)...

    图书管理Java程序案例Swing窗口实现

    在后台,我们需要编写一个登录验证函数,比较用户输入与预设值是否匹配。 图书数据通常存储在数据库中,如MySQL或SQLite。这里涉及数据库连接和SQL操作。使用JDBC(Java Database Connectivity)API,我们可以建立...

    JavaSwing小程序

    在Swing中,可以使用JComboBox或者JTextField结合监听器来实现搜索功能。用户在文本框中输入关键词,程序通过监听键盘事件获取输入,并在后台遍历数据源进行匹配,然后更新显示结果。 对于Java初学者来说,Java ...

    Java Swing开发的学生信息

    在Swing中,我们通常会用到JFrame作为主窗口,JPanel作为容器来组织其他组件,JButton用于用户交互,JLabel显示文本或图标,JTable用于展示和操作数据,JComboBox和JTextField则用来输入和选择信息。此外,我们还会...

    java swing管理系统源码 程序 代码 图形界面(11套).zip

    例如,使用JTable展示数据库查询结果,JButton触发业务逻辑,JComboBox提供选择项,JTextField和JTextArea用于输入和展示文本。每个系统可能包含不同的功能模块,如用户管理、权限控制、报表生成等,源码示例可以...

    航空订票系统(java 图形界面事件驱动)

    例如,当用户点击“查询”按钮时,会触发事件处理函数,该函数将用户输入的查询参数与数据库进行匹配,返回航班信息并显示在界面上。 此外,为了实现业务逻辑,如预订座位和支付,需要与数据库进行交互。这通常通过...

    学生信息管理系统

    在学生信息管理系统中,Swing提供了丰富的组件,如JTable用于展示学生列表,JTextField和JComboBox用于输入和选择数据,JButton用于触发操作等。开发者可以通过布局管理器灵活地组织这些组件,构建出符合需求的界面...

    java_GUI界面

    3. **组件(Components)**:GUI由各种组件组成,如JButton(按钮)、JLabel(标签)、JTextField(文本字段)、JTextArea(文本区域)、JComboBox(组合框)和JCheckBox(复选框)等。开发者可以通过设置属性和监听...

    使用java的gui做一个登录 注册 条件查询的小作业

    这个程序可以帮助我们理解和实践如何将用户交互与后端数据处理相结合,为用户提供友好的界面。 首先,我们需要了解Java GUI的基础,这主要涉及Java Swing或JavaFX库。在这个案例中,Swing可能被用作构建GUI的主要...

    javaGUI编程例子

    例如,`^\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$` 是一个常见的邮箱验证正则表达式,可以在用户输入时调用`Pattern`和`Matcher`类进行匹配。 3. **用户信息增删改查**:这部分涉及到数据库操作。...

Global site tag (gtag.js) - Google Analytics