如何在Java中的JTextPane中创建自动完成弹出窗口?

时间:2009-12-16 16:31:14

标签: java autocomplete jtextpane

我正在创建一个SQL编辑器。我正在使用JTextPane作为编辑器。我想为Eclipse等表格等实现AutoCompletion。

5 个答案:

答案 0 :(得分:6)

我认为在另一个组件上显示信息的适当类是JPopupMenu,它已经正确处理分层以显示自身。 JPopupMenu有一个show()方法,它将'parent'组件作为参数,它将在该组件的坐标空间中显示出来。由于您希望显示供用户选择的术语选择,因此菜单似乎是合适的。

要检查文字更改,您需要为DocumentListener包裹的文档添加JTextPane;您可以使用getDocument()访问它。

要找出光标(实际上是插入符号)的位置,可以使用getCaretPosition()。这会将插入符在文本流中的位置返回为int。您可以使用modelToView()将该位置转换为实际(x,y)坐标。这反过来会告诉你在哪里显示你的菜单。

您可以使用addKeyListener()来捕捉JTextPane上的键盘事件,例如点击 Ctrl - Space

所有这一切的组合应该可以让你做你想做的事。

答案 1 :(得分:3)

您也可以使用http://fifesoft.com/autocomplete/。您可以将它安装在任何JTextComponent上。

答案 2 :(得分:2)

对于这样的事情,您可能应该考虑layered panes,以便您的自动完成建议显示在正确的位置和z顺序。

此外,您必须在JTextPane中查找更改,以了解用户何时键入内容,并且您需要一个能够理解键入内容的解析器,以便您只能在适当的位置提供该功能。

目前尚不清楚你的问题究竟是什么以及到目前为止。

答案 3 :(得分:2)

我通过向JTextPane添加一个键侦听器并检查CTRL + Space键击来实现此目的。当检测到相应的键组合时,监听器熄灭并在按键时根据光标左侧的字符查找可能的匹配列表,找到最佳匹配并将其显示给用户JPopup。如果存在完全匹配,那么它只是用匹配替换了部分文本。如果未找到匹配项,则会向用户添加一个选项以添加他们已键入的文本,编辑它并将其记录到可接受数据列表中。

答案 4 :(得分:2)

我们使用jide。他们有很多组件可以帮助你轻松地完成这类工作