public void actionPerformed(ActionEvent e) { JTextField tf = getTextField(); final String text = tf.getText(); final int caretIndex = tf.getCaretPosition(); String pre = text.substring(0, caretIndex); java.util.List<TreeNode> nodes = null; // m_root.search(pre); // Collections.sort(nodes); if (nodes.isEmpty()) { return; } JPopupMenu jp = new JPopupMenu("options"); JMenuItem lastItem = null; for (TreeNode node : nodes) { String nodeName = node.toString(); String insertion = nodeName.substring(leaf(pre, ".").length()); lastItem = createInsertAction(nodeName, caretIndex, insertion); jp.add(lastItem); } if (nodes.size() == 0) { return; } if (nodes.size() == 1) { lastItem.getAction().actionPerformed(null); } else { Point pos = tf.getCaret().getMagicCaretPosition(); pos = pos != null ? pos : new Point(2, 2); jp.show(tf, pos.x, pos.y); } }