java - 通过 Swing 数据库进行实时搜索(或自动完成)

标签 java swing search jdbc autocomplete

我正在尝试进行“google”搜索。用户输入一些内容 - 程序将转到数据库并返回建议列表。我正在使用 AutoComplete 包,但不确定是否以正确的方式,因为我没有得到组合下面的建议列表,所以我可以看到并滚动他,但它会自动从列表中选择一个建议并将其放入场。另外,如果首先用户开始使用字母“I..”进行搜索,自动完成功能会完成这项工作(如上所述),然后如果用户想要输入其他文章的名称,例如“A..”,则组合只会刷新本身带有先前的结果,因此搜索实际上变得不可用。

class SuggestArticleNameActionListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() {
                @Override
                protected Void doInBackground() throws Exception {
                    Vector<String> suggestions = new Vector<>();
                    try {
                        try (Connection conn = DriverManager.getConnection(JDBC_URL, LOGIN, PASSWORD)) {
                            PreparedStatement pstmt = conn.prepareStatement("SELECT name FROM Article WHERE Article.name LIKE ?");
                            String typed = comboBoxSearchArticle.getEditor().getItem().toString();
                                pstmt.setString(1, "%"+typed+"%");
                                ResultSet result = pstmt.executeQuery();
                                while (result.next()) suggestions.add(result.getString("name"));
                                            Collections.sort(suggestions);
                        }
                    } catch (SQLException ex) {
                        ex.printStackTrace();
                    }
                    comboBoxSearchArticle.setModel(new DefaultComboBoxModel<String>(suggestions.toArray(new String[suggestions.size()])));
                    return null;
                }

除了自动完成之外,还有其他问题:我使用的是正确的监听器吗?这段代码是线程安全的吗?如果有更有效的方法,请告诉我。

最佳答案

最好实现ItemListener:

class SuggestArticleNameActionListener implements ItemListener{
    @Override
    public void itemStateChanged(ItemEvent event) {
       if (event.getStateChange() == ItemEvent.SELECTED) {
          Object item = event.getItem();
          // implement your logic here
       }
    }       
}

关于java - 通过 Swing 数据库进行实时搜索(或自动完成),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25709265/

相关文章:

java - 在小程序上显示旋转的风扇

Java MouseListener 在按下鼠标时禁用 MouseMotionListener

java - 查找 JFrame 处于最大化状态时的还原边界

java - 启动 Java Swing 桌面应用程序的正确方法

Android - 在 XML(字符串数组)文件中搜索项目

SQL - 在 A-F 之间查找名称的条件

java - GWT 滚动条未出现

java - Sikuli 抛出异常 org.sikuli.api.robot.desktop.DesktopScreen.getSize

java - 为什么我的 JButton 操作监听器没有响应?

javascript - Odoo 搜索多个名称使用 OR 运算符