Как вызвать гиперссылку, используя нажатие клавиши в Swing JEditorPane - PullRequest
0 голосов
/ 02 октября 2009

Я пытаюсь запустить гиперссылки в JEditorPane с помощью нажатия клавиши «Ввод». Так что гиперссылка (если есть) под кареткой будет срабатывать, а не щелкать мышью.

Любая помощь будет оценена.

1 Ответ

5 голосов
/ 02 октября 2009

Прежде всего, HyperlinkEvent запускается только на нередактируемом JEditorPane, поэтому пользователям будет сложно узнать, когда каретка находится над ссылкой.

Но если вы действительно хотите это сделать, вам следует использовать привязки клавиш (не KeyListener) для привязки действия к нажатию клавиши ENTER.

Один из способов сделать это - имитировать щелчок мышью, отправляя MouseEvent на панель редактора при нажатии клавиши Enter. Как то так:

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) {}
        }
    }
}
...