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

Java 如何组合两个线程以实现自动完成(intelliSense),java,swing,autocomplete,awt,intellisense,Java,Swing,Autocomplete,Awt,Intellisense,在我之前的帖子之后,@bunta先生建议使用 并与我的代码一起使用,以使自动完成工作 问题是我已经在使用线程了 下面是部分代码,它相当大,然后我只发布重要的内容: private javax.swing.JTextField boxOfCurrentPath; // more code boxOfCurrentPath.setToolTipText(""); boxOfCurrentPath.addActionListener(new java.awt.event.ActionListen

在我之前的帖子之后,@bunta先生建议使用 并与我的代码一起使用,以使自动完成工作

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

下面是部分代码,它相当大,然后我只发布重要的内容:

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 

});

我显然做错了什么,但似乎不明白为什么。有什么想法吗?谢谢

您可能希望首先进行一些调试,以尝试隔离问题的来源。那么你就可以发布更多合理数量的相关代码了。@HovercraftFullOfEels:相信我,问题不在于示例代码,而在于我的代码。调试没有多大帮助,但我会再试一次。好吧,如果你很快得到一个好的答案,那就不用麻烦了,但我在这里的经验表明,我们在帮助解决孤立的问题方面做得更好,而在解决你还不清楚问题是什么的问题方面做得更好。没有人可以编译或运行您发布的代码,也没有人有时间检查您的整个程序,所以不幸的是,您和我们都陷入了困境。顺便说一下,您可能不想使用KeyListener,而是DocumentFilter。您所说的“另一个线程”是什么?我在你发布的代码中没有看到它,它基本上是RoseIndia网站的副本,我尽量避免使用它。