Exibe e interage com um formulário HTML em um aplicativo Swing

9

um aplicativo gera algumas páginas HTML que devem ser exibidas no próprio aplicativo.

Essas páginas HTML contêm alguns formulários que seriam usados pelo usuário para inserir alguns valores.

Até agora eu usei um JTextPane que renderiza o HTML perfeitamente, mas não sei como interagir com o formulário para recuperar os valores inseridos pelo usuário .

_

É possível fazer isso com um JTextPane / JEditorPane?

Se não, você tem outra maneira de interagir com um formulário HTML?

_

EDITAR : seguindo as instruções tulskiy , aqui está o resultado:

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();
    }
}

Dependendo das entradas do usuário, a saída será como:

input1=Some+text&input2=More+text&cb1=on&rb1=on

Observe que o atributo " action " é obrigatório, caso contrário, uma exceção será lançada.

_

Agradecemos antecipadamente por qualquer dica.

    
por Pragmateek 26.05.2011 в 23:38
fonte

1 resposta

5

Eu acredito que, se você tiver um botão de envio em seu formulário, ele deve funcionar e enviar dados para o servidor. Não tenho certeza se você pode interagir com ele no código. Esses elementos são renderizados como componente de swing, então, em teoria, você obtém todos os componentes do JTextPane e localiza o seu botão e campos de entrada.

EDITAR Para fazer isso é no JEditorPane, você precisa definir auto para a propriedade de envio como false

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

então você poderá registrar um ouvinte de hiperlink com o painel do editor e receberá um FormSubmitEvent . Tem url e método, então você pode decodificar alguns dados dele.

    
por Denis Tulskiy 27.05.2011 / 09:32
fonte