【问题标题】:jPopupMenu at the position of Hyperlink in Java SwingJava Swing中超链接位置的jPopupMenu
【发布时间】:2014-07-08 05:22:01
【问题描述】:

我正在 Swing 中实现一个编辑器。它显示带有超链接的纯文本。问题陈述是,当用户单击超链接时,弹出菜单必须出现在鼠标位置或超链接文本下方。用户可以从菜单中选择选项,超链接的文本将更新为用户选择的选项中的文本。此外,选择该选项后,菜单消失。

我正在 jTextPane 和 jEditor 窗格上尝试它。我使用 hyperlinkUpdate 监听器来显示弹出菜单,但它总是出现在 GUI 的左上角。 此外,我找不到如何更新超链接的文本。

hyperlinkUpdate事件的代码如下:

private void jEditorPane1HyperlinkUpdate(javax.swing.event.HyperlinkEvent evt) {                                             
    if(evt.getEventType() == HyperlinkEvent.EventType.ACTIVATED){
    System.out.println(evt.getDescription());
    jPopupMenu1.setAlignmentX(jEditorPane1.getMousePosition().x);
    jPopupMenu1.setAlignmentY(jEditorPane1.getMousePosition().y);
    jPopupMenu1.setVisible(true);
    }
}      

请有人在这件事上指导我。 提前致谢。

【问题讨论】:

  • 考虑提供一个runnable example 来证明您的问题,这将减少猜测工作并产生更好的响应
  • @MadProgrammer 我在问题中添加了一些代码。现在 Rite 我刚刚制作了一个带有一个 menuItem 的示例弹出菜单来检查我的工作。
  • 不要使用getMousePosition,您应该尝试在编辑器视图中找到关联的Element所在的位置
  • @MadProgrammer...好吧,让我试试吧
  • @MadProgrammer 我试试 evt.getSourceElement() 但这个东西也没有坐标。

标签: java swing jtextpane jeditorpane jpopupmenu


【解决方案1】:

调用应该是这样的

        JPopupMenu popup = new JPopupMenu();
        popup.add("Item 1");
        popup.add("Item 2");
        popup.show(mouseEvent.getComponent(),mouseEvent.getX(),mouseEvent.getY());

在此处查看示例 http://www.experts-exchange.com/Programming/Languages/Java/Q_20143329.html

【讨论】:

  • 实际上我使用的是超链接事件,所以鼠标事件不起作用。
  • 好的。然后你有源元素。使用元素的开始/结束偏移并使用 modelToView() 将其转换为 X、Y 坐标。要使用的组件是 JEditorPane 实例
  • 我用户'popup.show(jEditorPane1, jEditorPane1.getMousePosition().x, jEditorPane1.getMousePosition().y);'在你的代码中,它以某种方式工作。现在将事件链接到项目。
  • 最好使用jEditorPane1的modelToView方法传递元素的偏移量来获取正确的超链接坐标
  • 我已经这样做了 'Rectangle rec = jEditorPane1.modelToView(evt.getSourceElement().getStartOffset()); popup.show(jEditorPane1, rec.x, rec.y);'但它仅在单击超链接的开头时才会提供弹出菜单。附:它与 startOffset 无关,在 'getEndOffest()' 上发生同样的事情
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-29
  • 2023-03-25
  • 2011-08-17
  • 1970-01-01
  • 2012-07-26
  • 1970-01-01
  • 2018-03-09
相关资源
最近更新 更多