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

11

一个应用程序生成一些需要在应用程序本身中显示的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();
    }
}

根据用户的输入,输出将会是:

input1=Some+text&input2=More+text&cb1=on&rb1=on
注意,“action”属性是必须的,否则将抛出异常。
_
提前感谢任何提示。

你能否提供一些代码,让我开始尝试一下? - Boro
1个回答

7
我相信如果你的表单上有一个提交按钮,它应该能够正常工作并将数据发送到服务器。我不确定你是否可以在代码中与它进行交互。这些元素被呈现为swing组件,因此理论上你可以从JTextPane获取所有组件,找到你的按钮和输入字段。 编辑:要在JEditorPane中完成这个操作,你需要将submit属性的自动设置为false。
((HTMLEditorKit)textPane.getEditorKit()).setAutoFormSubmission(false);

然后您将能够在编辑器窗格中注册超链接监听器,并且您将收到一个 FormSubmitEvent。它包含URL和方法,因此您可以从中解码一些数据。


理论上应该是这样的,但在搜索类似用例后,我发现没有任何代码可以实现或者类似。使用Eclipse调试观察功能对组件进行操作也无济于事。也许有另一种方式来获取数据,例如在提交表单时捕获POST数据。 - Pragmateek
很高兴看到捕获提交并不是一个荒谬的想法。根据您提供的提示,即禁用自动表单提交并注册“FormSubmitEvent”超链接事件,完成了工作。我将在原帖中编辑一些代码。非常感谢! - Pragmateek
@Serious:不客气。很奇怪这方面的文档资料很难找到。还有一件事——请检查您接收到的事件是否真的是FormSubmitEvent,因为如果您稍后向表单添加任何其他超链接,可能会出现ClassCastException。 - Denis Tulskiy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接