addMouseListener к программе - PullRequest
       4

addMouseListener к программе

0 голосов
/ 26 марта 2012

я пытаюсь переписать mouseClicked функцию MouseAdapter, тогда я могу использовать ее в своей программе следующим образом:

import java.awt.Component;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URL;
import java.net.URLConnection;
import javax.swing.JFrame;
import javax.xml.parsers.ParserConfigurationException;
import org.lobobrowser.html.HtmlRendererContext;
import org.lobobrowser.html.UserAgentContext;
import org.lobobrowser.html.domimpl.HTMLLinkElementImpl;
import org.lobobrowser.html.gui.HtmlPanel;
import org.lobobrowser.html.parser.DocumentBuilderImpl;
import org.lobobrowser.html.parser.InputSourceImpl;
import org.lobobrowser.html.test.SimpleHtmlRendererContext;
import org.lobobrowser.html.test.SimpleUserAgentContext;
import org.w3c.dom.Document;
import org.w3c.dom.html2.HTMLLinkElement;
import org.w3c.dom.html2.HTMLElement;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

public  class test {



public static void main(String[] args) throws SAXException, 
            IOException, ParserConfigurationException {

        String uri = "http://docs.oracle.com/javase/1.5.0/docs/api/java/awt/event/MouseAdapter.html";
        URL url = new URL(uri);
        URLConnection connection = url.openConnection();
        InputStream in = connection.getInputStream();
        Reader reader = new InputStreamReader(in);
        InputSource is = new InputSourceImpl(reader, uri);
        UserAgentContext uAgent = new SimpleUserAgentContext();
        final HtmlPanel htmlPanel = new HtmlPanel();
        final HtmlRendererContext rendererContext = (HtmlRendererContext) 
                new LocalHtmlRendererContext(htmlPanel, uAgent);
        DocumentBuilderImpl builder = new DocumentBuilderImpl(uAgent, rendererContext);
        Document document = builder.parse(is);
        JFrame frame = new JFrame();
        frame.setContentPane(htmlPanel);


        htmlPanel.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseClicked(MouseEvent e) {
                System.out.println("adr is equal to" + rendererContext.getCurrentURL());

                System.out.println("Clicked!" + e);
            }
        });

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        htmlPanel.setDocument(document, rendererContext);
        frame.setSize(400, 800);
        frame.setVisible(true);
    }

    private static class LocalHtmlRendererContext extends SimpleHtmlRendererContext {

        public LocalHtmlRendererContext(HtmlPanel contextComponent, UserAgentContext uAgent) {
            super(contextComponent);
        }
    }
}

, но она не работает.если я нажимаю на любую часть формы, ничего не происходит.

я пробовал htmlPanel.addMouseListener(new MouseAdapter() и frame.addMouseListener(new MouseAdapter() и то и другое, но без помощи.

РЕДАКТИРОВАТЬ:

я попробовал вашпредложение, и я выбрал BrowsertPanel вместо HtmlPanel, затем я попытался получить его компонент следующим образом:

org.lobobrowser.gui.AddressBarPanel[,0,0,0x0,invalid,layout=javax.swing.BoxLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=]
org.lobobrowser.gui.SharedToolBarPanel[,0,0,0x0,invalid,layout=javax.swing.BoxLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=]
org.lobobrowser.gui.FillerComponent[,0,0,0x0,invalid,layout=org.lobobrowser.util.gui.WrapperLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=0,maximumSize=java.awt.Dimension[width=32767,height=32767],minimumSize=java.awt.Dimension[width=0,height=0],preferredSize=java.awt.Dimension[width=32767,height=32767]]
org.lobobrowser.gui.StatusBarPanel[,0,0,0x0,invalid,layout=javax.swing.BoxLayout,alignmentX=0.0,alignmentY=0.0,border=javax.swing.border.BevelBorder@c2a132,flags=9,maximumSize=,minimumSize=,preferredSize=]

также я добавил навигационный список и, когда он перемещается, я получаю событие следующим образом:

org.lobobrowser.ua.NavigationEvent[source=FramePanel[windowId=BrowserPanel.10481519,hashCode=23491286,parent=org.lobobrowser.gui.FillerComponent[,0,25,584x316,layout=org.lobobrowser.util.gui.WrapperLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=0,maximumSize=java.awt.Dimension[width=32767,height=32767],minimumSize=java.awt.Dimension[width=0,height=0],preferredSize=java.awt.Dimension[width=32767,height=32767]]]]

но я чувствую себя потерянным в этих компонентах, кажется, что FillerComponent или FramePanel отвечают за рендеринг, несмотря на это, я не знаю, как добавить к ним слушателя.

такженашел эту ссылку , что кто-то описал шаги по решению проблемы, но мне так сложно?есть ли псевдокод для распространения?

Ответы [ 2 ]

4 голосов
/ 26 марта 2012

Этот код (это SSCCE &) работает. Попробуйте менять его по одной строке, пока не увидите манифест ошибки.

import java.awt.event.*;
import javax.swing.*;
import java.net.URL;

public  class test {

    public static void main(String[] args) throws Exception {

        String uri = "http://docs.oracle.com/javase/1.5.0/docs/api/java/awt/event/MouseAdapter.html";
        final URL url = new URL(uri);
        JEditorPane htmlPanel = new JEditorPane(url);
        JFrame frame = new JFrame();
        frame.setContentPane(htmlPanel);

        htmlPanel.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                System.out.println("adr is equal to" + url);

                System.out.println("Clicked!" + e);
            }
        });

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 800);
        frame.setVisible(true);
    }
}

Обновление

.. похоже ошибка из htmlpanel

Я немного покопался, основываясь на комментарии Станислава Л. Кажется, SimpleBrowserFrame расширяет HtmlPanel и предоставляет метод getComponent(), который ..

Получает компонент, который отображает кадр. ..

Возможно, если использовать SimpleBrowser, вы можете добавить слушателя к ребенку, и это сработает. По общему признанию я только догадываюсь после быстрого трала, хотя документы.

3 голосов
/ 26 марта 2012

Просто предположение. Проверьте дочерние компоненты htmlPanel. Может быть, они покрывают всю панель. Попробуйте подключить прослушиватель ко всем подкомпонентам после заполнения HtmlPanel содержимым.

...