捕获超链接单击java SWT

时间:2015-09-01 18:09:32

标签: java swt

我已经设置了一个浏览器实现来查看网页。我无法弄清楚如何捕获超链接点击。如果我点击某个链接就没有任何反应。

我已尝试过Listener,LocationListener并应用于shell,display,browserWindowGroup和浏览器,但没有响应超链接点击。

更新:这与http://inbox.google.com特别相关。我可以点击其他地方的超链接,而不是在Google收件箱中的邮件正文中。

    import org.eclipse.swt.SWT;
    import org.eclipse.swt.browser.Browser;
    import org.eclipse.swt.layout.GridData;
    import org.eclipse.swt.layout.GridLayout;
    import org.eclipse.swt.widgets.*;

    public class BrowserTest {

    public static void main(String[] args) {
        Display display = new Display();
        final Shell shell = new Shell(display);
        shell.setText("Browser Test");
        shell.setLayout(new GridLayout(1, false));

        Group browserWindowGroup = new Group(shell, SWT.NONE);
        browserWindowGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
        browserWindowGroup.setLayout(new GridLayout(1, false));

        final Browser browser = new Browser(browserWindowGroup, SWT.NONE);
        browser.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

        shell.setSize(1280, 800);
        shell.open();
        browser.setUrl("http://inbox.google.com");
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch())
                display.sleep();
        }
        display.dispose();
    }
}

1 个答案:

答案 0 :(得分:0)

感谢您提供可运行的示例! 我在https://deanoneclipse.wordpress.com/2011/04/27/intercepting-links/

找到了解决方案

您需要添加LocationListener,就像这样

    browser.addLocationListener(new LocationListener() {
        public void changing(LocationEvent event) {
            System.out.println(event);            
        }

        public void changed(LocationEvent event) {
        }
    });

让你的全班看起来像这样

import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.browser.LocationEvent;
import org.eclipse.swt.browser.LocationListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Shell;

public class BrowserTest {

    public static void main(String[] args) {
        Display display = new Display();
        final Shell shell = new Shell(display);
        shell.setText("Browser Test");
        shell.setLayout(new GridLayout(1, false));

        Group browserWindowGroup = new Group(shell, SWT.NONE);
        browserWindowGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
        browserWindowGroup.setLayout(new GridLayout(1, false));

        final Browser browser = new Browser(browserWindowGroup, SWT.NONE);
        browser.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
        browser.addLocationListener(new LocationListener() {
            public void changing(LocationEvent event) {
                    System.out.println(event);
            }

            public void changed(LocationEvent event) {
            }
        });

        shell.setSize(1280, 800);
        shell.open();
        browser.setUrl("http://www.google.com");
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch())
                display.sleep();
        }
        display.dispose();
    }

}