swing html中的Java回调

Java call back in swing html

本文关键字:回调 Java 中的 html swing      更新时间:2023-09-26

我们正在使用HTML在swing应用程序中绘制表格

String html = generateHtml();
this.textPane = new JTextPane();
HTMLEditorKit kit = new HTMLEditorKit();
textPane.setEditorKit(kit);
StyleSheet styleSheet = kit.getStyleSheet();
styleSheet.addRule("th, td {width: 50px; text-align: center;}");
Document doc = kit.createDefaultDocument();
textPane.setDocument(doc);
textPane.setContentType("text/html");
textPane.setText(html);
textPane.setEditable(false);
textPane.setBackground(null);
textPane.setBorder(null);
textPane.putClientProperty(JTextPane.HONOR_DISPLAY_PROPERTIES, Boolean.TRUE);
this.add(textPane);

我想能够点击其中一个表单元格,调用java类回调,也许通过javascript?还是其他选择?
例如,单击一个表格单元格,它将调用一个java方法来完成一些工作,并打开一些对话框窗口。
也许这可以通过javascript来回调java?或者直接从HTML到java?

我知道有第三方库,比如JxBrowser,就像这个例子一样,但是,我们首先要看看是否有一种方法可以通过使用内置组件来做到这一点,而不需要将第三方库添加到分布式应用程序中。

我想能够点击其中一个表单元格,调用java类回调,也许通过javascript?还是其他选择?例如,单击一个表格单元格,它将调用一个java方法来完成一些工作,并打开一些对话框窗口。

假设您正在显示相对简单的内容,您可以将表格单元格的内容包装在链接中,并使用超链接侦听器来处理链接上的单击事件。一个简单的例子:

JTextPane editor = new JTextPane();
editor.setContentType("text/html");
editor.setText("<html><body><table><tr><td><a href='"a1'" >Cell1</a></td><td><a href='"a2'">Cell2</a></td></tr></table></body></html>");
editor.addHyperlinkListener(new HyperlinkListener(){
    @Override
    public void hyperlinkUpdate(HyperlinkEvent e) {
        if ( e.getEventType() == HyperlinkEvent.EventType.ACTIVATED ){
            System.out.println(e.getDescription());
        }
    }
});
editor.setEditable(false);

你需要为链接设置额外的样式,如果你不希望有默认的样式(颜色,下划线等)。