我正在创建一个SQL编辑器。我正在使用JTextPane作为编辑器。我想为Eclipse等表格等实现AutoCompletion。
答案 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。他们有很多组件可以帮助你轻松地完成这类工作