Java 在Swing应用程序中显示HTML表单并与之交互

Java 在Swing应用程序中显示HTML表单并与之交互,java,html,swing,forms,jeditorpane,Java,Html,Swing,Forms,Jeditorpane,应用程序生成一些应在应用程序本身中显示的HTML页面 这些HTML页面包含一些表单,用户可以使用这些表单输入一些值 到目前为止,我使用了一个JTextPane,它完美地呈现了HTML,但我不知道如何与表单交互来检索用户输入的值 _ 使用JTextPane/JEditorPane可以这样做吗? 如果没有,您现在是否有其他方式与HTML表单交互? _ 编辑:按照tulskiy的说明,结果如下: package tests; import javax.swing.*; import javax.sw

应用程序生成一些应在应用程序本身中显示的HTML页面

这些HTML页面包含一些表单,用户可以使用这些表单输入一些值

到目前为止,我使用了一个JTextPane,它完美地呈现了HTML,但我不知道如何与表单交互来检索用户输入的值

_

使用JTextPane/JEditorPane可以这样做吗?

如果没有,您现在是否有其他方式与HTML表单交互?

_

编辑:按照tulskiy的说明,结果如下:

package tests;

import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.html.*;

import org.junit.Test;


public class JTextPaneTests
{
    @Test
    public void testForms() throws Exception
    {
        javax.swing.SwingUtilities.invokeLater(
            new Runnable()
            {
                public void run()
                {
                    javax.swing.JFrame jf = new javax.swing.JFrame();
                    jf.setSize(300,300);
                    jf.setVisible(true);
                    jf.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);

                    JTextPane textPane = new JTextPane();
                    textPane.setContentType("text/html");
                    textPane.setEditable(false);
                    textPane.setText(
                            "<html>" +
                                "<body>" +
                                    "<form action=\"#\">" +
                                        "<input name=\"input1\" type=\"text\" />" +
                                        "<input name=\"input2\" type=\"text\" /><br/>" +
                                        "<input name=\"cb1\" type=\"checkbox\" /><br/>" +
                                        "<input name=\"rb1\" type=\"radio\" /><br/>" +
                                        "<input type=\"submit\" value=\"go\" />" +
                                    "</form>" +
                                "</body>" +
                            "</html>");

                    jf.getContentPane().setLayout(new BoxLayout(jf.getContentPane(), BoxLayout.Y_AXIS));

                    jf.getContentPane().add(textPane);

                    HTMLEditorKit kit = (HTMLEditorKit)textPane.getEditorKit();
                    kit.setAutoFormSubmission(false);
                    textPane.addHyperlinkListener(new HyperlinkListener()
                    {                           
                        @Override
                        public void hyperlinkUpdate(HyperlinkEvent e)
                        {
                            if (e instanceof FormSubmitEvent)
                            {
                                System.out.println(((FormSubmitEvent)e).getData());
                            }
                        }
                    });
                }
            }
        );

        System.in.read();
    }
}
请注意,“action”属性是必需的,否则会引发异常

_


提前感谢您的提示。

我相信如果您的表单上有一个提交按钮,它应该可以工作并将数据发送到服务器。我不确定您是否可以在代码中与它交互。这些元素呈现为swing组件,因此理论上,您可以从JTextPane获取所有组件,并找到按钮和输入字段

编辑要在JEditorPane中执行此操作,需要将“自动提交”属性设置为false

((HTMLEditorKit)textPane.getEditorKit()).setAutoFormSubmission(false);

然后,您将能够在编辑器窗格中注册一个超链接侦听器,并将收到一个
FormSubmitEvent
。它有url和方法,所以你可以从中解码一些数据。

你可以提供一些代码,一些可以开始使用的东西吗?理论上应该是这样的,但在谷歌搜索类似的用例后,我发现没有代码可以这样做或类似的东西。使用具有Eclipse调试监视功能的组件也没有帮助。也许还有另一种获取数据的方法,例如,在提交表单时捕获POST数据。很高兴看到捕获提交不是一个荒谬的想法。按照您的提示(即禁用自动表单提交并注册“FormSubmitEvent”超链接事件)完成了此工作。我将用一些代码编辑我的原始帖子。非常感谢@严肃的:不客气。奇怪的是,很难找到关于这个的任何文档。还有一件事-检查您收到的事件实际上是一个FormSubmitEvent,因为如果您稍后向表单添加任何其他超链接,您可能会有一个ClassCastException。
((HTMLEditorKit)textPane.getEditorKit()).setAutoFormSubmission(false);