3

我正在创建一个 SQL 编辑器。我正在使用 JTextPane 作为编辑器。我想为表名等实现自动完成,比如 Eclipse。

4

5 回答 5

6

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

要检查文本更改,您需要将 ; 添加到由;DocumentListener包裹的文档中。JTextPane您可以使用getDocument().

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

你可以addKeyListener()用来捕捉你的键盘事件JTextPane,比如点击Ctrl- Space

所有这些的结合应该可以让你做你想做的事情。

于 2009-12-16T18:52:04.427 回答
3

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

于 2010-09-21T19:01:49.123 回答
2

我通过向 JTextPane 添加键侦听器并检查 CTRL + Space 击键来实现这一点。当检测到适当的组合键时,侦听器关闭并根据按键时光标左侧的字符查找可能匹配的列表,并找到最佳匹配并将它们显示给用户弹出窗口。如果有完全匹配,那么它只是用匹配替换部分文本。如果未找到匹配项,则会向用户提供一个选项,以添加他们已经键入的文本,对其进行编辑并将其记录到可接受的数据列表中。

于 2009-12-16T18:59:56.520 回答
2

对于这样的事情,您可能应该考虑分层窗格,以便您的自动完成建议出现在正确的位置和 z 顺序中。

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

目前还不太清楚你的问题到底是什么以及到目前为止你得到了什么。

于 2009-12-16T16:36:26.780 回答
2

我们使用jide。他们有很多组件可以帮助您非常轻松地完成此类事情

于 2012-12-05T15:11:36.577 回答