如何使用Swing JEditorPane中的击键触发超链接

时间:2009-10-01 21:43:11

标签: java swing jeditorpane

我正在尝试使用“Enter”击键在JEditorPane中触发超链接。这样插入符号下的超链接(如果有的话)就会触发而不必用鼠标点击。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:5)

首先,HyperlinkEvent仅针对不可编辑的JEditorPane触发,因此用户很难知道插入符号何时通过链接。

但是如果你想这样做,那么你应该使用Key Bindings(而不是KeyListener)将Action绑定到ENTER KeyStroke。

执行此操作的一种方法是通过在按下Enter键时将MouseEvent分派到编辑器窗格来模拟mouseClick。像这样:

class HyperlinkAction extends TextAction
{
    public HyperlinkAction()
    {
        super("Hyperlink");
    }

    public void actionPerformed(ActionEvent ae)
    {
        JTextComponent component = getFocusedComponent();
        HTMLDocument doc = (HTMLDocument)component.getDocument();
        int position = component.getCaretPosition();
        Element e = doc.getCharacterElement( position );
        AttributeSet as = e.getAttributes();
        AttributeSet anchor = (AttributeSet)as.getAttribute(HTML.Tag.A);

        if (anchor != null)
        {
            try
            {
                Rectangle r = component.modelToView(position);

                MouseEvent me = new MouseEvent(
                    component,
                    MouseEvent.MOUSE_CLICKED,
                    System.currentTimeMillis(),
                    InputEvent.BUTTON1_MASK,
                    r.x,
                    r.y,
                    1,
                    false);

                component.dispatchEvent(me);
            }
            catch(BadLocationException ble) {}
        }
    }
}