如何组合两个线程以实现自动完成(intelliSense)的目标

时间:2012-06-06 16:56:36

标签: java swing autocomplete awt intellisense

按照我之前的帖子here,亲切的先生。 @bunta建议使用here中的代码 并将其与我的代码一起使用,以使自动完成工作。

问题是我已经在使用线程了。

这是部分代码(它非常大,然后我只发布重要的内容):

private javax.swing.JTextField boxOfCurrentPath;

// more code 

boxOfCurrentPath.setToolTipText("");
boxOfCurrentPath.addActionListener(new java.awt.event.ActionListener() 
{
    public void actionPerformed(java.awt.event.ActionEvent evt) 
        {
            boxOfCurrentPathActionPerformed(evt);
        }
   });

但是当我尝试使用我当前的代码添加另一个线程,上面的自动完成示例时,没有任何反应。代码在没有自动完成的情况下运行:

boxOfCurrentPath.setToolTipText("");

boxOfCurrentPath.addActionListener(new java.awt.event.ActionListener() 
{
    public void actionPerformed(java.awt.event.ActionEvent evt) 
    {
        boxOfCurrentPathActionPerformed(evt);
    }

     class AutoSuggest2 extends JPanel
    {
         private final JTextField tf;
         private final JComboBox combo = new JComboBox();
         private final Vector<String> v = new Vector<String>();


        public AutoSuggest2() 

        {
            super(new BorderLayout());
            combo.setEditable(true);
            tf = (JTextField) combo.getEditor().getEditorComponent();
            tf.addKeyListener(new KeyAdapter() 
            {
              public void keyTyped(KeyEvent e) 
              {
                   EventQueue.invokeLater(new Runnable() {
                public void run() 
                {
                    String text = tf.getText();

                        if(text.length()==0) 

                        {
                        combo.hidePopup();
                        setModel(new DefaultComboBoxModel(v), "");
                        }

                        else
                        {
                            DefaultComboBoxModel m = getSuggestedModel(v, text);
                            if(m.getSize()==0 || hide_flag) 
                            {
                                combo.hidePopup();
                                hide_flag = false;
                            }

                            else
                            {
                                setModel(m, text);
                                combo.showPopup();
                            }

                        } // end else 

                } // end run 
                });

              } // end keyTyped   

              public void keyPressed(KeyEvent e) 
              {
                  String text = tf.getText();
                  int code = e.getKeyCode();
                  if(code==KeyEvent.VK_ENTER) 
                  {
                        if(!v.contains(text)) 
                        {
                            v.addElement(text);
                            Collections.sort(v);
                            setModel(getSuggestedModel(v, text), text);
                        }
                        hide_flag = true; 
                  } 

                  else 
                      if(code==KeyEvent.VK_ESCAPE)
                      {
                          hide_flag = true; 
                      }
                      else 

                          if(code==KeyEvent.VK_RIGHT) 
                          {
                              for(int i=0;i<v.size();i++) 
                              {
                                  String str = v.elementAt(i);
                                  if(str.startsWith(text)) 
                                  {
                                      combo.setSelectedIndex(-1);
                                      tf.setText(str);
                                      return;
                                  }
                              }
                          }
                }  // end keyPressed
          }); // end addKeyListener


        String[] axesTypes = 
            {"child::", "attribute::", "descendant::", "descendant-or-self::", 
             "slef::", "parent::", "following-sibling::", "preceding-sibling::",
             "ancestor-or-self::", "ancestor::", "following::", "preceding::" ,
             "preceding::", "namespace::", "node()"};


            for(int i=0;i<axesTypes.length;i++)
            {
                      v.addElement(axesTypes[i]);
            }
            setModel(new DefaultComboBoxModel(v), "");
            JPanel p = new JPanel(new BorderLayout());
            p.setBorder(BorderFactory.createTitledBorder("AutoSuggestion Box"));
            p.add(combo, BorderLayout.NORTH);
            add(p);
            setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
            setPreferredSize(new Dimension(300, 150));

        } // end AutoSuggest


        private boolean hide_flag = false;

        private DefaultComboBoxModel getSuggestedModel(java.util.List<String> list, String text)
        {
                DefaultComboBoxModel m = new DefaultComboBoxModel();
                for(String s: list) 
                {
                    if(s.startsWith(text)) m.addElement(s);
                }
                return m;
        }


        private void setModel(DefaultComboBoxModel mdl, String str)
        {
         combo.setModel(mdl);
         combo.setSelectedIndex(-1);
         tf.setText(str);
        }



    } // end AutoSuggest2 extends 

});

我显然做错了什么,但似乎无法理解为什么。任何想法?谢谢!

0 个答案:

没有答案