【问题标题】:Suggestive search With Drop down in JavaJava 中的下拉提示搜索
【发布时间】:2018-04-25 16:53:10
【问题描述】:

下拉建议工作正常,但问题是例如:

如果我键入“Outlook”,它会显示(下拉)所有以“Outlook”开头的项目,但不会显示字符串中包含“Outlook”的项目。

我这里用过AutocompleterLibrary,也试过用AutocompleteLibrary 还是一样。

还有其他方法吗?还是需要进行任何更改?

非常感谢任何帮助。

我的代码:

//Below code when key Typed:
TextAutoCompleter complete=new TextAutoCompleter(t1);
complete.removeAllItems(); // Remove all from drowndown list
String temp = t1.getText(); //t1 is the textfield
Connection conn = null;
PreparedStatement pst = null;
ResultSet rs = null;
String value = null;
try{
Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
conn = DriverManager.getConnection("jdbc:ucanaccess://src\\Mydb.accdb");
String sql = "select KB_Title from JD" ;
pst = conn.prepareStatement(sql);
rs =pst.executeQuery();
while (rs.next())
{
    value = rs.getString(1);
    if(value.contains(temp))
        complete.addItem(rs.getString("KB_Title"));
}
catch(ClassNotFoundException | SQLException | HeadlessException e){
    JOptionPane.showMessageDialog(null,e); 
}

【问题讨论】:

  • 你能提供更多关于这些库的细节吗?我看不到他们在这里做什么,因为您自己访问数据库并进行检查。
  • 请使用以下链接了解有关库的更多详细信息:serprogramador.es/autocompletar-java-swing-autocompleter
  • 那是西班牙语...但是阅读此页面会告诉您“模式 - 模式是搜索项目的方式,有 3 种不同的模式,前缀 (-1),中缀 (0),后缀 (1)。默认为 -1。" ...您已经提供了自己的答案。你会说西班牙语吗 ?因为我不;)
  • @AxelH 哈哈,不,我没有,除了这个页面,我对图书馆的了解不多,我使用页面翻译来阅读。 :D
  • @AxelH 更改模式效果很好,谢谢!!

标签: java autocomplete dropdown


【解决方案1】:
complete.setMode(0); // Infix mode, "contains"

而且 SQL 可以更好:

// Not needed nowadays: Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
String sql = "select KB_Title from JD where KB_Title like ?";
try (Connection conn = DriverManager.getConnection("jdbc:ucanaccess://src\\Mydb.accdb");
    PreparedStatement pst = conn.prepareStatement(sql)) {
    pst.setString(1, "%" + temp.trim() + "%");
    try (ResultSet rs = pst.executeQuery()) {
        while (rs.next()) {
            value = rs.getString(1);
            complete.addItem(rs.getString("KB_Title"));
        }
    }
}

也许是order by length(KB_Title), KB_Title

【讨论】:

  • 感谢您的回复,我进行了上述更改,但根据我的理解,它与库相同,它仅显示基于首字母或单词匹配的建议,它不会在字符串中搜索,任何其他解决方法?
  • complete.setMode(0);这是关键。更改模式效果很好,谢谢! :)
【解决方案2】:

有一种方法可以像这样更改 SQL 语句

SELECT * FROM Customers
WHERE City LIKE '%Outlook%';

这个语句只会返回包含outlook的值

【讨论】:

    猜你喜欢
    • 2011-11-08
    • 2018-09-04
    • 2023-03-23
    • 1970-01-01
    • 2017-12-11
    • 2018-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多