addMouseListener添加到程序中 [英] addMouseListener to a program

查看:105
本文介绍了addMouseListener添加到程序中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

即时覆盖 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;
导入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 { b
$ b String uri =http://docs.oracle.com/javase/1.5.0/docs/api/java/awt/event/MouseAdapter.html;
网址url =新网址(uri);
URLConnection connection = url.openConnection();
InputStream in = connection.getInputStream();
Reader reader = new InputStreamReader(in);
InputSource = new InputSourceImpl(reader,uri);
UserAgentContext uAgent = new SimpleUserAgentContext();
final HtmlPanel htmlPanel = new HtmlPanel();
final HtmlRendererContext rendererContext =(HtmlRendererContext)
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 {
$ b $ 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,无效,布局= javax.swing.BoxLayout中,alignmentX = 0.0,alignmentY = 0.0,边界=,旗帜= 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, org.lobobrowser.util.gui.WrapperLayout,alignmentX = 0.0,alignmentY = 0.0,minimumSize =,minimumSize =边界=,标志= 0,MAXIMUMSIZE = java.awt.Dimension中[宽度= 32767,高度= 32767],=的minimumSize java.awt.Dimension中[WID th = 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 =]

我还添加了navigationListener,当它导航时,我得到以下事件:

  org.lobobrowser.ua.NavigationEvent [源= FramePanel [WINDOWID = BrowserPanel.10481519,的hashCode = 23491286,父= org.lobobrowser.gui.FillerComponent [,0,25,584x316,布局=组织。 lobobrowser.util.gui.WrapperLayout,alignmentX = 0.0,alignmentY = 0.0,边界=,标志= 0,MAXIMUMSIZE = java.awt.Dimension中[宽度= 32767,高度= 32767],=的minimumSize java.awt.Dimension中[宽度= 0,height = 0],preferredSize = java.awt.Dimension [width = 32767,height = 32767]]]] 

但我觉得我迷失在这些组件中,看起来像 FillerComponent FramePanel 是res尽管如此,我不知道如何添加监听器。



也发现这个链接有人描述了解决问题的步骤,但对我来说似乎太复杂了?是否有任何伪代码分发?

解决方案

这个代码(是一个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 /文档/ API / JAVA / AWT /事件/ MouseAdapter.html;
最终网址url =新网址(uri);
JEditorPane htmlPanel =新的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);




$ h $更新


..似乎是来自htmlpanel的错误


我做了一些挖掘,关于StanislavL的评论。它似乎是一个 SimpleBrowserFrame 扩展 HtmlPanel &提供了 getComponent() 其中..


获取渲染帧的组件。 ..

也许如果使用 SimpleBrowser ,您可以添加侦听器给孩子,它会起作用。无可否认,我只是在通过文档快速拖网之后进行猜测。


im trying to overwrite mouseClicked function of MouseAdapter then i can use it in my program as follow:

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);
        }
    }
}

but it is not working. if i clik on any part of the form, nothing happens.

i tried htmlPanel.addMouseListener(new MouseAdapter() and frame.addMouseListener(new MouseAdapter() both but no help.

EDIT:

i tried your suggestion, and i choosed BrowsertPanel instead of HtmlPanel, then i tried to get its component as follow:

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=]

also i added a navigationListener and when it navigates, i get the event as follow:

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]]]]

but i feel im lost in these components, it seems the FillerComponent or FramePanel are responsible for rendering, even so, i have no idea how to add listener to them.

also found this Link that someone described the steps to solve the problem, but seems so complicated to me? is there any pseudocode to distribute?

解决方案

This code (is an SSCCE &) works. Try changing it one line at a time until you see the error manifest.

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);
    }
}

Update

..seems bug is from htmlpanel

I did a bit of digging, based on the comment of StanislavL. It seems a SimpleBrowserFrame extends HtmlPanel & provides the method getComponent() which..

Gets the component that renders the frame. ..

Perhaps if a SimpleBrowser was used, you could add the listener to the child and it would work. Admittedly I am just guessing after a quick trawl though the docs.

这篇关于addMouseListener添加到程序中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆