【发布时间】:2012-03-26 10:32:05
【问题描述】:
我试图覆盖MouseAdapter 的mouseClicked 函数,然后我可以在我的程序中使用它,如下所示:
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=]
我还添加了一个 navigationListener,当它导航时,我得到如下事件:
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 负责渲染,即便如此,我也不知道如何为它们添加监听器。
还发现这个Link 有人描述了解决问题的步骤,但对我来说似乎很复杂?有伪代码可以分发吗?
【问题讨论】:
-
HtmlPanel到底是什么?没关系。为了尽快获得更好的帮助,请发布SSCCE。 SSCCE 将回答这个问题,以及我接下来的 10 个问题。 -
@AndrewThompson 如果您的意思是可以通过复制/粘贴运行的代码,我做了,但您需要获取 lobobrowser 库,如何添加它?
-
我(1) 不准备下载任何东西来测试源代码。如果使用核心 J2SE 无法重现该问题,则可能是第 3 方 API 存在问题。您应该与该 API 的供应商讨论的问题。话虽如此,如果您将
HtmlPane换成JEditotPane并看到完全相同的“空”行为-那可能是SSCCE。 1) ..可能还有几个人除了我,虽然我只能代表我自己。 -
@AndrewThompson 所以你认为代码一般正确吗?
-
可能不会。毕竟,它不是检测鼠标点击,是吗?除此之外,它做了两件不太理想的事情,这似乎都不是最直接的问题。 1)
setSize在框架上而不是setPreferredSize/good layout for content 和pack在框架上。 2) GUI 应该在 EDT 上启动(和更新)。
标签: java html swing mouseevent mouselistener