我有兴趣在JFrame中提供自动完成框.触发机制将基于助记符(我认为),但我不确定要使用什么用于"自动完成框"(我希望结果在用户按下键时进行过滤).
你会如何实现这个?某种JFrame,还是JPopupMenu?
我想知道这是如何实现的,所以请不要发布链接到可用的[J]组件.
您可能想在SwingLabs上尝试免费的AutoComplete组件.
http://swinglabs.org
编辑:这个网站似乎已经移动了http://java.net/projects/swinglabs
有一个示例如何在以下位置实现此代码:
http://download.java.net/javadesktop/swinglabs/releases/0.8/docs/api/org/jdesktop/swingx/autocomplete/package-summary.html
在
Sun的教程"使用Swing组件"中有一个文本区域自动完成的示例.
它是以文字处理器的方式完成的(没有弹出窗口,但
建议的文本在光标前面输入).
只需向下滚动到"另一个例子:TextAreaDemo"
蚂蚁点击启动按钮!
以下是您请求弹出窗口的示例.您可以在页面底部启动此示例.
这是我的简化示例.遗憾的是,在开始输入之前,您必须先单击文本字段,否则您将获得异常.如果有人能弄明白为什么,请让我知道/更新这个答案.
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class _Autocompleter { private final static JPopupMenu textPopupMenu = new JPopupMenu("MENU") { { add(new JMenuItem("item 1")); add(new JMenuItem("item 2")); setFocusable(false); } }; private final static KeyListener textInputListener = new KeyAdapter() { @Override public void keyTyped(KeyEvent e) { Point p = textInput.getCaret().getMagicCaretPosition(); if (textPopupMenu.isVisible()) { SwingUtilities.convertPointToScreen(p, textInput); textPopupMenu.setLocation(p.x, p.y + 20); } else { textPopupMenu.show(textInput, p.x, p.y + 20); } } }; private final static JTextArea textInput = new JTextArea("type something") { { addKeyListener(textInputListener); setCaretPosition(getText().length()); } }; private final static JFrame f = new JFrame("TEST") { { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); add(textInput); setSize(400, 60); setLocationRelativeTo(null); setVisible(true); } }; public static void main(String[] args) throws Exception { // YES, IT'S EMPTY !!! // It'll start anyway because of static initializers } }