我的目标是在JTextArea"可操作的"中制作anyGivenWord。例如,当您将鼠标悬停在anyGivenWord上时,会出现工具提示,但不会将鼠标悬停在JTextArea中的任何其他单词上。因为你不能直接根据我的知识这样做,所以我考虑将一个组件放在JTextArea中每个anyGivenWord出现的位置,并在JTextArea的大小发生变化时让它重新定位,以便点击看似anyGivenWord实际上是点击组件(导致一些监听器被触发)。为此,我需要知道该单词出现在哪个点(x,y),因此我可以将该组件置于该点。
我以为我可以搜索JTextArea并选择anyGivenWord的实例,然后选择getSelectionStart()和getSelectionEnd(),但我认为这些方法返回的int是所选第一个/最后一个字母的索引,如,它在getText()返回的字符串中的位置。我需要的是x / y坐标。这可能吗?
如果没有......有任何建议可以采用更优雅的方式来做我想做的事情吗?
答案 0 :(得分:0)
您可以将JEditorPane与HTML结合使用,并为任何给定的单词添加超链接。阅读How to Use Editor Panes上Swing教程中的部分,了解基础知识,以便开始使用。
然后,您可以添加HyperlinkListener
以在单击单词时响应事件。请阅读JEditorPane
API,了解使用HyperlinkListener
。
例如,当您将鼠标悬停在anyGivenWord上时,会出现工具提示,
如果您不想使用超链接,则可以通过覆盖getToolTipText(...)
方法来控制工具提示文本。此方法接收MouseEvent,以便您可以获取鼠标位置。然后,您可以使用JTextArea的viewToModel(...)
方法获取鼠标到Document的偏移量。然后查看Utilities
。这个类可以帮助你获得单词的开始/结束偏移,这样你就可以使用getText(...)
方法在当前鼠标位置提取单词。
答案 1 :(得分:0)
您可以使用任何JTextComponent并使用一些方法(如下所示),您可以从文本中收集几个不同的项目,如:
正如@camickr已经如此慷慨地指出,这里的关键是使用 JTextComponent.viewToModel()方法(我相信所有Swing Text组件都包含此方法)以获取与当前鼠标指针在组件中的位置相关的文本索引位置。
以下是一些可以使用的方法:
def filename
File.basename(path)
end