Geo*_*Geo 29 java swing autocomplete
我有兴趣在JFrame中提供自动完成框.触发机制将基于助记符(我认为),但我不确定要使用什么用于"自动完成框"(我希望结果在用户按下键时进行过滤).
你会如何实现这个?某种JFrame,还是JPopupMenu?
我想知道这是如何实现的,所以请不要发布链接到可用的[J]组件.
Gee*_*cko 13
您可能想在SwingLabs上尝试免费的AutoComplete组件.
编辑:这个网站似乎已经移动了http://java.net/projects/swinglabs
有一个示例如何在以下位置实现此代码:
iva*_*off 10
在
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
}
}
Run Code Online (Sandbox Code Playgroud)