Swing JDialog/JTextPane 和 HTML 链接

发布于 2024-12-02 12:54:21 字数 513 浏览 2 评论 0 原文

我正在 JDialog 中的 swing JTextPane 内使用 html 页面。
在html中我有一个 [电子邮件受保护]">John
当我通过资源管理器查看网页时,当鼠标移至链接时,我可以看到 mailto
当我按下链接时,我收到错误“未安装默认邮件客户端”,但我猜这是因为我的电脑中没有配置 Outlook 或其他程序。
当我从 Swing 应用程序中打开 JDialog 时,我看到 John 突出显示为链接,但当我按下该链接时什么也没有发生。
我期望得到与浏览器相同的错误消息。
所以我的问题是该链接是否可以通过 Swing 应用程序打开?

谢谢

I am using an html page inside a swing JTextPane in a JDialog.
In the html I have a <a href="mailto:[email protected]">John</a>
When I view the web page via an explorer when the mouse goes to the link I can see the mailto.
When I press the link I get the error "no default mail client installed", but I guess this is due to in my PC I have not configured Outlook or some other program.
When I open the JDialog from my Swing application, I see John highlighted as a link, but when I press the link nothing happens.
I was expecting to get the same error message as the browser.
So my question is can the link be opened via a Swing application or not?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

这个俗人 2024-12-09 12:54:21

工具提示(显示目标超链接地址)和按下时的操作都不会自动发生,您必须对其进行编码:对于第一个,使用 ToolTipManager 注册窗格,对于后者,注册一个 HyperlinkListener,类似于

    final JEditorPane pane = new JEditorPane("http://swingx.java.net");
    pane.setEditable(false);
    ToolTipManager.sharedInstance().registerComponent(pane);

    HyperlinkListener l = new HyperlinkListener() {
        @Override
        public void hyperlinkUpdate(HyperlinkEvent e) {
            if (HyperlinkEvent.EventType.ACTIVATED == e.getEventType()) {
                try {
                    pane.setPage(e.getURL());
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }

        }

    };
    pane.addHyperlinkListener(l);

:在同一窗格中打开页面。如果您想激活默认浏览器/邮件客户端,请要求桌面(jdk1.6 的新功能)为您执行此操作

Neither the tooltip (showing the target hyperlink address) nor the action on press happens automatically, you have to code it: for the first, register the pane with the ToolTipManager, for the latter, register a HyperlinkListener, something like:

    final JEditorPane pane = new JEditorPane("http://swingx.java.net");
    pane.setEditable(false);
    ToolTipManager.sharedInstance().registerComponent(pane);

    HyperlinkListener l = new HyperlinkListener() {
        @Override
        public void hyperlinkUpdate(HyperlinkEvent e) {
            if (HyperlinkEvent.EventType.ACTIVATED == e.getEventType()) {
                try {
                    pane.setPage(e.getURL());
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }

        }

    };
    pane.addHyperlinkListener(l);

The example is about opening the page in the same pane. If you want to activate the default browser/mail-client, ask the Desktop (new to jdk1.6) to do it for you

怀念你的温柔 2024-12-09 12:54:21
final JEditorPane jep = new JEditorPane("text/html",
    "The rain in <a href='http://foo.com/'>Spain</a> falls mainly on the <a href='http://bar.com/'>plain</a>.");

jep.setEditable(false);
jep.setOpaque(false);
final Desktop desktop = Desktop.getDesktop(); 

jep.addHyperlinkListener(new HyperlinkListener() {

    public void hyperlinkUpdate(HyperlinkEvent hle) {
        if (HyperlinkEvent.EventType.ACTIVATED.equals(hle.getEventType())) {
            try {
                System.out.println(hle.getURL());
                jep.setPage(hle.getURL());
                try {
                    desktop.browse(new URI(hle.getURL().toString()));
                } catch (URISyntaxException ex) {
                    Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
                }
            } catch (IOException ex) {
                Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
            }

        }
    }
});

JPanel p = new JPanel();
p.add(new JLabel("Foo."));
p.add(jep);
p.add(new JLabel("Bar."));

JFrame f = new JFrame("HyperlinkListener");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().add(p, BorderLayout.CENTER);
f.setSize(400, 150);
f.setVisible(true);
final JEditorPane jep = new JEditorPane("text/html",
    "The rain in <a href='http://foo.com/'>Spain</a> falls mainly on the <a href='http://bar.com/'>plain</a>.");

jep.setEditable(false);
jep.setOpaque(false);
final Desktop desktop = Desktop.getDesktop(); 

jep.addHyperlinkListener(new HyperlinkListener() {

    public void hyperlinkUpdate(HyperlinkEvent hle) {
        if (HyperlinkEvent.EventType.ACTIVATED.equals(hle.getEventType())) {
            try {
                System.out.println(hle.getURL());
                jep.setPage(hle.getURL());
                try {
                    desktop.browse(new URI(hle.getURL().toString()));
                } catch (URISyntaxException ex) {
                    Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
                }
            } catch (IOException ex) {
                Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
            }

        }
    }
});

JPanel p = new JPanel();
p.add(new JLabel("Foo."));
p.add(jep);
p.add(new JLabel("Bar."));

JFrame f = new JFrame("HyperlinkListener");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().add(p, BorderLayout.CENTER);
f.setSize(400, 150);
f.setVisible(true);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文