Jpanel的搜索框

时间:2015-05-22 12:55:49

标签: java eclipse swing jpanel windowbuilder

我正在创建一个应用程序,允许用户申请职位并上传他们的简历。我目前正试图为管理员创建一个搜索框,以便能够搜索关键字。应用程序将查看所有CV,如果找到这样的关键字,它将显示包含关键字的Cv列表。我对Gui设计和应用程序创建相当新,所以不确定如何去做。我希望通过java完成它并使用Eclipse Window构建器来帮助我设计它。任何帮助将不胜感激,提示,建议任何事情。谢谢。

2 个答案:

答案 0 :(得分:0)

嗯,这种不正确的设计方法,因为在给定文件夹的所有文件中对单词进行实时搜索将是缓慢的,并且从长远来看是不可持续的。理想情况下,您应该为关键字编制所有CV的索引。搜索应该在索引上运行,然后获取该索引的关联CV(考虑类似于标记的索引)。索引有很多选项 - 简单数据库索引或使用Apache Lucene,或者按照这些步骤使用Maps创建索引并引用此索引进行搜索。

  • 创建地图Map<String, List<File>>以保持关联    关键字到文件

  • 遍历所有文件,并对每个单词进行迭代    每个文件,将该文件添加到与该单词对应的列表中    你的索引图

这里有适合您的java代码,但我仍然建议您更改设计方法并使用索引。

File dir = new File("Folder for CV's"); 
if(dir.exists()) 
{ 
  Pattern p = Pattern.compile("Java"); 
  ArrayList<String> list = new ArrayList<String>(); // list of CV's

  for(File f : dir.listFiles())
  {
    if(!f.isFile()) continue;
    try
    {
      FileInputStream fis = new FileInputStream(f);
      byte[] data = new byte[fis.available()];
      fis.read(data);
      String text = new String(data);
      Matcher m = p.matcher(text);
      if(m.find())
      {
        list.add(f.getName()); // add file to found-keyword list.
      }
      fis.close();
    } 
    catch(Exception e)
    {
      System.out.print("\n\t Error processing file : "+f.getName());
    }

  }
  System.out.print("\n\t List : "+list); // list of files containing keyword.
} // IF directory exists then only process.
else
{
  System.out.print("\n Directory doesn't exist.");
}

在这里,您将获得要立即显示的文件列表&#34; Java&#34;。正如我所说的使用索引:)

答案 1 :(得分:0)

感谢您抽出宝贵时间来研究我的问题。 我实际上想出了一个自己的解决方案。它可能非常业余,但它适用于我。

    JButton btnSearch = new JButton("Search");
    btnSearch.addActionListener(new ActionListener() 
    {
        public void actionPerformed(ActionEvent arg0) 
        {
            list.clear();
            String s  = SearchBox.getText();
            int i = 0,present = 0;
            int id;
            try
            {
                Class.forName(driver).newInstance();
                Connection conn = DriverManager.getConnection(url+dbName,userName,password);
                Statement st = conn.createStatement();
                ResultSet res = st.executeQuery("SELECT * FROM javaapp.test");
                while(res.next())
                {
                    i = 0;
                    present = 0;
                    while(i < 9)
                    {
                        String out = res.getString(search[i]);
                        if(out.toLowerCase().contains(s.toLowerCase()))
                        {
                            present = 1;
                            break;
                        }
                        i++;
                    }
                    if(tglbtnNormalshortlist.isSelected())
                    {
                        if(present == 1 && res.getInt("Shortlist") == 1)
                        {
                            id = res.getInt("Candidate");
                            String print = res.getString("Name");
                            list.addElement(print+" "+id);
                        }
                    }
                    else
                    {
                        if(present == 1 && res.getInt("Shortlist") == 0)
                        {
                            id = res.getInt("Candidate");
                            String print = res.getString("Name");
                            list.addElement(print+" "+id);
                        }
                    }
                }
            }
            catch (Exception e) 
            {
                e.printStackTrace();
            }
        }
    });