Прослушивание флажков HTML в jTextPane (или альтернатива)? - PullRequest
2 голосов
/ 31 октября 2011

Я использую нередактируемый JTextPane для отображения некоторых данных в формате HTML.Я установил contentType в «text / html», и он работает.Теперь я хотел добавить HTML-флажки в JTextPane, прослушать их изменения и получить возможность извлекать, если выбран определенный checkBox.Возможно ли это?

Текст JTextPane имеет следующий формат:

<html><form>
<input type="checkbox" name="checkbox1" value="value" /> checkbox1<br />
</form></html>

Должен ли я вообще использовать JTextPane для этой цели, или есть лучший контроль?Обычные флажки не являются опцией, потому что мне нужен формат HTML, чтобы легко их стилизовать.

Ответы [ 2 ]

7 голосов
/ 01 ноября 2011

Как правило, вы будете использовать JEditorPane для отображения HTML.

В зависимости от ваших требований есть два способа сделать это:

  1. Компоненты Swing фактически добавляются на панель редактора.Таким образом, после анализа документа и повторной проверки панели редактора () вы сможете просто получить список всех компонентов, добавленных на панель редактора.Вы можете проверить имя класса, чтобы найти нужные компоненты.

  2. HTMLDocument содержит атрибуты для каждого добавленного компонента, включая модель компонентов.Таким образом, вы можете искать документ, чтобы получить модель для каждого флажка.

Вот некоторый общий код для начала работы:

import java.awt.*;
import java.util.*;
import java.io.*;
import javax.swing.*;
import javax.swing.text.*;
import javax.swing.text.html.*;

public class GetComponent extends JFrame
{
    public GetComponent()
        throws Exception
    {
        FileReader reader = new FileReader("form.html");

        JEditorPane editor = new JEditorPane();
        editor.setContentType( "text/html" );
        editor.setEditable( false );
        editor.read(reader, null);

        JScrollPane scrollPane = new JScrollPane( editor );
        scrollPane.setPreferredSize( new Dimension(400, 300) );
        add( scrollPane );

        setDefaultCloseOperation( EXIT_ON_CLOSE );
        pack();
        setLocationRelativeTo( null );
        setVisible(true);

        //  display the attributes of the document

        HTMLDocument doc = (HTMLDocument)editor.getDocument();
        ElementIterator it = new ElementIterator(doc);
        Element element;

        while ( (element = it.next()) != null )
        {
            System.out.println();

            AttributeSet as = element.getAttributes();
            Enumeration enumm = as.getAttributeNames();

            while( enumm.hasMoreElements() )
            {
                Object name = enumm.nextElement();
                Object value = as.getAttribute( name );
                System.out.println( "\t" + name + " : " + value );

                if (value instanceof DefaultComboBoxModel)
                {
                    DefaultComboBoxModel model = (DefaultComboBoxModel)value;

                    for (int j = 0; j < model.getSize(); j++)
                    {
                        Object o = model.getElementAt(j);
                        Object selected = model.getSelectedItem();
                        System.out.print("\t\t");

                        if ( o.equals( selected ) )
                            System.out.println( o + " : selected" );
                        else
                            System.out.println( o );
                    }
                }
            }
        }

        //  display the components added to the editor pane

        for (Component c: editor.getComponents())
        {
            Container parent = (Container)c;
            System.out.println(parent.getComponent(0).getClass());
        }
    }

    public static void main(String[] args)
        throws Exception
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                try
                {
                    GetComponent frame = new GetComponent();
                }
                catch(Exception e) { System.out.println(e); }
            }
        });
    }
}
1 голос
/ 31 октября 2011

Я не думаю, что вы могли бы обрабатывать события javascript в JTextPane, поэтому я не думаю, что переключение флажка - вариант.

...