0

我有一个 JTextPane 坐在 JFrame 中,弹出菜单通过 JTextPane.setComponentPopupMenu 方法分配给 JTextPane。

我想给 JTextPane 一个“类似单词”的弹出行为。我的意思是,如果您在当前文本选择之外单击鼠标右键,插入符号将重新定位到您右键单击的位置,同时禁用影响文本选择的菜单选项(例如剪切、复制或粗体)。如果您在当前文本选择中右键单击,将出现弹出窗口,其中包含启用文本选择的选项,文本选择将持续存在,并且插入符号不会移动。

问题是我似乎找不到可以将处理选择更改的代码放在哪里。我试过了:

  • 使用在弹出窗口可见之前触发的“PopupMenuWillBecomeVisible”事件。传递给此方法的事件不包含任何鼠标事件信息,因此我无法使用 viewtomodel 找出如何修改选择。我可以使用 MouseInfo 但这似乎充其量是可疑的。
  • 在 JTextPane 或 JFrame 中使用 MousePressed/MouseReleased 事件。显然,当弹出菜单被触发时,这些事件都不会被调用。事实上,我仍然无法确定我的弹出菜单的父组件是什么。(我确实在 Windows 中读到“MouseReleased”是弹出触发器,而在其他系统中“MousePressed”是触发器。我都试过了,但都没有成功)。

所以,我想问题是我似乎无法找到一个地方来放置代码,在弹出菜单变得可见之前将调用它,但是知道触发弹出菜单的 mouseEvent 。我一定在这里遗漏了一些东西。

4

1 回答 1

0

通过 JTextPane.setComponentPopupMenu 方法分配给 JTextPane 的弹出菜单。

您可以使用基于您自己的自定义 MouseListener 显示弹出窗口的旧方法。

请参阅 Swing 教程中有关弹出弹出菜单的部分。现在您可以访问 MouseEvent,以便您可以将该点转换为 Document 中的一个点,以便您知道在选定或未选定文本上单击的位置。

于 2010-11-27T03:02:12.817 回答