Jtextpane单击以在选择上创建弹出菜单效果,而不是按预期方式

时间:2010-11-27 02:56:48

标签: java caret jtextpane popupmenu

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

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

问题是我似乎无法找到 where 我可以放置处理选择更改的代码。我试过了:

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

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

1 个答案:

答案 0 :(得分:0)

  

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

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

请参阅Bringing Up a Popup Menu上的Swing教程中的部分。现在您可以访问MouseEvent,这样您就可以将该点转换为Document中的某个点,以便您知道在选定或未选择的文本上进行点击的位置。